<?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: Tom Byrer</title>
    <description>The latest articles on DEV Community by Tom Byrer (@tombyrer).</description>
    <link>https://dev.to/tombyrer</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%2F19760%2F2dccd413-6c63-4228-948e-78b672a1f42e.jpeg</url>
      <title>DEV Community: Tom Byrer</title>
      <link>https://dev.to/tombyrer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tombyrer"/>
    <language>en</language>
    <item>
      <title>Some platforms to post your animations on the web</title>
      <dc:creator>Tom Byrer</dc:creator>
      <pubDate>Fri, 10 Jan 2025 14:35:42 +0000</pubDate>
      <link>https://dev.to/tombyrer/some-platforms-to-get-animations-on-the-web-2ihh</link>
      <guid>https://dev.to/tombyrer/some-platforms-to-get-animations-on-the-web-2ihh</guid>
      <description>&lt;p&gt;This is a simple linkfarm I was going to email a new friend about some tools &amp;amp; platforms she can get animations posted on the web to showcase, &amp;amp; maybe sell, but I figured more than 1 person would be interested.  Also &lt;a href="https://github.com/tomByrer/awesome-web-animation-players/tree/main?tab=readme-ov-file#awesome-web-animation-players" rel="noopener noreferrer"&gt;posted in Github&lt;/a&gt;, so PR there or comment here if you wish!&lt;/p&gt;

&lt;p&gt;In no particular order:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://rive.app/" rel="noopener noreferrer"&gt;Rive&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Interactive &amp;amp; timeline based animations that can be used anywhere: web, video game engines like Unity/Unreal, low-level players for C#, C++, React, Flutter.... Has become mature over the past few years.  Might be able to handle a full page webapp UX, or longer animations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adobe AfterEffects -&amp;gt; &lt;a href="https://lottiefiles.com/blog/working-with-lottie-animations/bodymovin-or-lottiefiles-for-after-effects" rel="noopener noreferrer"&gt;LottieFiles&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Exports the vector files &amp;amp; animations as JSON to be used with players like &lt;a href="https://airbnb.io/lottie/#/" rel="noopener noreferrer"&gt;AirBnB's open source lotie player&lt;/a&gt;.  Seems the target use case is shorter &amp;amp; smaller flourishes.&lt;br&gt;
The previous exporter was Bodymovin, which currently (2025-01) seems to not work in the current AfterEffects.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.blend4web.com/" rel="noopener noreferrer"&gt;Blend4Web&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Free &amp;amp; commercial licenses to showcase &lt;a href="https://www.blender.org/" rel="noopener noreferrer"&gt;Blender&lt;/a&gt; models.  Seems to allow some interaction &amp;amp; timeline animations, but hard to find good examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://marmoset.co/toolbag/viewer/" rel="noopener noreferrer"&gt;Marmoset&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Looks to be a good 3d asset viewer, but seems to have a pricetag, though that pricetag includes the powerful 3d editor.  Web searches can bring up other similar online players &amp;amp; &lt;a href="https://github.com/kovacsv/Online3DViewer" rel="noopener noreferrer"&gt;3d Viewers&lt;/a&gt;; some are more niche than others.&lt;/p&gt;

&lt;h3&gt;
  
  
  HTML/CSS/JavaScript/SVG
&lt;/h3&gt;

&lt;p&gt;You can &lt;a href="https://github.com/sergey-pimenov/awesome-web-animation" rel="noopener noreferrer"&gt;use web technologies&lt;/a&gt; directly themselves to create very rich animations for the web.  Sometimes only &lt;a href="https://codepen.io/collection/nrBROn?cursor=eyJwYWdlIjoyfQ==" rel="noopener noreferrer"&gt;CSS alone&lt;/a&gt; is all you &lt;a href="https://github.com/Dev-Jeromebaek/awesome-web-styling" rel="noopener noreferrer"&gt;need&lt;/a&gt;.&lt;br&gt;
Many &lt;a href="https://codepen.io/search/pens?q=svg+animations" rel="noopener noreferrer"&gt;examples&lt;/a&gt; &lt;a href="https://youtu.be/u8YujK0jTSM?list=PLakykuPxo3cipvG2kDnDsictsxc0OdUMa" rel="noopener noreferrer"&gt;online&lt;/a&gt;.  Sometimes a library like &lt;a href="https://motion.dev/" rel="noopener noreferrer"&gt;Motion&lt;/a&gt; or &lt;a href="https://gsap.com/" rel="noopener noreferrer"&gt;GASP&lt;/a&gt; can help speed web animations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Video
&lt;/h3&gt;

&lt;p&gt;Do a screen capture using your favorite app &amp;amp; post online.  You can have the browser auto-play the video only if the sound is off.  If you need to compose &amp;amp; don't mind some programming, &lt;a href="https://www.remotion.dev/" rel="noopener noreferrer"&gt;Remotion&lt;/a&gt; can turn web animations into MP4 videos, or use their player to play its ReactJS based files directly in the web browser.&lt;/p&gt;

