<?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: 🅖🅡🅔🅖🅞🅡🅨 🅞🅡🅣🅞🅝</title>
    <description>The latest articles on DEV Community by 🅖🅡🅔🅖🅞🅡🅨 🅞🅡🅣🅞🅝 (@ortonomy).</description>
    <link>https://dev.to/ortonomy</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%2F304193%2F7ca2253f-a8f9-42a8-87b9-6cec43318d73.jpeg</url>
      <title>DEV Community: 🅖🅡🅔🅖🅞🅡🅨 🅞🅡🅣🅞🅝</title>
      <link>https://dev.to/ortonomy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ortonomy"/>
    <language>en</language>
    <item>
      <title>Naming things is difficult...</title>
      <dc:creator>🅖🅡🅔🅖🅞🅡🅨 🅞🅡🅣🅞🅝</dc:creator>
      <pubDate>Fri, 18 Jun 2021 08:39:14 +0000</pubDate>
      <link>https://dev.to/ortonomy/naming-things-is-hard-425a</link>
      <guid>https://dev.to/ortonomy/naming-things-is-hard-425a</guid>
      <description>&lt;p&gt;I was recently asked to write a section for our company's new developer handbook on API design...&lt;/p&gt;

&lt;p&gt;Top to bottom.... here we go...&lt;/p&gt;

&lt;p&gt;You might have seen in the wild, a request like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/api/v2/customers/24/orders/1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;or &lt;/p&gt;

&lt;p&gt;&lt;code&gt;/products/56/variants&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Both of these examples are pretty sound design choices, and here's why:&lt;/p&gt;

&lt;h2&gt;
  
  
  Prefixing
&lt;/h2&gt;

&lt;p&gt;It's a good idea to start the API routes with a prefix signalling that this path is indeed an API. It instantly warns developers that the end points are unlikely to return a human readable response out of the box... &lt;/p&gt;

&lt;p&gt;So... &lt;code&gt;/api&lt;/code&gt; all the way.&lt;/p&gt;

&lt;p&gt;Unless you've got a subdomain, like &lt;code&gt;https://api.mydomain.com&lt;/code&gt; where this becomes more redundant... &lt;/p&gt;

&lt;h2&gt;
  
  
   Versioning
&lt;/h2&gt;

&lt;p&gt;If you're designing a &lt;em&gt;greenfield&lt;/em&gt; API, that is, no existing legacy API to write over, or replace, then it's a good idea to start with the idea that your brand new API &lt;em&gt;might be replaced&lt;/em&gt; some day&lt;/p&gt;

&lt;p&gt;In order to do that, one approach is to 'version' or 'namespace' the API. In this way, clients consuming the API (front-ends, data-only clients) can easily configure themselves to work against any specified / working version of the API and know what to get...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Need to deprecate a method? New version&lt;/li&gt;
&lt;li&gt;Need to make a breaking change to shape of data response? New version&lt;/li&gt;
&lt;li&gt;Need to modify the parameters that an API accepts? New Version&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/api/v1&lt;/code&gt; or &lt;code&gt;/api/v2/&lt;/code&gt; and so on...&lt;/p&gt;

&lt;h2&gt;
  
  
  RESTful resources
&lt;/h2&gt;

&lt;p&gt;REST APIs (aka representational state transfer) APIs are of course not the ONLY way of defining an API, we've got SOAP/XML, RPC, and many many other protocols...&lt;/p&gt;

&lt;p&gt;REST is also more of a concept and protocol that an API should conform to, than a hard and fast set of rules, but they make a lot of sense and are very easy to reason about&lt;/p&gt;

&lt;h3&gt;
  
  
  HTTP methods
&lt;/h3&gt;

&lt;p&gt;The first thing to consider is to design our API in terms of the 5 most common HTTP methods: GET, POST, PUT, PATCH, DELETE&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GET for reading/viewing/listing&lt;/li&gt;
&lt;li&gt;POST for creating (*)&lt;/li&gt;
&lt;li&gt;PUT for creating /replacing (*)&lt;/li&gt;
&lt;li&gt;PATCH for updating&lt;/li&gt;
&lt;li&gt;DELETE well...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(* explained later)&lt;/p&gt;