&lt;h3&gt;
  
  
  GIF
&lt;/h3&gt;

&lt;p&gt;If the animation clip is short and small enough, why not go old-school?&lt;/p&gt;

</description>
      <category>animation</category>
      <category>css</category>
      <category>linkfarm</category>
    </item>
    <item>
      <title>Installing Chrome extension from raw source code</title>
      <dc:creator>Tom Byrer</dc:creator>
      <pubDate>Sat, 02 Sep 2023 15:39:19 +0000</pubDate>
      <link>https://dev.to/tombyrer/installing-chrome-extension-from-raw-source-code-2m4</link>
      <guid>https://dev.to/tombyrer/installing-chrome-extension-from-raw-source-code-2m4</guid>
      <description>&lt;p&gt;Ever wanted to write your own web browser extension?  Want to make the next "AI web tool", automation for co-workers, fork an existing project?  Found an extension that is not available for your browser store you want to try out?&lt;/p&gt;

&lt;p&gt;You can directly install extensions from a local folder.  Helpful before publishing to the store is the best way to get a faster feedback loop.  You might end up with higher ratings the more polished your extension is when released.&lt;/p&gt;

&lt;h4&gt;
  
  
  Note on browser compatibility
&lt;/h4&gt;

&lt;p&gt;While these screenshots use Google Chrome, they will also work on all 'Chromium' based web browsers, like &lt;a href="https://brave.com/" rel="noopener noreferrer"&gt;Brave&lt;/a&gt;, &lt;a href="https://vivaldi.com/" rel="noopener noreferrer"&gt;Vivaldi&lt;/a&gt;, &lt;a href="https://github.com/ungoogled-software/ungoogled-chromium" rel="noopener noreferrer"&gt;ungoogled-chromium&lt;/a&gt;, etc.  Window's Edge is also compatible, though some the button locations are changed.&lt;/p&gt;

&lt;p&gt;Firefox &amp;amp; forks are out of scope of this article.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Have the File Folder Ready
&lt;/h2&gt;

&lt;p&gt;If you are developing on the same machine, note the folder of your local repo &amp;amp; move to Step 1.&lt;/p&gt;

&lt;p&gt;If you want to test another repo on GitHub:&lt;br&gt;
(We'll use my  project as an example.)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the repo webpage, eg: &lt;a href="https://github.com/smart-move-media/adjust-video-speed" rel="noopener noreferrer"&gt;https://github.com/smart-move-media/adjust-video-speed&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Download the project folder

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;git clone&lt;/code&gt; the repo&lt;/li&gt;
&lt;li&gt;or download the &lt;a href="https://github.com/smart-move-media/adjust-video-speed/archive/refs/heads/master.zip" rel="noopener noreferrer"&gt;zip&lt;/a&gt;, then unpack the archive; see image below:&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&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%2F7feoaibg1e0891mugodp.jpg" 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%2F7feoaibg1e0891mugodp.jpg" alt="download zip from GitHub"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: "Load Unpacked" Extension Folder
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the Extensions browser page

&lt;ul&gt;
&lt;li&gt;find link in menu, or open the webpage &lt;code&gt;chrome://extensions&lt;/code&gt; or &lt;code&gt;brave://extensions&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Turn on "&lt;strong&gt;Developer Mode&lt;/strong&gt;" in upper-right&lt;/li&gt;
&lt;li&gt;Click on [ &lt;strong&gt;Load Unpacked&lt;/strong&gt; ] button (see screenshot)&lt;/li&gt;
&lt;li&gt;Use the file picker to open the project folder&lt;/li&gt;
&lt;/ol&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%2Fml2hmlh0sratxwpxas8c.jpg" 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%2Fml2hmlh0sratxwpxas8c.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F746mbiwvfpsfpezr64sx.jpg" 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%2F746mbiwvfpsfpezr64sx.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now the new extension should be listed like so (using my example for &lt;em&gt;Adjust Video Speed&lt;/em&gt;):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsqlcmzuffe5mv4j9f9s6.jpg" 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%2Fsqlcmzuffe5mv4j9f9s6.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Test Loaded Extension
&lt;/h2&gt;

&lt;p&gt;Let's look for if what you just loaded is working.  The README or other documentation should have screenshots on what the extension looks like.&lt;/p&gt;

&lt;p&gt;In my README, I give a &lt;a href="https://youtu.be/DfJrL4LEXz0" rel="noopener noreferrer"&gt;YouTube link&lt;/a&gt; and screenshot example of where the speed indicator should be (in upper-left corner):&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fsmart-move-media%2Fadjust-video-speed%2Fmaster%2Fimg%2F0-initalizeed-location.jpg" 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%2Fraw.githubusercontent.com%2Fsmart-move-media%2Fadjust-video-speed%2Fmaster%2Fimg%2F0-initalizeed-location.jpg" alt="Adjust Video Speed UI in upper-left corner"&gt;&lt;/a&gt;&lt;br&gt;
Also I give links to other video hosting platforms like &lt;a href="https://rumble.com/v2bmh7d-oatmeal-cake-and-brown-sugar-glaze-old-fashioned-goodness-heirloom-recipe-t.html" rel="noopener noreferrer"&gt;rumble&lt;/a&gt;, &lt;a href="https://odysee.com/@fireship/cpu-vs-gpu-vs-tpu-vs-dpu-vs-qpu" rel="noopener noreferrer"&gt;odysee&lt;/a&gt; for further testing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Advanced: Open Extensions Options
&lt;/h2&gt;

&lt;p&gt;Often extensions will have it's own UI to open their options page (usually via toolbar icon menu).  But almost all can be opened via the browser's [ &lt;strong&gt;Details&lt;/strong&gt; ] button:&lt;br&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%2Fa4guz4eva69i73w7ou0p.jpg" 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%2Fa4guz4eva69i73w7ou0p.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then you have to scroll down &amp;amp; click on the [ &lt;strong&gt;Extensions Options&lt;/strong&gt; ] button to open the UI:&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%2Frosb0q2af0eyiluhxl73.jpg" 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%2Frosb0q2af0eyiluhxl73.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Conclusion:&lt;/p&gt;

&lt;p&gt;So hopefully I have unlocked the mystery of installing a web browser extension from a local folder for you!  Add a comment for your new extension for others to try if you're brave enough!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>browser</category>
    </item>
    <item>
      <title>GitHub's Copilot; Can the original author please stand up?</title>
      <dc:creator>Tom Byrer</dc:creator>
      <pubDate>Sun, 04 Jul 2021 16:21:14 +0000</pubDate>
      <link>https://dev.to/tombyrer/github-s-copilot-can-the-original-author-please-stand-up-1jbi</link>
      <guid>https://dev.to/tombyrer/github-s-copilot-can-the-original-author-please-stand-up-1jbi</guid>
      <description>&lt;h2&gt;
  
  
  If something is free, you’re the product
&lt;/h2&gt;

&lt;p&gt;~ Richard Serra, 1973&lt;/p&gt;

&lt;p&gt;This famous line was in regards to the 'free' broadcast TeleVision programs that most everyone spent hours in front of per week, if not hours per day.  (People watched news &amp;amp; entertainment on free broadcast stations before the internet and cable.)  In USA, almost all programming was supported by advertising.  Early ads were simple, but as more psychological research was done those ads became more and more effective in influencing public perceptions.  Entire genres of TV were catered to specific groups.  Early 'soap operas' that were shown mid-day targeted stay-at-home mothers were &amp;amp; are full of ads for household cleaning products.  Saturday morning cartoons were full of ads to get children to get their parents to buy sugary cereals and the latest toys.  In fact, some cartoons were blatantly 30 minute ads about toys (GI Joe, Transformers, etc).&lt;/p&gt;

&lt;p&gt;Today, TV has has become more targeted thanks to cable and satellite offering 100s of different channels for every market.  Channels just for sports fans, others just for women, children, SiFi fans, etc.  You can notice how each channel runs the same type of ads constantly, eg news channels have many ads related medicine, since those watchers tend to be older folks concerned about their health.&lt;/p&gt;

&lt;h2&gt;
  
  
  Niche Marketing Techniques
&lt;/h2&gt;

&lt;p&gt;I like to check out newsletters for web developers (since I'm a webdev myself) to check out the latest articles, videos, and software related to the platforms and programming languages I'm interested in.  Most of the newsletters I read have ads for products, services, and job offers I sometimes are interested in.  So it is a win-win-win; advertisers are curated by the newsletter author to deliver to a niche market content many people want to read both the free and paid content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Freemium: Niche Marketing for Web Services
&lt;/h2&gt;

&lt;p&gt;There is another 'advertising' model for many of the commercial services that we developers use; the 'free-tier' or 'freemium'.  This model opens a limited service available to any &amp;amp; all with an email address, in hopes that you will buy the paid tiers later.  This helps the users to test out products by spending only time.  It also helps the service provider test out their platform, gets contact info for latter follow-ups, raise awareness, and increase community size.  More on this later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Sharing History
&lt;/h2&gt;

&lt;p&gt;There were free code sharing platforms long before GitHub arrived.  In the pre-internet days, programmers would use dial-up modems to connect to a BBS where you could download both programs an source code.  There was 'sneaker-net', where people would copy and swap disks and tapes full of code.  Early internet opened the door for FTP sites (often hosted by universities) to host archives of source code.  Forums, IRC, and Usenet provided more 'social' avenues for people to share code, tips, and suggested revisions.&lt;/p&gt;

&lt;p&gt;Sourceforge one of the larger portals to allow programmers both share their source code, compiled programs, and gather feedback to add more features and fix bugs.  Their user-base grew as more larger projects (like Linux distros, audio, video and code editors) made Sourceforge their home.  They seem to be supported by ads, but I still wonder how deep in the red they run.  I still visit there on occasion, mostly for &lt;a href="https://nikkhokkho.sourceforge.io/static.php?page=FileOptimizer"&gt;FileOptimizer&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Hits the Jackpot
&lt;/h2&gt;

&lt;p&gt;GitHub had great timing; they took a semi-new but powerful revision tracking system (&lt;a href="https://git-scm.com/"&gt;git&lt;/a&gt;) add a feedback forum (issues), hosting, and mini social profile (to help personalize) wrapped together by a back-end language that was quick to develop on (Ruby).&lt;/p&gt;

&lt;p&gt;IMHO, their clean interface and generous ad-free freemium level attracted many many programmers and entire organizations to host their code on GitHub.  They made &lt;code&gt;git&lt;/code&gt; fun to use and easy to hack in quick changes.  Their search and categories allowed many people to quickly find code to solve problems they had, or even provide new ideas.  GitHub became &lt;em&gt;the primary portal for code hosting and sharing&lt;/em&gt;, enabling many programmers and companies to flourish.&lt;/p&gt;

&lt;p&gt;Though not thought of as a 'social media site' in the likes of Facebook, Twitter, etc, it is a place for many cultures to intermingle.  Very common to people from different countries, religions, beliefs, etc to gather and create solutions together.&lt;/p&gt;

&lt;p&gt;GitHub does have a paid tier that many pay for, but I doubt that alone was worth the &lt;a href="https://cloudwars.co/microsoft/microsoft-killer-acquisition-github-soars-70-percent/"&gt;$7.5billon MicroSoft paid for GitHub&lt;/a&gt;.  It would be the user-base and all the code there that made GH worth that much.&lt;/p&gt;

&lt;h2&gt;
  
  
  But Free Code Is Not (Usually) Free
&lt;/h2&gt;

&lt;p&gt;Most (but not all) code on GitHub has some level of copy protection.  &lt;a href="https://tldrlegal.com/license/mit-license"&gt;MIT&lt;/a&gt;, &lt;a href="https://creativecommons.org/licenses/"&gt;creative commons&lt;/a&gt;, &lt;a href="https://fossa.com/blog/open-source-software-licenses-101-gpl-v3/"&gt;GPL&lt;/a&gt; all have 'strings attached' to their license.  Usually the requirement is that the copyright notice (&amp;amp; authors' name) is kept with copies of the code, but may include greater restrictions for commercial use... And these restrictions will carry over to derived programs.  So if you use code that includes another library that has a dependency of a 'no-commercial-use' license and you want to use said code in your job or side-hustle, you may find yourself in a legal situation.&lt;/p&gt;

&lt;p&gt;Trust me, lawyers and company heads do not like legal ambiguity.  I've lost several job opportunities as soon as I mention OSS.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Gives Away Your Code Without Permission
&lt;/h2&gt;

&lt;p&gt;I started to see sites and tools that scraped GitHub repos and presented that copyrighted code as uncopyrighted code without attribution, hmmm about a year ago (?) as top search results.  But I've seen scrapper sites directly quote eintire StackOverflow answers long before that, so this wrong is nothing new.&lt;/p&gt;

&lt;p&gt;But what is new, is a major corporation (MicroSoft/GitHub) doing the same thing.  They call it 'AI trained' but like those 'find the traffic light' Captcha tests, humans are training the AI.  &amp;amp; the results are sometimes direct quotes of code, which is unauthorized.  Is some the code shown from fully 'all rights reserved' private codebases hosted on GitHub?  One PM I received from a major contributor to npm (JavaScript libraries) is that others are 'seeing your code signature everywhere'.&lt;/p&gt;

&lt;p&gt;(Another example)&lt;br&gt;
&lt;/p&gt;
&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--9qIr_CzN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1396185127189762050/Ea1wl-AM_normal.jpg" alt="Kabir Nagrecha profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Kabir Nagrecha
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @kabirnagrecha
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Forgotten secrets of AGI revealed by CoPilot…it was the LSTM all along! &lt;a href="https://t.co/ImnfzQSiYv"&gt;twitter.com/awjuliani/stat…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      16:23 PM - 02 Jul 2021
    &lt;/div&gt;

      &lt;div class="ltag__twitter-tweet__quote"&gt;
        &lt;div class="ltag__twitter-tweet__quote__header"&gt;
          &lt;span class="ltag__twitter-tweet__quote__header__name"&gt;
            Arthur Juliani
          &lt;/span&gt;
          @awjuliani
        &lt;/div&gt;
        Looks like according to co-pilot, LSTMs are all we need after all... (Must be those Schmidhuber papers in the GPT training dataset) https://t.co/HiFmdN8XHx
      &lt;/div&gt;

    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1410997530897309702" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1410997530897309702" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1410997530897309702" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;I'm not the only one concerned:&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vzLgyndd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1282020927/magatar_normal.jpg" alt="Stephen Diehl profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Stephen Diehl
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @smdiehl
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      So let's say I train a code synthesis model on the corpus of a competitor's codebase, or one that happens to include it, is this just a new form of intellectual property theft? 🤔
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      08:30 AM - 30 Jun 2021
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1410153867820605442" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1410153867820605442" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1410153867820605442" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--j59rQy5l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1409402196387631107/WCqkb7xB_normal.jpg" alt="Tomislav Kraljic profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Tomislav Kraljic
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @kraljic_t
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      The majority of tech twitter is not speaking out against the unethical and unauthorized use of licensed source code of GitHub's Copilot Program because most are working for Microsoft or other FAANG companies that steal and profit of our your data. &lt;br&gt;&lt;br&gt;I said what I said.
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      01:55 AM - 04 Jul 2021
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1411503865300725761" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1411503865300725761" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1411503865300725761" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--JBtRYP96--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/2808005971/b81b99287e78b1cd6cbd0e5cbfb3295c_normal.png" alt="Kelly Sommers profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Kelly Sommers
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @kellabyte
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      I heard GitHub is training their co-pilot with other peoples copyrighted source code thus allowing copyrighted source code to be injected into other peoples products. &lt;br&gt;&lt;br&gt;There was a time I felt GitHub was on the ethical side of things but that’s starting to fade.
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      22:19 PM - 03 Jul 2021
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1411449622288076801" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1411449622288076801" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1411449622288076801" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--FpyUaZQS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1540712763/jonschlinkert_normal.jpg" alt="Jon Schlinkert - Open Source developer profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Jon Schlinkert - Open Source developer
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="mentioned-user" href="https://dev.to/jonschlinkert"&gt;@jonschlinkert&lt;/a&gt;
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      I'm honestly surprised at the backlash I'm seeing to &lt;a href="https://twitter.com/github"&gt;@github&lt;/a&gt;'s copilot. People, including myself, are complaining that it infringes on their work. &lt;br&gt;&lt;br&gt;What surprises me is that developers didn't seem to care about stealing everyone else's code without attribution until now.
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      03:05 AM - 04 Jul 2021
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1411521416898482180" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1411521416898482180" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1411521416898482180" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;Hopefully Copilot is not giving away passwords... but maybe they are?  Or atleast encryption methods?&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uEVcsAU7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/E5L2nzPXEAAQOiA.jpg" alt="unknown tweet media content"&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--Flfi7bpp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1395741415334940674/W_Ry2BIq_normal.png" alt="Xavier Noria profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Xavier Noria
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="mentioned-user" href="https://dev.to/fxn"&gt;@fxn&lt;/a&gt;
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Regarding Copilot and suggested secrets. 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      04:50 AM - 01 Jul 2021
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1410460805611634696" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1410460805611634696" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1410460805611634696" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  I'm Not a Lawyer
&lt;/h2&gt;

&lt;p&gt;There is legal precedent for music that taking even a &lt;a href="https://www.lexology.com/library/detail.aspx?g=822996f8-5476-49ef-bd3e-e05369631c3e"&gt;few bars of music is a copyright violation&lt;/a&gt;.  We should keep this in mind...&lt;/p&gt;

&lt;h2&gt;
  
  
  Aside: Programmers are Almost Forced to 'Borrow'
&lt;/h2&gt;

&lt;p&gt;Sad fact is; those using code-grabbing tools like this may end up being more productive, leaving those who don't use said tools behind....&lt;/p&gt;

&lt;h2&gt;
  
  
  Alternatives to GitHub
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://about.gitlab.com/"&gt;GitLab &lt;/a&gt; is seen an influx lately, since their git-platform is OSS that you can self-host.  They do have a solid commercial product that Goldman Sachs, ticketmaster &amp;amp; others use.&lt;/p&gt;

&lt;p&gt;There are other GitHub clones written in &lt;a href="https://gitea.io/en-us/"&gt;Go (Gitea)&lt;/a&gt; and &lt;a href="https://github.com/vlang/gitly"&gt;V (Gitly)&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Or Do Not Share at All
&lt;/h2&gt;

&lt;p&gt;If your code is on the internet, someone can take it.  People are willing to steal; I know someone who had his hardware reverse-engineered and 100s of clones made, putting him out of business.&lt;/p&gt;

&lt;p&gt;Only real solution is not to share your code at all.  Which makes me a bit sad, but in a world where doctors can't share medical advice on FaceBook anymore, and &lt;a href="https://twitter.com/RWMaloneMD/status/1411662093468803074"&gt;scientists get their conversations censored&lt;/a&gt;, this is the world we live in.  :(&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubcopilot</category>
      <category>hosting</category>
      <category>freedom</category>
    </item>
    <item>
      <title>Testing JS End-to-End Testers: CodeceptJS + Playwright vs CypressIO</title>
      <dc:creator>Tom Byrer</dc:creator>
      <pubDate>Fri, 13 Mar 2020 18:50:50 +0000</pubDate>
      <link>https://dev.to/tombyrer/testing-testers-codeceptjs-playwright-vs-cypressio-28pc</link>
      <guid>https://dev.to/tombyrer/testing-testers-codeceptjs-playwright-vs-cypressio-28pc</guid>
      <description>

&lt;h2&gt;
  
  
  Why Test?
&lt;/h2&gt;

&lt;p&gt;If you are just writing short, quick, throwaway code, you don't need a fancy testing system.  Make a quick demo or 3, put the expected output in your README, &amp;amp; move on.  You're just going to torture your future self &amp;amp; others in having to download a bunch of testing software, and contribute to global warming for no good reason.&lt;/p&gt;

&lt;p&gt;But if you want to work on your own code later, have others to help out, or want to sell or support your hard work, you need more structured testing.  The investment will pay off in the long run.  There are reasons why it is called "Quality Assurance".&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing Types Terminology
&lt;/h2&gt;

&lt;p&gt;There are &lt;a href="https://www.pcloudy.com/functional-testing-vs-non-functional-testing/"&gt;many&lt;/a&gt; &lt;a href="https://www.testingxperts.com/blog/types-of-software-testing"&gt;many&lt;/a&gt; types of testing!  The first stages of testing is grouped under a "functional" where you verify the code's output.  (Though there might be UX testing on mockps before the programmer starts.)&lt;/p&gt;

&lt;h3&gt;
  
  
  Basic Functional Testing Levels
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dzone.com/articles/unit-testing-guidelines-what-to-test-and-what-not"&gt;Unit&lt;/a&gt; (atomic low level)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.techrepublic.com/article/integration-testing-will-show-you-how-well-your-modules-get-along/"&gt;Integration&lt;/a&gt; (mid level checking process flow, &lt;a href="https://kentcdodds.com/blog/write-tests"&gt;most important&lt;/a&gt; to some)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.ranorex.com/blog/10-best-practices-test-automation-9-plan-e2e-testing/"&gt;End-to-End&lt;/a&gt; (higher level, on deployed code or developer sandbox)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There might be slight overlaps between these levels.  But there is greater cross-over with other types of testing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other QA Testing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://datasift.github.io/storyplayer/v2/learn/test-your-code/why-component-testing.html"&gt;Component&lt;/a&gt; (mid level, isolated using dummy data to check functionality)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.seguetech.com/regression-testing-quality-assurance/"&gt;Regression&lt;/a&gt; (see if new code degrades rest of app: mid to E2E levels)&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://tryqa.com/what-is-sanity-testing/"&gt;Sanity&lt;/a&gt; (focused regression subset, integration-level crossover)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.edureka.co/blog/what-is-smoke-testing/"&gt;Smoke&lt;/a&gt; (quickly ensure basic functions are working before builds)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dotcom-tools.com/load-testing-performance-tools.aspx"&gt;Load&lt;/a&gt; &amp;amp;/or Stress (can your service handle a title wave of customers?)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.cobalt.io/a-managers-guide-to-selecting-the-best-testing-approach-for-your-application-security-needs-2a31437bcfd8"&gt;Security/Vulnerablity&lt;/a&gt; (sometimes overlooked until too late...)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.testim.io/blog/exploratory-testing/"&gt;Session+Based+Exploratory&lt;/a&gt; (~1 hour focused on a single goal)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.atlassian.com/continuous-delivery/software-testing/exploratory-testing"&gt;Exploratory&lt;/a&gt; (1-2 hours of manual digging for non-obvious errors)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.usability.gov/how-to-and-tools/methods/usability-testing.html"&gt;Usablity&lt;/a&gt; (UX works for everyone, including less-abled)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.guru99.com/system-testing.html"&gt;System&lt;/a&gt; validating everything above at a high level&lt;/li&gt;
&lt;li&gt;Beta/&lt;a href="https://usersnap.com/blog/user-acceptance-testing-right/"&gt;User Acceptance&lt;/a&gt;  (actual target users verify if it fits their needs in normal scenarios or automated to check off shareholder's requirements)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wow, that is quite a bit to digest!  Follow the links if you want to dig deeper; each type is worth a full article.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q1l9GUPP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2yby14uwg4qstxraxqjr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q1l9GUPP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2yby14uwg4qstxraxqjr.jpg" alt="scientists"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;Obligatory semi-related Unsplash image, credit &lt;a href="https://unsplash.com/@scienceinhd"&gt;Science in HD&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why worry about End-to-End testing?
&lt;/h2&gt;

&lt;p&gt;I want to focus on is automating some End-to-End (E2E) testing.  This higher level may be ran as Sanity or Smoke or Regression testing before code is merged into the 'master' code base.  It can be part of User Acceptance, maybe even usability or even Security testing.. Plus E2E can be difficult and expensive to run.  Since there are so many parts of a code base running together, there is more opportunities something can go wrong, so testing costs can be higher.&lt;/p&gt;

&lt;p&gt;But there are many rewards to automated End-to-End testing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;finding bugs that lower-level tests might not&lt;/li&gt;
&lt;li&gt;help document what had been discovered by manual testing&lt;/li&gt;
&lt;li&gt;save money and time&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  End-to-End Testing in JavaScript
&lt;/h2&gt;

&lt;p&gt;Since I already know JavaScript, I looked around to see if there were any frameworks or toolkits to conduct in-browser automated testing.  Handy that JS runs both inside the browser and as a server/desktop runtime.&lt;/p&gt;

&lt;p&gt;Looking around, it seemed  &lt;a href="https://www.cypress.io/"&gt;Cypress&lt;/a&gt; is one of the top contenders.  But I also wanted to check out the new 'web automation' tool: &lt;a href="https://github.com/microsoft/playwright#playwright"&gt;Playwright&lt;/a&gt;.  It allows the three major browsers on the three major operating systems run scripts via JavaScript.  While the Playwright GitHub repo is only a few months old (started 2019-11-10)  many of the founding devs worked on a similar automated browser, Puppeteer, so there is already years of experience behind that young project.  Searching on YouTube for videos for Playwright, I found that  &lt;a href="https://codecept.io/helpers/Playwright/#configuration"&gt;CodeceptJS&lt;/a&gt; test runner works very nicely together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Cypress vs CodeceptJS+Playwright Comparison
&lt;/h2&gt;

&lt;p&gt;I wanted to try them both out on a.... not simple website, so I chose Facebook.  :)  FB is familiar to many, and because of its many features FB does not run butter smooth all the time.  You could consider it 'legacy', which is dev-talk for several dev teams evolved the code over a long time.  So the code is not consistent in technique or optimizations. (eg inconstant selectors)&lt;/p&gt;

&lt;p&gt;My example code is short, only 1 E2E test with the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Login via email, password, button click&lt;/li&gt;
&lt;li&gt;Click first &lt;code&gt;Create Event&lt;/code&gt; button&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Create Private Event&lt;/code&gt; button&lt;/li&gt;
&lt;li&gt;Fill in first field&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pause&lt;/code&gt;, to halt the test and enter interactive mode&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;My code for both testing frameworks is here:&lt;br&gt;
&lt;a href="https://github.com/tomByrer/codecept-playwright-vs-cypressio-fb"&gt;https://github.com/tomByrer/codecept-playwright-vs-cypressio-fb&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  CypressIO
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pfGclWD8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n443fzcties8sirbj28k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pfGclWD8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n443fzcties8sirbj28k.png" alt="example Cypress output"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Advantages
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Parallelized runner to complete tests faster&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.cypress.io/guides/overview/why-cypress.html#Writing-tests"&gt;Built-in GUI&lt;/a&gt; to see steps right next to the running browser&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.cypress.io/pricing"&gt;Commercial product&lt;/a&gt; with a generous free tier &amp;amp; free for OSS.  Cash flow = good support&lt;/li&gt;
&lt;li&gt;Mature codebase&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.cypress.io/dashboard"&gt;Fancy dashbord&lt;/a&gt; brings me fond memories of BrowserStack&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.cypress.io/guides/references/bundled-tools.html"&gt;Bundled Tools&lt;/a&gt;: popular testing programs like Mocha, Chai, Chai-jQuery, Sinon.JS, minimatch, MomentJS, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Disadvantages
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.cypress.io/guides/references/trade-offs.html#Permanent-trade-offs-1"&gt;Listed Trade-offs&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;not a general purpose automation tool&lt;/li&gt;
&lt;li&gt;NOT a true 'headless browser', not good for: web-scraping,  scripting 3rd party sites, performance testing, etc&lt;/li&gt;
&lt;li&gt;always runs inside of a browser (which can also be a pro)&lt;/li&gt;
&lt;li&gt;no multiple browser tabs.&lt;/li&gt;
&lt;li&gt;can't drive two browsers at the same time&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;same-origin&lt;/code&gt; only&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;worse than CodeceptJS in a few areas

&lt;ul&gt;
&lt;li&gt;runs in Electron, using a slightly older version of Chromium.  Firefox support is in Beta, &amp;amp; I don't see any Safari or mobile support&lt;/li&gt;
&lt;li&gt;cold-starts seems slower on my machine (i5, NVMe SSD, 32Gb RAM, Win10)&lt;/li&gt;
&lt;li&gt;selecting elements without id or non-dynamic class name is more difficult, so building my short test took longer than CodeceptJS&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  CodeceptJS with Playwright
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tDfUStmN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nb0j4pguhb4qabzuilfa.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tDfUStmN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nb0j4pguhb4qabzuilfa.PNG" alt="CodeceptJS running with Playwright"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Advantages
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;totally free&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sdclabs.com/codeceptjs"&gt;consulting help&lt;/a&gt; is available&lt;/li&gt;
&lt;li&gt;around for years, Codecept-PHP &amp;amp; Puppeter were prior versions&lt;/li&gt;
&lt;li&gt;CodeceptJS can &lt;a href="https://github.com/Codeception/CodeceptJS#supercharged-e2e-testing"&gt;use &lt;strong&gt;many&lt;/strong&gt; browser configs&lt;/a&gt;: Puppeteer, Playwright (nearly full Firefox &amp;amp; Safari compatibility on all desktops), WebDriver via webdriverio or Protractor, TestCafe, Nightmare, and Appium or Detox for mobile tests; very flexible&lt;/li&gt;
&lt;li&gt;Playwright keeps "browsers are as pure as they can be", so tests are accurately reflecting real users' browsers&lt;/li&gt;
&lt;li&gt;better for uses other than 'in-house e2e testing

&lt;ul&gt;
&lt;li&gt;good choice for 3rd party site testing, web scraping&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;I prefer Codecept's more terse syntax of including selectors with actions,&lt;/li&gt;
&lt;li&gt;Codecept's selecting via text (eg button labels) made building tests quick and fun&lt;/li&gt;
&lt;li&gt;fast cold-starts&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Disadvantages vs Cypress
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;CodeceptJS has a &lt;a href="https://github.com/Codeception/CodeceptJS/graphs/contributors"&gt;smaller dev team&lt;/a&gt;; basically only one guy with a second helping.  Main dev is productive though; &lt;a href="https://github.com/codecept-js/website/graphs/commit-activity"&gt;docs are frequently updated&lt;/a&gt; &amp;amp; he is constantly adding something somewhere&lt;/li&gt;
&lt;li&gt;CodeceptJS' GUI is &lt;a href="https://github.com/codecept-js/ui"&gt;very young&lt;/a&gt;, though the text-only approach is more than fine, since you can &lt;code&gt;.pause()&lt;/code&gt; and try new test commands via CLI&lt;/li&gt;
&lt;li&gt;seems to run slower than Cypress (in the little usage I have), I had to add more longer &lt;code&gt;wait&lt;/code&gt;s to get the page to load enough for next stage&lt;/li&gt;
&lt;li&gt;neither packages are as popular; fewer stars on Github, less training videos around, fewer blog posts, though they both are &lt;em&gt;popular enough&lt;/em&gt; to get going and find support&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion: Cypress or CodeceptJS?
&lt;/h2&gt;

&lt;p&gt;My gut feeling (as of March 2020) is to go with CodeceptJS with Playwright; they both are flexible, and a strong team together.  Using Playwright to cover Chrome &amp;amp; their siblings plus FIrefox plus Webkit is nice.  Plus, if you need mobile testing, or get tired of Playwright for some reason,  CodeceptJS makes it convenient to switch browser platforms. CodeceptJS feels feature rich, and is still growing.  Also, reducing the need to bother the developers to add testing-only classes or data-attributes could reduce costs.  I suspect (with my limited research) that Codecept can be used outside of End-to-End testing.&lt;/p&gt;

&lt;p&gt;However, if you have a more junior test team, prefer to use a product backed by a wider commercial venture, &amp;amp;/or like a more mature GUI, then CypressIO is the way to go.  Even though tests may take a bit longer to build, it feels Cypress is slightly but consistently faster and smoother to actually run the tests after the cold start. Their GUI+browser angle relieved some of the testing stress.  Cypress is a solid choice as well.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Aside&lt;/em&gt;: if you get tired of Codecept, you &lt;em&gt;could&lt;/em&gt; use Playwright directly, but you'll have to rewrite the tests.   But I feel Codecept makes life more tester-friendly, so it is worth the extra overhead.&lt;/p&gt;

&lt;p&gt;I hope you enjoyed this overview!  Please add comments &amp;amp; suggestions below.&lt;/p&gt;

</description>
      <category>tesing</category>
      <category>cypessio</category>
      <category>codeceptjs</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