&lt;p&gt;The important thing to note is a &lt;code&gt;GET&lt;/code&gt; request should invariably never have side effects -- that is it shouldn't change the state of a resource... talking of resources...&lt;/p&gt;

&lt;h3&gt;
  
  
  Designing for resources / entities
&lt;/h3&gt;

&lt;p&gt;The next big thing is that we're usually going to be designing the API against a bunch of entities that we've designed in our back-end... for example &lt;code&gt;Users&lt;/code&gt; or &lt;code&gt;Customers&lt;/code&gt; or &lt;code&gt;Orders&lt;/code&gt; etc.&lt;/p&gt;

&lt;p&gt;Some of these resources might be embedded in each other, and some might be stand-alone, but via convention we should be able to address this...&lt;/p&gt;

&lt;h4&gt;
  
  
   URL format
&lt;/h4&gt;

&lt;p&gt;A note about entity naming in URLS: Every programming language is different, they use &lt;code&gt;CapitalCase&lt;/code&gt;, &lt;code&gt;camelCase&lt;/code&gt;, &lt;code&gt;kebab-case&lt;/code&gt;, &lt;code&gt;snake_case&lt;/code&gt;, etc. A URL is &lt;em&gt;not&lt;/em&gt; a programming language, stick to &lt;code&gt;kebab-case&lt;/code&gt; - URLS are case insensitive and you enhance readability by exposing the idiosyncrasies of your back-end language to your user!&lt;/p&gt;

&lt;h4&gt;
  
  
   Fetching multiple resources:
&lt;/h4&gt;

&lt;p&gt;The entity should be &lt;em&gt;pluralised&lt;/em&gt; and be the first item in the path&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/v1/customers&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/v1/users&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/v1/orders&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sometimes these resources required pagination and in almost all cases, the &lt;code&gt;GET&lt;/code&gt; request should expect this to be done via &lt;strong&gt;query strings&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/v1/customers?page=1&amp;amp;page_size=20&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
   Fetching single resources:
&lt;/h4&gt;

&lt;p&gt;The same path as before, with a unique ID appended in the path:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/v1/customers/12&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/v1/users/1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/v1/orders/24&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's almost always preferred to use integer IDs over string IDs in a SQL-based or RDBM system. (Don't get tied u over this, though, it's beyond the scope of this article)&lt;/p&gt;

&lt;p&gt;You might want to allow (via parameters) restricting the information that comes back about a single entity... again, query strings (not a request body)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/v1/customers/1?fields=id,firstname,lastname&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
   Creating a resource:
&lt;/h4&gt;

&lt;p&gt;POST/PUT are the two choices here. If we're being strict with REST definitions, then POST is for creating without regard to &lt;em&gt;idempotency&lt;/em&gt; (idempotency is the idea that a repeat operation like create should only happen once even with repeated calls) and PUT should be used for &lt;em&gt;replacing&lt;/em&gt; or &lt;em&gt;updating&lt;/em&gt; a resource, or you're &lt;em&gt;creating&lt;/em&gt; with an expected ID or unique identifier.&lt;/p&gt;

&lt;p&gt;Obvioulsy parameters go in the BODY as &lt;code&gt;application/json&lt;/code&gt; or &lt;code&gt;application/url-form-encoded&lt;/code&gt; or whatever you require&lt;/p&gt;

&lt;p&gt;Either way, they should be name with the &lt;em&gt;pluralised&lt;/em&gt; endpoint:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;POST /api/v1/customers&lt;/code&gt; 

&lt;ul&gt;
&lt;li&gt;response: &lt;code&gt;201 { "id": 12, "name": ... }&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;PUT /api/v1/customers/1&lt;/code&gt; 

&lt;ul&gt;
&lt;li&gt;response: &lt;code&gt;200 { "id": 1, "name": ... }&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
   Updating a resource:
&lt;/h4&gt;

&lt;p&gt;Updating can be done with &lt;code&gt;PUT&lt;/code&gt; (see above) or &lt;code&gt;PATCH&lt;/code&gt;. &lt;em&gt;PATCH&lt;/em&gt; is usually reserved for &lt;em&gt;partial&lt;/em&gt; updates of a resource. &lt;code&gt;DELETE&lt;/code&gt; is well, for removing a resource&lt;/p&gt;

&lt;p&gt;Naming: same as above - use the pluralised endpoint + a unique identifier. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;PUT /api/v1/customers/1&lt;/code&gt; 

&lt;ul&gt;
&lt;li&gt;response: &lt;code&gt;200 { "id": 12, "name": ... }&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;PATCH /api/v1/customers/1&lt;/code&gt; 

&lt;ul&gt;
&lt;li&gt;response: &lt;code&gt;200 { "id": 1, "name": ... }&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;DELETE /api/v1/customers/1&lt;/code&gt; 

&lt;ul&gt;
&lt;li&gt;response: &lt;code&gt;200&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
   Nested resources:
&lt;/h4&gt;

&lt;p&gt;Ok, gets a bit tricky, but in general the same rules are just re-used going on down the tree!&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;Customer&lt;/code&gt; might have &lt;code&gt;Orders&lt;/code&gt; or &lt;code&gt;Bussiness Units&lt;/code&gt; or even a single one-to-one attribute like &lt;code&gt;Address&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/v1/customers/1/orders&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/v1/customers/1/orders/1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST /api/v1/customers/1/orders&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/v1/customers/1/business-units&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/v1/customers/1/address&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
   Authentication
&lt;/h4&gt;

&lt;p&gt;Don't put your API keys in query strings, folks! It's just bad practice. An authentication request is full of side effects. &lt;code&gt;POST&lt;/code&gt; it! And put it in the request body, these things can show up in browser histories and server logs and are a big no no!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;POST /api/v1/auth/login&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;All in all, there's generally very little reason to name a resource in a URL in the singular unless it's an embedded entity as mentioned above (&lt;code&gt;Address&lt;/code&gt;), or when the resource cant really be pluralised (hello &lt;code&gt;Advice&lt;/code&gt; or &lt;code&gt;Evidence&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;Otherwise, it's a spelling mistake, and you should be ashamed of yourself. (Only joking...)&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>computerscience</category>
      <category>programming</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Merge two arrays as a set</title>
      <dc:creator>🅖🅡🅔🅖🅞🅡🅨 🅞🅡🅣🅞🅝</dc:creator>
      <pubDate>Tue, 08 Dec 2020 08:51:09 +0000</pubDate>
      <link>https://dev.to/ortonomy/merge-two-arrays-as-a-set-1afe</link>
      <guid>https://dev.to/ortonomy/merge-two-arrays-as-a-set-1afe</guid>
      <description>&lt;p&gt;So, I love the idea of using mathematical set theory in my programming. Specifically, I really want to make use of Javascript's recent addition &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set" rel="noopener noreferrer"&gt;&lt;code&gt;Set&lt;/code&gt;&lt;/a&gt; for the convenience of guaranteeing non-duplicate values and convenience APIs for iterating: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const s = new Set([
  1,
  2,
  3
])

s.add(3) // 1, 2, 3
s.has(3) // true
s.forEach(...) // etc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Problem is, it only works with primitives: e.g. Number, String and not arrays or objects due to (referential) equality limitations in JS (e.g. &lt;code&gt;{ a: 1 } !== { a: 1 }&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Which is kinda annoying.&lt;/p&gt;

&lt;p&gt;So I wrote functional utility to add an arbitrary array of objects to an existing array, using a specific prop. My thoughts are: is this the most efficient way to do it? What better ways are there to do this?&lt;/p&gt;

&lt;p&gt;This is &lt;code&gt;O(n^2)&lt;/code&gt; which isn't exactly desirable?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const mergeArraysAsSet = (ex, merge, compareProp = 'id') =&amp;gt; {
  return ex.concat(
    merge.reduce((mergeArray, next) =&amp;gt; {
      if (!ex.find((x) =&amp;gt; x[compareProp] === next[compareProp])) {
        mergeArray.push(next)
      }
      return mergeArray
    }, [])
  )
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>javascript</category>
      <category>algorithms</category>
      <category>functional</category>
    </item>
    <item>
      <title>Where to go for icons -redux</title>
      <dc:creator>🅖🅡🅔🅖🅞🅡🅨 🅞🅡🅣🅞🅝</dc:creator>
      <pubDate>Mon, 30 Nov 2020 13:51:26 +0000</pubDate>
      <link>https://dev.to/ortonomy/where-to-go-for-icons-redux-16fa</link>
      <guid>https://dev.to/ortonomy/where-to-go-for-icons-redux-16fa</guid>
      <description>&lt;p&gt;Inspired by this post （&lt;a href="https://dev.to/jolouie7/my-favorite-place-to-look-for-icons-5dh"&gt;https://dev.to/jolouie7/my-favorite-place-to-look-for-icons-5dh&lt;/a&gt;) I felt you should all really be informed about The Noun Project. If you don’t already - TNP is a repository of thousands of custom, hand crafted icons in SVG/PNG format that can completely transform a design. &lt;/p&gt;

&lt;p&gt;If you don’t already know it, check out it out. It’s better than anything you’ve ever used:  &lt;a href="https://www.thenounproject.com/" rel="noopener noreferrer"&gt;https://www.thenounproject.com/&lt;/a&gt; &lt;/p&gt;

</description>
      <category>ux</category>
      <category>design</category>
      <category>top7</category>
    </item>
    <item>
      <title>Canvas Paintball Gun</title>
      <dc:creator>🅖🅡🅔🅖🅞🅡🅨 🅞🅡🅣🅞🅝</dc:creator>
      <pubDate>Thu, 17 Sep 2020 08:39:48 +0000</pubDate>
      <link>https://dev.to/ortonomy/canvas-paintball-gun-4o7m</link>
      <guid>https://dev.to/ortonomy/canvas-paintball-gun-4o7m</guid>
      <description>&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/ortonomy/embed/vYGjoGx?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I had fun making this. It's a prototype for the new service I'm working on. Enjoy.&lt;/p&gt;

</description>
      <category>codepen</category>
    </item>
    <item>
      <title>How not to get people to use your library</title>
      <dc:creator>🅖🅡🅔🅖🅞🅡🅨 🅞🅡🅣🅞🅝</dc:creator>
      <pubDate>Wed, 05 Aug 2020 14:26:16 +0000</pubDate>
      <link>https://dev.to/ortonomy/how-not-to-get-people-to-use-your-npm-library-16cm</link>
      <guid>https://dev.to/ortonomy/how-not-to-get-people-to-use-your-npm-library-16cm</guid>
      <description>&lt;p&gt;&lt;strong&gt;PREFACE&lt;/strong&gt;: I want to point out that in writing this article by saying, I'm not trying to be vindictive or to spite, but to draw attention to how not to behave as an open source developer.&lt;/p&gt;

&lt;h1&gt;
  
  
  The only real option
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Recently&lt;/strong&gt;, I've been working on an app in React Native, in which I needed to write a share extension in iOS and Android. Like any good developer, I'm aware that I'm standing on the shoulders of giants, and in all likelihood, someone had the same problem and solved it, well before I came along. So, after an afternoon Googling for a solution, it became apparent the only real working solution for React Native share extensions was a library (in a case of extreme nominative determinism) aptly called &lt;a href="https://github.com/alinz/react-native-share-extension" rel="noopener noreferrer"&gt;&lt;code&gt;react-native-share-extension&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
   Unloved, broken, despairing
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;The only problem&lt;/strong&gt; is that this lib seems to have been abandoned. The maintainer has long since stopped maintaining the package and it's accumulating issues at a fair lick, with reports of it breaking in the latest version (&lt;code&gt;0.6.2&lt;/code&gt; at time of writing) of React Native.&lt;/p&gt;

&lt;p&gt;At first as you look through the issues, you see lots of people replying, reporting similar experiences, trying to help, offering solutions, or in some cases, recommending other libraries. Like this helpful comment:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0cbq1ac6ejh7vq0qs1ik.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0cbq1ac6ejh7vq0qs1ik.jpg" alt="Code smell" width="800" height="114"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Initially, I thought this might be useful: 'this is just being helpful', and I checked it the repo, but soon I realised his solution doesn't really do what I need it to. So I'm looking at other issues, trying to gauge if this is really the lib I want to use. And it's then that I started seeing a worrying pattern...&lt;/p&gt;

&lt;h1&gt;
  
  
  So spammy I could make a sandwich
&lt;/h1&gt;

&lt;p&gt;It becomes apparent spanning back over the course of at least a year, this poor fellow, desperate to drive traffic to his React Native library, has taken the time to spam 10, 20, 30 issues, ostensibly promoting a solution to their woes, where really he's just trying to put forward his own solution: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.tohere"&gt;https://github.com/alinz/react-native-share-extension/issues/206#issuecomment-636508733&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.tohere"&gt;https://github.com/alinz/react-native-share-extension/issues/205#issuecomment-636508771&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.tohere"&gt;https://github.com/alinz/react-native-share-extension/issues/204#issuecomment-636508797&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.tohere"&gt;https://github.com/alinz/react-native-share-extension/issues/203#issuecomment-636508834&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.tohere"&gt;https://github.com/alinz/react-native-share-extension/issues/202#issuecomment-636508860&lt;/a&gt; to name but a few.&lt;/p&gt;

&lt;h1&gt;
  
  
  Pet peeves
&lt;/h1&gt;

&lt;p&gt;Things on a list that annoy me: hypocrisy, deceitfulness, and bare-faced and brazen manipulation -- especially in a time of fake news. I don't have time, (and others shouldn't waste their time) on the lazy and feckless. &lt;/p&gt;

&lt;p&gt;So, I decided to take this guy to task by opening an issue on his lib's Github repo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvrwhw5f1e0v4wx7nur26.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvrwhw5f1e0v4wx7nur26.jpg" alt="To task" width="800" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I wasn't going to sit by and allow this guy to mislead and misrepresent. It's just not how things should be done.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Audacity!
&lt;/h1&gt;

&lt;p&gt;So, after some two weeks have passed, this guy hasn't responded to my issue, until today (2020-08-05) with what can only be described as pure chutzpah! Not only does he close the issue, he:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;deletes the content so no one can see it&lt;/li&gt;
&lt;li&gt;(and because the issue is mentioned on the source repo) he changes the title so it looks like I've thanked him for it!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I guess I should give him credit for his willingness to commit to the charade, but damn!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxnjmkgt93vt94rdhmbfy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxnjmkgt93vt94rdhmbfy.jpg" alt="Alt Text" width="800" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion: Dont' be a dick
&lt;/h1&gt;

&lt;p&gt;The point I'm trying to make here is that this is so weird. It's great that you want to create something open source and give it away for the world to enjoy -- this is a selfless act that is repeated every day and has given us some of history's greatest software (Linux anyone?). &lt;/p&gt;

&lt;p&gt;But to seemingly be doing this to further you own interests, or to gain exposure, or for some perceived gains in professional status, and to self promote in such an opaque and clandestine way, spamming someone else's repo to take users, it's not really the sign of a professional who you'd want to work with. It makes me, and should make you, very wary about using their library.&lt;/p&gt;

&lt;p&gt;You can see the offending package at &lt;a href="https://dev.tohere"&gt;https://github.com/ajith-ab/react-native-receive-sharing-intent/issues/27&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>reactnative</category>
      <category>javascript</category>
      <category>spam</category>
    </item>
  </channel>
</rss>
