Explore all Video open source software, libraries, packages, source code, cloud functions and APIs.

Explore Related Topics

Popular New Releases in Video

obs-studio

OBS Studio 27.2.4

video.js

v7.19.2

iina

IINA 1.2.0

plyr

v3.7.2

flv.js

v1.6.2

Popular Libraries in Video

obs-studio

by obsproject doticoncdoticon

star image 37671 doticonGPL-2.0

OBS Studio - Free and open source software for live streaming and screen recording

video.js

by videojs doticonjavascriptdoticon

star image 33144 doticonNOASSERTION

Video.js - open source HTML5 & Flash video player

ijkplayer

by bilibili doticoncdoticon

star image 29354 doticonNOASSERTION

Android/iOS video player based on FFmpeg n3.4, with MediaCodec, VideoToolbox support.

FFmpeg

by FFmpeg doticoncdoticon

star image 29175 doticonNOASSERTION

Mirror of https://git.ffmpeg.org/ffmpeg.git

iina

by iina doticonswiftdoticon

star image 27842 doticonGPL-3.0

The modern video player for macOS.

plyr

by sampotts doticonjavascriptdoticon

star image 21883 doticonMIT

A simple HTML5, YouTube and Vimeo player

flv.js

by bilibili doticonjavascriptdoticon

star image 20765 doticonApache-2.0

HTML5 FLV Player

NewPipe

by TeamNewPipe doticonjavadoticon

star image 18715 doticonGPL-3.0

A libre lightweight streaming front-end for Android.

mpv

by mpv-player doticoncdoticon

star image 17994 doticonNOASSERTION

🎥 Command line video player

Trending New libraries in Video

wslg

by microsoft doticonc++doticon

star image 7445 doticonMIT

Enabling the Windows Subsystem for Linux to include support for Wayland and X server related scenarios

Waifu2x-Extension-GUI

by AaronFeng753 doticonc++doticon

star image 6532 doticonNOASSERTION

Video, Image and GIF upscale/enlarge(Super-Resolution) and Video frame interpolation. Achieved with Waifu2x, Real-ESRGAN, Real-CUGAN, SRMD, RealSR, Anime4K, RIFE, CAIN, DAIN, and ACNet.

owncast

by owncast doticongodoticon

star image 5814 doticonMIT

Take control over your live stream video by running it yourself. Streaming + chat out of the box.

VancedManager

by YTVanced doticonkotlindoticon

star image 4615 doticonGPL-3.0

Vanced Installer

editly

by mifi doticonjavascriptdoticon

star image 3215 doticonMIT

Slick, declarative command line video editing & API

ytfzf

by pystardust doticonshelldoticon

star image 2514 doticonGPL-3.0

A posix script to find and watch youtube videos from the terminal. (Without API)

Weylus

by H-M-H doticonrustdoticon

star image 2043 doticonAGPL-3.0

Use your tablet as graphic tablet/touch screen on your computer.

YouTube.js

by LuanRT doticonjavascriptdoticon

star image 1926 doticonMIT

🎥 full-featured wrapper around YouTube's private API

mmaction2

by open-mmlab doticonpythondoticon

star image 1919 doticonApache-2.0

OpenMMLab's Next Generation Video Understanding Toolbox and Benchmark

Top Authors in Video

1

kaltura

36 Libraries

star icon3080

2

yavdr

31 Libraries

star icon84

3

PrettyPrinted

23 Libraries

star icon312

4

llSourcell

21 Libraries

star icon2080

5

muxinc

19 Libraries

star icon1064

6

kagaya25

18 Libraries

star icon39

7

videojs

18 Libraries

star icon40357

8

KDE

17 Libraries

star icon890

9

Eyevinn

17 Libraries

star icon288

10

aws-samples

15 Libraries

star icon940

1

36 Libraries

star icon3080

2

31 Libraries

star icon84

3

23 Libraries

star icon312

4

21 Libraries

star icon2080

5

19 Libraries

star icon1064

6

18 Libraries

star icon39

7

18 Libraries

star icon40357

8

17 Libraries

star icon890

9

17 Libraries

star icon288

10

15 Libraries

star icon940

Trending Kits in Video

Globally, there are 2.2 billion people with vision impairment. They are facing constant challenges like navigating from one place to another on their own. They are dependent on another individual for accessing their basic day-to-day needs. So, it's a pretty challenging task. You can customize and use the following libraries to develop applications for guiding visually impaired people to move places. The application will show the visually impaired user the object's name, direction, and distance around them and help them navigate. Following are the steps to be followed for building the solution, 1. Object Detection 2. Accessing Cameras 3. Image Processing 4. Measuring the Distance

Accessing the Cameras

These libraries are used to access the camera for taking images for object detection.

Measuring the Distance

These libraries are used to measure the distance between camera and object.

Object Detection

These libraries are used to detect the objects in the image.

Image Processing

These libraries are used to process the captured image.

The surveillance security systems used for road and railway routes are hazardous situations at unexpected level crossings. The uses of a surveillance system are for monitoring the behavior, activities, or other changing information. It is very much used for detecting and evaluating abnormal conditions and clustering situations. The three most essential steps in a video surveillance system are object detection, object tracking, and recognition. Following are the steps to be followed for building video surveillance security system, 1. Video Processing 2. Motion detection 3. Object Tracking 4. WiFi Controller

Video Processing

These libraries are used to process the captured video.

Motion Object Detection

These libraries are used to detect the moving object in video.

Object Tracking

These libraries are used for object tracking in video

WIFI Controller

These libraries are used for wireless communication.

Here are some famous JavaScript Audio Player Libraries. Some of the use cases of JavaScript Audio Player Libraries include Creating custom music players for streaming platforms, Adding audio effects to games, Creating interactive audio applications, Creating audio visualizers, Creating audio synthesizers, and Creating soundscapes.  


Javascript audio player libraries are collections of code that allow developers to create and integrate audio players into a web page. These libraries typically contain functions for loading audio, playing and pausing tracks, adjusting the volume, and more. They can also create custom audio players with unique features and designs. 


Let us have a look at the libraries in detail. 

plyr

  • Includes many customization options.
  • Compatible with the latest versions of all major browsers.
  • Fully responsive and scaled to any device or screen size. 

howler.js

  • Support for Web Audio 3D spatial audio.
  • Supports all popular audio formats, including MP3, AAC, OGG, and WAV.
  • Allows you to create multiple audio channels. 

DPlayer

  • Responsive and has built-in support for scaling to different screen sizes.
  • Supports a wide range of customization options.
  • Supports playback across multiple platforms

mediaelement

  • Compatible with all major web browsers.
  • Supports both HTML5 and Flash audio playback on mobile devices.
  • Comes with lots of pre-built components, such as a playlist. 

APlayer

  • Lightweight and powerful library with a modern design
  • Supports multiple audio sources, such as local files, remote URLs, and streaming audio.
  • Offers a powerful API for developers

SoundManager2

  • Works with Flash 8, allowing for reliable audio playback on older browsers.
  • Highly configurable, allowing for a range of audio playback options.
  • Supports HTML5 audio fallback.

jPlayer

  • Flexible options for styling and customizing the player.
  • Wide range of API support for customizing functionality.
  • A unique data-attribute feature allows custom data to be passed to the player. 

amplitudejs

  • Designed to be responsive to any size viewport.
  • Allows developers to create multiple playlists.
  • Features a powerful and customizable UI.

green-audio-player

  • Can be easily modified with custom CSS.
  • Mobile-friendly and supports touch gestures. 
  • Can be integrated easily with any web page. 

This kandi kit on Fediverse applications helps you build federated social applications like Twitter. LinkedIn, Good Reads, Instagram, Reddit, and many more alternatives based on the ActivityPub protocol. You can use these popular open source libraries, such as Mastodon, PeerTube, WriteFreely, Plume, Owncast, Pixelfed, Misskey, BookWyrm, and others, to build your applications across micro, macro blogging, writing, reviews, podcasts, link aggregators, and professional networks.


A federated social network is a type of social network comprising multiple different providers or platforms. Instead of being controlled by a single company or organization, it is decentralized and distributed across these different providers. It enables interoperability among multiple social networks in a transparent way. The focus is on data exchange, and different networks adopt one unified data architecture so that a robust, heterogeneous network-of-networks can emerge.


Federated social networks solve issues commonly found in traditional social networking platforms, such as lack of user control and limited diversity in services. By joining a federated social network, you can select from various profile providers or even host your own server. This allows for greater innovation and flexibility. Additionally, profiles on different servers can communicate with each other seamlessly.


A federated social network comprises multiple independent services that communicate with each other using standard protocols. This allows users to interact with friends on different social networks without joining the same one. In other words, users from different social websites can communicate with each other seamlessly.




ActivityPub is a decentralized social networking protocol based on the ActivityPump protocol from Pump.io. It offers a client/server API for managing content and a server-to-server API for delivering notifications and content between federated servers. ActivityPub is recognized as an official standard by the World Wide Web Consortium’s (W3C) Social Web Networking Group.


ActivityPub is a protocol that allows different social media platforms to communicate with each other. It does this by providing a standardized way for platforms to create, update and delete content and deliver notifications and content between servers. This means that users on one platform can interact with users on another platform that implements the ActivityPub protocol.


For example, Alice is on a social media platform called “SocialA” and Bob is on another platform called “SocialB”. Both SocialA and SocialB implement the ActivityPub protocol. This means that Alice can follow Bob’s account on SocialB from her account on SocialA. When Bob posts something on SocialB, Alice will see it in her feed on SocialA. Similarly, when Alice likes or comments on Bob’s post from her SocialA account, Bob will see the like or comment on his SocialB account.


This is possible because both platforms use the same standardized communication method through the ActivityPub protocol.


Here are some cool open source applications to build micro, and macro blogging, writing, reviews, podcasts, link aggregators, and professional networks.


JavaScript video players began appearing in more web applications. But the first popular library to embrace the technology was Flowplayer in 2006. Flowplayer became popular with web developers. It enables them to integrate video ads, social sharing buttons, and analytics tracking. It pioneered the concept of native HTML5 playback. It allows videos to reach viewers with less latency and buffering issues.  

 

JSVPLs had made it easier for developers to embed and configure media players. One of the most popular ones is mediaelement.js. It has robust features like cross-platform support, adaptive streaming, and visual effects.  

 

With the advent of HTML5, JSVPLs have become more accessible. JSVPLs help improve a website's performance and user experience. It allows web developers to use HTML5 and JavaScript. It helps create custom media players tailored to their specific applications and needs. It allows streaming in-browser rather than relying on an external player to load content.  

 

Most JavaScript video player libraries will provide playback controls. It happens when a control bar with pause, play and seek buttons or keyboard shortcuts. Generally, the playback controls are accessible through the player API. It happens because you can create customized controls for the player. These libraries provide pre-made UI elements. It can give the video a native look and feel on desktop and mobile devices.  

Different types of videos can be played with the JavaScript video player library:  

  • HTML5 Video  

HTML5 video is the most used type across the web. It is playable in most web browsers through the Video element in HTML5. This video type is great for delivering high-quality content without any plugins.  

  • Native Video  

Native video is a video that is encoded and stored within the native format of the device. This type of video has been used online in formats such as Flash Video (FLV) and Windows Media Video (WMV). Portable versions of this video type on devices using the HTML5 Video element. While this type of video does offer great quality, it is not supported by all browsers.  

  • Adaptive Streaming Video  

Adaptive streaming video is a technology type. It's where video content is adjusted based on the user's network speed. It offers users an uninterrupted streaming experience. Some well-known streaming services use this type of streaming video. The HTML5 video element offers support for adaptive streaming.  

 

Cloudinary is a content delivery network (CDN) with extensive video support. It provides high-quality video playback across desktop and mobile devices. The library supports MP4 and WebM file formats, along with Vitepress PDF documents. The library supports many streaming formats for browsers that don't support the formats. It supports adaptive bitrate streaming. There are some exciting features, such as picture-in-picture support, autoplay, Chromecast, and more.  

 

One of the most popular and used JavaScript video players is Wistia. Wistia provides an embeddable video player supported by desktop and mobile devices. It supports HLS streaming and progressive downloading in both MP4 and WebM formats.  

 

Elite Video Player is a video player used in websites, mobile, and native applications. It provides features like adaptive bitrate streaming formats and many player options. It also offers playback control, player-level customization, an extensible media library, and more. The video player requires no extra libraries like jQuery, Angular, or React.  

 

Many video players libraries support streaming technologies like HLS, MPEG-DASH, and MSE/EME. JavaScript-based applications can leverage these libraries to implement adaptive bitrate streaming playback. It can switch the video streaming quality. It helps match the current screen size and internet connection speed. It can create video playback controls and add support for un-supported formats. Also, libraries support custom plugin development. The developers can create features like autoplay, full-screen mode, and progress bar.  


Different video player libraries come with different capabilities and research. Here are some tips for using the JavaScript video player library:  

1. Consider the necessary features.   

2. Use the right player for the browser and evaluate the cost.  

3. Consider user experience and get support.  


The best way to use a JavaScript video player library is to start with simple tasks. You can build up to more complex projects.  

  • Start by familiarizing yourself with the library's basic programming concepts and use cases. It can be understanding how to place, play, pause a video, or adjust audio settings.  
  • After that, you can move on to more complex projects. You can configure custom navigation functions, create a playlist, or add custom controls.  
  • Learn the core features and explore example videos or tutorials online.  
  • Allow yourself the flexibility to experiment and take advantage of the available options. You can make the most of any JS video player library with patience and practice.  

When writing about this library, the key points to include the following:  

1. Overview: describe what the library offers, such as features and usability  

2. Benefits: outline the advantages of using the library compared to another solution  

3. Integrations: discuss the library's integration possibilities with other platforms  

4. Setup: explain the installation process and prerequisites for using the library  

5. Usage: provide an overview of the library's features and how to use them  

6. Examples: provide code snippets and a demo video of how the library works  

7. Security: explain the security options in place to protect user data  

8. Support: give information on how to access online help and customer support.  

 

HLS client allows users to access streaming content on the web using HTTP Live Streaming. It can deliver high-definition video content to streaming video providers. The technology is used in modern streaming formats like MPEG-DASH, Adobe Flash, and HLS. The client provides a comprehensive solution for playing media files. It enables users to access Media Source Extensions and Encrypted Media Extensions are available.  

 

YouTube Player is a popular open-source JavaScript library for playing YouTube videos. It offers features like automatic playback, customizing playback, and control over playback speed. It provides APIs for customizing the playback experience and integrating it.  

 

Vimeo Player provides a JavaScript library. This library controls the Vimeo player's video properties and behavior within their code. It allows developers to create and integrate a custom Vimeo player into applications.  

 

An iframe is an HTML document embedded inside another HTML document on a web page. It is often used to embed content from another source, such as an advertisement, video, or audio file. Additionally, the iframe API provides features like autoplay, progress bars, and custom styling. They also offer advanced options such as full-screen mode and aspect ratio adjustments. It makes it easy to create video players compatible with various devices.  

 

The aspect ratio helps set the ratio of a video's width to its height. The aspect ratio is expressed as two numbers separated by a colon, such as 16:9. The aspect ratio can force a given video size, regardless of size. Sometimes, the aspect ratio can be adjusted using JavaScript or the provided API.  

 

The importance of using this library for web development cannot be overstated. It provides a way to manage the essential elements of web-based videos. It includes streaming, media playback, and post-production management. By leveraging the library's capabilities, applications can be created. It can be from home media automation solutions to educational video kiosks. You can also create enterprise video presentations. Regardless of the application, the library streamlines the development process. It can help developers create video-based functionality to engage and delight users.  

 

Let's look at each library in detail. The links allow you to access package commands, installation notes, and code snippets.  

video.js  

  • It has a responsive layout to be viewed on any device, regardless of screen size.  
  • Includes plugins and addons to customize the player to their needs and preferences.  
  • It integrates with popular services to embed videos into their pages.  

plyr  

  • Allows to be configured with advanced playlist functionality.  
  • They are optimized for easy control with a keyboard and mouse.  
  • Are optimized for captions and subtitles.  

DPlayer  

  • It provides many options for customizing the user experience.  
  • It is a lightweight video player that only weighs 11.7KB, minified and gzipped.  
  • Supports HTML5, Flash, and other third-party video players. 

wavesufer.js  

  • It offers a set of audio functions to generate waveforms from audio.  
  • Allows to integrate playlists to group audio files into one area.  
  • Features an equalizer analyzer to shape the audio. Features help get visual feedback on its effectiveness.  

jPlayer  

  • Allows playlist support, many skins or themes, and integration with different skin formats.  
  • Supports DRM (digital rights management) and streaming audio and video formats.  
  • It has features such as Chromecast, Airplay, and DASH streaming support. 

jwplayer  

  • Supports HTML5 video on iOS and Android. Supports rich-media playback using Flash on all other platforms.  
  • Offers a slate of integrations with video and data analytics providers.  
  • It supports advanced DRM and DASH streaming and closed captioning. It supports subtitle support, delayed playback, custom skins, setting playback rate, and quality.  

flowplayer  

  • Supports HLS (m3u8), RTMP/RTSP streaming, Apple HTTP Live Streaming (HLS), and MPEG-DASH (MP4).  
  • It can be embedded into websites and web applications. It allows video streaming across any web browser.  
  • Allows you to protect your videos and control who can watch the content. 

FAQ 

How does an HTML5 video player work?  

An HTML5 video player uses a combination of HTML5 tags and attributes. JavaScript to play video files. When a web page is loaded, the HTML5 tags and attributes. JavaScript code embedded in the page instructs the browser to create a video player. When a user clicks on, or presses play on the video, the video is delivered to the user's computer. The video is then streamed from the browser window to the user's screen, allowing them to view it.  

 

What are the benefits of Cloudinary video players over other JavaScript players?  

Cloudinary video players offer many benefits over other JavaScript video players, such as:  

  • Scalable performance allows adaptation to different screen sizes, devices, and networks. 
  • Full control over user experience. It happens with the ability to customize styling, thumbnails, and links.  
  • Automated transcoding of videos. It helps deliver them in the most suitable format for the device.  
  • Real-time analytics on video engagement, including the number of views, likes, and shares.  
  • Easy integration with both Cloudinary's and other platforms' APIs.  
  • Advanced features such as time-lapse videos and splash images  
  • Ability to monetize videos through ads and to protect content with DRM.  


Can you create a custom video player with JavaScript?  

Yes, it is possible to create a custom video player with JavaScript. HTML5's <video> tags, JavaScript events, and API can customize the video player functionality. The user can create custom play/pause, seek bars, caption display, and video source files. Web developers can use third-party frameworks to customize a video player.  

 

Do JavaScript video players support modern streaming formats?  

JavaScript video players often support many streaming technologies for various streaming technologies. Yes, many players support modern streaming formats. Many JavaScript video players use open-source streaming technologies. It offers better compatibility with platforms and streaming protocols.  

 

What is an extensible media player, and why would I want to use one?  

An extensible media player is a software application. It allows users to extend the player's capabilities with addons or custom plugins. This means users can personalize and manipulate the media player. It helps customize playback, media management, and playback options. It gives the user greater control over how the content is enjoyed. Extensible media players can enable playback of video not supported by the application. It supports various streaming platforms. Users can make the media player their own with an extensible media player. They can enjoy the content they want how they want.  

 

Is it possible to integrate YouTube videos into a JavaScript video player library?  

It is possible to integrate YouTube videos into a JavaScript video player library. YouTube provides a JavaScript API. It helps developers can use to control and customize the YouTube video player. For example, developers can cue and play YouTube videos. They can add annotations and change the player controls. They can listen to events triggered when an action occurs. Many open-source video player libraries help display YouTube videos within a custom UI.  

 

What are the best practices for optimizing video playback using a JavaScript library?  

  • Ensure a low latency connection: 

A low latency connection will minimize buffering and improve video playback quality. You can use CDNs or reduce the distance between playback and viewers.  

  • Take advantage of caching:  

Remy Shinn explains: "Use caching for accessed content. It reduces the requests and data transfer needed every time a video is seen."  

  • Optimize video resolution:  

You should select an optimal resolution. It helps reduce the amount of data transferred. It prevents video artifacts like pixelation and smudging.  

  • Implement adaptive streaming:  

Adaptive streaming helps determine the optimal video bitrate. It depends on the end user's bandwidth and device capabilities. It delivers the best video experience.  

  • Take advantage of streaming protocols:  

Seek out protocols like HLS and DASH to help stream high-quality video hassle-free.  

  • Leverage hardware acceleration:  

Try to use the hardware acceleration support of your players to the fullest. This will improve video playback performance as much as tenfold. It will ensure that the dedicated video and graphics processors can handle decoding & scaling.  

  • Limit JavaScript executions.  

Minimize the number of JavaScript-based operations on the page while the video plays back.  

  • Minimize requests:  

To reduce network latency, minimize the HTTP requests for resources. It allows smooth video playback.  

  • Monitor playback:  

Monitor playback performance at all times to detect and address potential issues.  

 

Are browser controls available with certain JavaScript libraries for playing videos?  

Generally speaking, the answer to this question is no. JavaScript libraries usually do not provide native support for controlling or playing videos. Some frameworks have built-in APIs that enable developers to access video playback controls. But, some libraries, such as Plyr, provide an API for playing videos. This API can add custom functions and features to the video player.  

 

How can you create a reusable video component using existing libraries?  

A reusable video component can be created using libraries like React MediaPlayer. React MediaPlayer is an intuitive video library with an HTML5 video player. It can be customized with props and embedded videos in React applications. MediaPlayer also supports many video formats, such as MP4, WebM, and Ogg. It provides methods to control video playback. It includes pause, play, replay, mute/unmute, volume control, and more. Using MediaPlayer, developers can create a reusable video component. It can be integrated into React applications.  

 

What features should we consider when selecting a suitable library? For developing a custom video player application in JavaScript?  

  • Support for many video formats:  

The library should support MP4, WebM, and Ogg to ensure wider user compatibility.  

  • Responsive playback:  

The library should allow for responsive playback. It allows the best viewing experience, no matter the device.  

  • Adaptability:  

The library should be flexible enough to allow for customization. The customizations like playing back videos and skins to customize the player's appearance.  

  • Cross-platform compatibility:  

The library should be compatible with desktop and mobile devices. It helps to use the video player on any platform.  

  • Embeddable:  

The library should allow for embedding video content on web pages. It will allow users to share the video player with others.  

  • Performance:  

The library should provide good performance. It should have fast loading times and minimal lag while playing videos. 

Python Subtitle Library works with formats like Advanced SubStation, MicroDVD, SubRip, and SubStation Alpha. It can parse and modify existing subtitle files and create new ones. This library supports advanced features like karaoke effects, time shifting, and typesetting.   


Python Subtitle library helps automatically synchronize subtitle files with video or audio files. It will use audio fingerprinting to detect the timing errors in the subtitle files and correct them automatically. This library will help download and synchronize subtitles for movies and TV shows. It also supports merging and splitting subtitle files, time shifting, etc. These libraries can be used for subtitle-related tasks like modifying, parsing, and creating subtitle files, synchronizing subtitles with video or audio files, and downloading subtitles from online sources.  


Here is a list of the top 10 Python Subtitle Libraries that developers handpick for working with subtitle files: 

ffsubsync: 

  • Is a Python library that uses FFmpeg to synchronize subtitle files with video or audio files.  
  • Works by analyzing the audio waveform and subtitle timestamps for detecting and correcting synchronization errors.  
  • Can also perform a dry run to estimate the synchronization error without modifying the original file.   

video-subtitle-extractor: 

  • Supports various advanced options like choosing a specific subtitle format, specifying the output encoding, and specifying the subtitle stream index. 
  • Is a Python library that is useful for extracting subtitles from video files. 
  • Can be used in different scenarios, like if the original subtitle file is lost or if the video file contains embedded subtitles that need to be extracted.   

Medusa: 

  • Is a Python library for working with subtitle files that can be used for downloading, searching, and managing subtitle files for movies and TV shows.   
  • Supports various subtitle sources like Subscene, Addic7ed, and OpenSubtitles.  
  • Has a web-based interface that can manage the media library, movie details, view episodes, and configure various settings.   

WebTools.bundle: 

  • Is a powerful tool for extending and managing the functionalities of Plex used for enhancing the user experience and adding additional features to the media server.  
  • Is a plugin for the Plex Media Server which offers various useful tools to manage media libraries like subtitle downloading, media conversion, and metadata editing. 
  • Can be used for managing Plex server configuration, like managing server settings, installing and updating plugins and themes, and creating and restoring backups. 

youtube-transcript-api: 

  • Is a Python library that allows you to retrieve the transcripts of YouTube videos. 
  • Works by scraping the YouTube website and extracting the transcript text from the video’s webpage.  
  • Can be used in different scenarios like if you need to analyze the content of a video or create subtitles for the video.  

Auto-Synced-Translated-Dubs: 

  • Is a collection of pre-made subtitle files which have been automatically synchronized and translated for various TV shows and movies. 
  • Have been synchronized with the corresponding video files to be correctly timed with the video and audio.  
  • Can use the subtitle files as the starting point and edit them manually to improve accuracy or adjust the timing.   

subfinder: 

  • Is a Python library that offers a simple and easy-to-use interface to search for and download TV and movie subtitles. 
  • Supports different subtitle formats like ASS, VTT, SRT, and SSA. 
  • Supports different options like filtering out low-quality subtitles, specifying the source for the subtitles, and specifying the language of the subtitles.  

subtitle-downloader: 

  • Is a Python library that offers an easy-to-use for downloading subtitles for TV shows and movies from different subtitle websites. 
  • Can be used in different scenarios like if you want to create your own subtitles for a video or if you want to watch a movie in a language you are not fluent with. 
  • Supports various options, like selecting a specific subtitle website to search, specifying the language of the subtitles, and specifying the output format of the subtitle file, among others. 

GetSubtitles: 

  • Allows you to specify the language of the subtitles and download the subtitles for different TV shows or movies at once. 
  • Supports various subtitle sources like YIFY Subtitles, OpenSubtitles, and Subscene. 
  • Is a useful tool for searching and downloading subtitles for TV shows or movies and can be used in different scenarios like improving the accessibility of your media content.   

netflix-to-srt: 

  • Is a Python library that offers a simple and easy-to-use interface for converting Netflix subtitles to the SRT subtitle format.  
  • Can be used to extract subtitles from Netflix videos and save them in the SRT format, a widely used subtitle format that supports media players and subtitle editors.   
  • Can be used in different scenarios, like if you want to create subtitles in a format compatible with most media players and subtitle editors or if you want to add Netflix subtitles.   

Here are the best open-source Java video editing libraries for your applications. You can use these to add effects and transitions to the video clips and modify and manipulate video and audio data.

 

Video editing is a complex process that involves a lot of work, including cutting, splicing, trimming, and joining videos. It can be done using different types of software, but Java is one of the most popular programming languages for video editing. Java has a rich set of libraries for video editing, which can help you create amazing videos easily. These libraries can help you to edit the audio, visuals, and other aspects of the video clips. Moreover, Java Video Editing libraries are useful for recording, mixing, rendering, compositing, and editing a variety of video files and different formats.

 

Depending on your requirements, these libraries provide various features and functionalities that can be used for video editing. We have handpicked the top and trending open-source Java video editing libraries for your next application development project.

Phoenix:

  • Used in Telecommunications, Media, Media, Entertainment, Video, Video Utils applications, etc.
  • Allows taking pictures/videos, picture/video selection, editing, and compression. 
  • It’s a one-stop solution for the Android platform.

Mp4Composer-android:

  • Used in Video, Video Utils applications, etc.
  • It generates an Mp4 movie using Android MediaCodec API.
  • You can apply filters, scale, trim, transcode, crop, timeScale, mute, and rotate Mp4 video files.

Transcoder:

  • Used to transcode and compresses video files into the MP4 format, with audio support.
  • Makes the best use of the hardware-accelerated Android codecs available on the device.
  • Features include video and audio cutting, merging, mixing, and more.

Android-video-trimmer:

  • Used in Video, Video Utils applications, etc.
  • Helps to trim local videos with the compress option.
  • Works on Android applications using Exoplayer 2 and FFmpeg.

Hms-video-editor-demo:

  • Used to build video editing capabilities quickly.
  • Provides two integration modes with one-stop video editing capabilities.
  • Offers high-performance, easy-to-use, and highly compatible interfaces.

JCodec:

  • Used for video editing by decoding the input video and processing it.
  • Also allows encoding of the output video.
  • Provides video and audio codecs for decoding and encoding media.

JavaCV:

  • Used in Artificial Intelligence, Computer Vision, OpenCV applications, etc.
  • Provides access to many popular video processing and computer vision libraries such as OpenCV, FFmpeg, and libdc1394. 
  • Offers a simple and easy-to-use interface for video editing by combining different video processing algorithms.

In React Native, video player libraries provide optimized performance and smooth playback. In applications, React Native video player libraries provide pre-built components and APIs. It simplifies the integration of video playback capabilities. React native video player libraries offer a range of customization options. To allow developers to tailor the appearance and behavior to match their requirements.  

 

Popular React Native video player libraries have active communities. These libraries save development time and effort. It allows them to focus on building engaging video experiences for their users. It provides support, documentation, and updates. It helps integrate video playback capabilities into applications, simplified by React Native video player libraries. It ensures cross-platform compatibility and delivers optimized performance. It provides customization options, supports advanced features, and benefits from community support.  

 

Here are the best libraries organized by use cases. A detailed review of each library follows. The best libraries are React-native-video, React-native-youtube, React-native-video-controls, React-native-video-player, React-native-af-video-player, React-native-vlc-media-player, and React-native-media-controls.  

 

Let's look at each library in detail. The links allow you to access package commands, installation notes, and code snippets.  

react-native-video:  

  • The "react-native-video" library is popular for playing videos in React Native applications.  
  • The React native video library allows you to play videos in various formats.  
  • React-native-video allows seeking a specific time within the video. It enables users to jump to a particular point.  
  • This library is optimized for efficient video playback. It uses platform-specific video players on iOS and Android.  

react-native-youtube:  

  • React-native-youtube enables you to play YouTube videos within your application.  
  • React native youtube library provides a wrapper around the YouTube player API. It allows you to embed YouTube videos within your React Native app.  
  • This provides options to customize the appearance of the YouTube player.  
  • React-native-youtube supports iOS and Android platforms. It provides consistent functionality and user experience across devices. 

react-native-video-controls:  

  • React-native-video-control library is a React Native component. It provides a set of customizable video controls for the react-native-video library.  
  • The React native video control library provides built-in support for fullscreen video playback.  
  • React-native-video-controls enable you to control video playback.  
  • React-native-video-controls is designed to work across different screen sizes and orientations.

react-native-video-player:  

  • React-native-video-player leverages the underlying "react-native-video" library to handle video playback.  
  • React-native-video-player simplifies entering and exiting fullscreen mode, providing a built-in fullscreen button.  
  • React-native-video-player offers playback actions. We can trigger it with play, pause, seek, and skip.  
  • React-native-video-player supports iOS and Android platforms. It offers consistent behavior and user experience across devices.  

react-native-af-video-player:  

  • It is a flexible video player library as an af media player for your applications.  
  • It supports local and remote video subtitles and playback controls. It also has a full-screen mode and customizable UI components.  
  • This incorporates video playback functionality into your React Native applications.  

react-native-vlc-media-player:  

  • React-native-vlc-player is a React Native component. It enables the integration of the VLC media player into your applications.  
  • VLC supports various media formats, codecs, and streaming protocols.  
  • React-native-vlc-player offers various playback controls. It allows users to play, pause, seek, adjust volume, and control playback speed.  
  • This is designed for iOS and Android platforms. It provides a consistent video playback experience across devices. 

react-native-media-controls:  

  • React native media controls aim to simplify the implementation of media playback controls. It will enhance the user experience of playing media content.  
  • React native media control help us change the icons, colors, sizes, and positioning.  
  • It helps us to trigger actions like play, pause, seek, and skip using the provided API.  
  • React-native-media-controls are designed to work across different screen sizes and orientations.  

FAQ:  

1. What is the React Native video player library, and what can it do?  

The React Native video player library is a software package. It offers developers the tools to incorporate video playback functionality. It allows you to display and control videos within your app. It supports video formats and features like play, pause, seek, and full-screen mode. The library wraps native video player implementations on each platform to provide API.  

 

2. How does using Android MediaPlayer for a player compare to other libraries?  

When you need low-level control over video playback, it provides direct access to multimedia capabilities on the device. It allows you to implement custom video player functionality. Using Android MediaPlayer for a React Native video player can be viable. It provides higher-level abstractions and pre-built components. But it may need manual configuration and code to achieve the desired results.  

 

3. Are there any open-source React Native libraries for creating a video player?  

Yes, there are open-source React Native libraries available for creating video players. Some popular options include:  

  • React-native-video  
  • React-native-vlc-player  
  • React-native-video-player  

 

4. How do the MediaControls in the React Native video player work?  

MediaControls in React Native video player libraries are pre-built components. It provides a user interface for controlling video playback. They include buttons for play, pause, seeking, volume control, and full-screen mode. The MediaControls component handles user interactions. It communicates with the underlying video player to perform the desired actions. Developers can customize the appearance of MediaControls. It helps match their app's design and functionality requirements.  

 

5. Can I use this library to create applications with a single codebase?  

React Native focuses on building mobile applications for iOS and Android platforms. But there are approaches to provide cross-platform video playback support for web applications. The capabilities will determine whether you can use them to create applications. It's important to consider the requirements and the compatibility with your target platforms. 

The React video player library has a rich history, originating in 2013. It has since gained widespread popularity among developers. This versatile video player library integrates various video platforms and APIs. It includes YouTube iFrame API, Vimeo Player API, and DailyMotion Player API. With native HTML5, media player support provides a reliable video playback experience. The library offers playback controls for play, pause, seek, and volume control. It will enable developers to create interactive video applications.  


It supports various media types, including HTML5, YouTube, Vimeo, and DailyMotion videos. It even includes SoundCloud tracks. Developers can leverage the library's capabilities thanks to its flexible architecture and structure. It helps create custom video players with advanced functionality. With server-side rendering, loading players, and bundle size management, optimizing performance is easier. With documentation and examples, developers can integrate this library into their projects. Whether a simple player page or a complex application. The React video player library has become popular among developers. It is because of its robustness and ability to deliver high-quality playback experiences.  

 

In conclusion, the React video player library is a well-liked and adaptable tool. It helps in adding video playback capabilities to React applications. This library has developed into a reliable tool for managing various media. It includes HTML5, DailyMotion, YouTube, Vimeo, and even SoundCloud tracks. It makes it easy to connect to popular video platforms and APIs. It connects with DailyMotion, YouTube iFrame, and Vimeo Player API. The library gives playback controls and local HTML5 media player support. It also includes the capacity to make custom video players with cutting-edge usefulness.  

video-react:  

  • Used for creating a customizable and accessible video player in React applications.  
  • Offers various features, such as playback controls, customizable skins, and subtitles.  
  • Built with flexibility. It allows developers to customize the player to meet their specific needs. 

react-native-video:  

  • Used for playing videos in React Native applications.  
  • Supports various video formats and streaming protocols.  
  • Offers advanced features like playback speed control and background audio support. It offers customizable video controls. 

cassette:  

  • Used for recording and replaying HTTP interactions in JavaScript applications.  
  • Allows developers to test APIs and services without depending on live data.  
  • Offers various features like request filtering and matching and request/response interception. It also offers network throttling.  
  • Cassette supports minifying and combining your assets before deployment.  

React-Video-Player:  

  • Used for creating a customizable and feature-rich video player in React applications.  
  • Responsive design that adjusts to the container element size. 
  • Customizable controls such as play/pause, volume, and fullscreen. It supports captions and subtitles.  
  • The ability to play many videos in a playlist.  

react-jPlayer:  

  • Used for creating a cross-browser and accessible media player in React applications.  
  • Offers various features, such as playback controls, playlist support, and custom skins.  
  • Built with a modular architecture, developers can extend and customize the player's functionality. 

ice-video:  

  • Used for integrating video playback in React applications.  
  • It is built and allows developers to integrate video playback into their applications.  
  • Offers a range of features, such as playback controls, playlists, and customizable skins. 

ramp:  

  • Used for creating a video player in React applications that support VR and 360° video.  
  • Offers advanced features such as VR and 360° video support, hotspots, and custom skins.  
  • Built with flexibility. It allows developers to customize the player to meet their specific needs. 

FAQ  

1. How does a Markdown syntax tree help in making such libraries?  

A Markdown syntax tree helps create libraries by providing a structured representation. We can traverse and manipulate it to generate output in various formats.  

 

2. What can we use the HTML elements with a Markdown string when rendering it in the browser?  

When rendering a string, we can use the elements like headings, paragraphs, and images. We can also use blockquotes, links, lists, and code blocks.  

 

3. What is a site generator for creating React client markdown rendering libraries?  

A site generator is a tool. It generates a website from structured content such as Markdown files. We can create React client markdown rendering libraries using site generators. The generators can be Gatsby, Next.js, or Hugo.  

 

4. How can I use the Markdown component provided by React to render my markdowns?  

To render Markdown in React, you can use the react-markdown library. It offers a Markdown component. It accepts a Markdown string as its source prop and renders it as HTML elements. You can customize the rendering of Markdown elements by passing in a render function as a prop. 

Here are the best Django media processing libraries for your web application. You can use the Django web framework for various media processing functionalities, from basic image resizing to advanced video processing, without having to write complex code from scratch.


Several libraries provide these features in Django, making it easier for developers to handle image and video processing in their applications. These libraries offer a variety of image-processing functionalities, including the ability to resize, crop, and rotate photos. Certain libraries provide a simple functionality to resize images and save the resulting images to your media storage backend. Also, you can find libraries that allow developers to easily extract video frames, convert video formats, and perform other video processing tasks in the Django applications. Hence, Django libraries are popular for developing applications requiring image and video processing capabilities.


We have handpicked top and trending Django media processing libraries based on popularity, licensing, and unique features to build video and image processing functionalities in your applications:


Pillow:

  • Used in Artificial Intelligence, Computer Vision, Deep Learning applications, etc.
  • A fork of the Python Imaging Library (PIL)
  • Provides a wide range of image processing functionality.

Django-Resized:

  • Used to rotate and resize images to a specified size.
  • Saves the resulting images to the media storage backend.
  • Compatible with sorl-thumbnail.

Django-FFmpeg:

  • Used to download and re-encode video files.
  • Provides support for the FFmpeg library.
  • Allows performing video processing tasks such as extracting video frames, converting video formats, and more.

Django-video-encoding:

  • Used to convert your videos into different formats and resolutions.
  • Requires at least Python 3.6.1 or newer version.
  • Provides support for FFmpeg and FFprobe.

ImageKit:

  • Used to perform a range of automated image processing tasks in Django.
  • Offers a high-level API for image processing and optimization.
  • Includes functionalities like image resizing and compression.

Easy-Thumbnails

  • Used to create thumbnails of various sizes and formats.
  • Provides options for cropping and resizing.
  • Version 2.8.0 will provide added support for thumbnailing SVG images.

Django-ImageField:

  • Used to create custom image fields for Django models.
  • Automatically handles image resizing and optimization.
  • Provides a flexible, intuitive, and easily extensible interface.

Django-Media-Library:

  • Used as a media library for Django.
  • Provides the ability to categorize and tag media files.
  • Offers support for image and video processing.

Sorl-Thumbnail:

  • Used for resizing, cropping, and other image-processing operations.
  • Integrates well with Django and offers flexible options.
  • Allows generating alternative resolution versions of a thumbnail.

Django-Thumbor:

  • Used to perform image resizing, crop, and other operations.
  • Provides support for the Thumbor image processing service.
  • Thumbor is an open-source smart, AI-imaging service. 

Here are the best JavaScript video conversion libraries for your web application. You can use the rich JavaScript ecosystem of video conversion libraries to convert, manipulate, and encode video files.


These libraries typically use JavaScript to interface with underlying software or hardware to perform the video conversion. Whether you need to convert a video into a different format, manipulate its contents, or prepare it for playback on other devices, these libraries provide a wealth of functionality to support your video conversion needs. The JavaScript video conversion libraries offer a wide range of functionalities, such as:

  • Command-line tool for converting video.
  • Recording and encoding video in a variety of formats.
  • Video compression and format conversion.
  • Adding watermarks or other overlays to videos.


They are also often used to convert video into formats that can be played on different devices or web browsers.


We have handpicked top and trending JavaScript video conversion libraries based on popularity, licensing, and unique features to build video processing functionalities in your applications:


FFmpeg.js:

  • Used in User Interface, Graphics applications, etc.
  • A command-line tool for video conversion used through JavaScript.
  • Supports formats like WebM, MP4, H.264, AAC, and MP3 encoders.

MediaStreamRecorder:

  • Used for recording and encoding video and audio streams in JavaScript.
  • Useful for cross browser audio/video/screen recording.
  • Supports Chrome, Firefox, Opera, Microsoft Edge, and Android browsers. 

Video.js:

  • Used for its built-in video conversion capabilities.
  • An open-source web-based HTML5 video player.
  • Supports HTML5 video and Media Source Extensions, as well as YouTube and Vimeo (through plugins).

CloudConvert

  • Used in Utilities, Command Line Interface, Nodejs applications, etc.
  • A cloud-based API for converting video and other media files.
  • Allows easy and fast conversions of files using the terminal.

VideoConverter.js:

  • Used for converting video files to other formats in a web browser.
  • Support multiple video codecs and containers.
  • Originally conceived for a project called Video Funhouse in Node Knockout 2013.

VideoConverter:

  • Used to perform multiple video conversions at the same time.
  • Offers cross platform (macOS, Windows & Linux) support.
  • Supports multiple input and output formats.
  • Provides an easy drag-and-drop function for multiple files at the same time.

Gifify

  • Used to convert any video file to an optimized animated GIF.
  • Can extract small parts to convert from lengthy videos.
  • Offers multiple options like movie speed, fps, colors, compression, resize, reverse, from & to, and subtitles.

AV-converter

  • Used to convert audio/video files to another format in the web browser.
  • Powered by FFmpeg and WebAssembly.
  • Supports multiple audio and video formats.
  • Has a YT downloader as well.

Node-Fluent-FFmpeg

  • Used to record, convert, and stream audio and videos across platforms.
  • Built for using FFmpeg in Node.js applications.
  • Provides a simple API for video conversion.

Handbrake-js

  • Used for converting video from nearly any format.
  • Compatible with Mac OSX, Ubuntu 14, Windows XP, Windows 7, and Windows 8.1.
  • Provides a lean and stable foundation for building video transcoding software in node.js.

Here are the best open-source Python video processing libraries for your applications. You can use these to build intelligent applications with a wide range of functionality, such as object detection, image segmentation, and motion analysis.

 

Python has many open-source libraries that can be used for various image and video processing tasks. These support several file formats and image data types. Also, other video editing libraries allow developers to manipulate video files by using a simple Python interface and simplifying tasks such as cropping, concatenating, and adding effects to videos. Moreover, Python video processing libraries offer a simple and powerful interface for reading and writing various image and video formats, including GIF, MP4, AVI, and more. Moreover, some libraries can be used for tasks such as generating thumbnails, creating GIFs, and converting video formats. Also, developers get powerful tools for working with multimedia files, including video and audio codecs.

 

We have handpicked the top and tending open-source Python libraries that offer a wide range of capabilities, from essential video file reading and writing to advanced computer vision and machine learning algorithms for your applications.

OpenCV:

  • Used for computer vision and image processing tasks.
  • Supports a wide range of video processing functions.
  • Offers support for cross-platform application development.

FFmpeg:

  • Used in User Interface, Graphics applications, etc.
  • Offers a complete, cross-platform solution to record, convert, and stream audio and video.
  • Supports multiple formats like WebM, MP4, H.264, AAC, and MP3 encoders.

MoviePy:

  • Used in telecommunications, media, entertainment, video, video Utils applications, etc.
  • Allows to process video files and create animations.
  • Compatible with Windows/Mac/Linux, with Python 3.6+.

PyAV:

  • Used for efficient and high-performance video and audio processing.
  • A Pythonic binding for the FFmpeg multimedia framework.
  • Allows media access via containers, streams, packets, codecs, and frames.

PySceneDetect:

  • Used to perform scene detection on video files.
  • Provides scene-by-scene breakdowns of video content.
  • Requires FFmpeg/mkvmerge for video splitting support.

scikit-video:

  • Used in Artificial Intelligence, Computer Vision applications, etc.
  • Built on the popular scikit-learn machine learning library.
  • Key features include algorithm processing, quality metrics, temporal filtering, motion/object detection, and motion estimation.
  • Created as a companion to the scikit-image library.

PyDub:

  • Used to manipulate audio in different formats.
  • Provides a simple and easy-to-use high-level interface.
  • Makes it easy to work with audio and video formats.

Vidgear:

  • Used for multiple high-performance video processing functions and capabilities.
  • Provides a special internal video stabilization wrapper.
  • Offers multiple APIs, known as Gears, each with some unique functionality.

For an embaded link you will get a snipet like this:

"<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/ESBrUXjBCF8?rel=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>"

add "?rel=0" at the end of the src link and the player won't sho suggested videos when paused.


To stop all the suggestin after the video ends:

  1. for(element of document.getElementsByClassName('ytp-ce-element')) { element.style.display = 'none'; }  



Trending Discussions on Video

Segmented far pointer allocation in 16bit x86 MS-DOS real mode

Why is `np.sum(range(N))` very slow?

The unauthenticated git protocol on port 9418 is no longer supported

in Typescript, try...catch error object shows &quot;Object is of type 'unknown'.ts(2571)&quot;

RAKUDO_RAKUAST=1 raku --target=ast is not yet available

Error when trying to run my React Native app on Android

How to make the grey hints that point the type on methods auto appear?

What's the library should I import for UTTypeImage, which is the replacement of kUTTypeImage in iOS 15?

Replacing YouTube HTML links with embed code

How to prevent actor reentrancy resulting in duplicative requests?

QUESTION

Segmented far pointer allocation in 16bit x86 MS-DOS real mode

Asked 2022-Apr-03 at 08:07

I'm trying to get my head around programming real mode MS-DOS in C. Using some old books on game programming as a starting point. The source code in the book is written for Microsoft C, but I'm trying to get it to compile under OpenWatcom v2. I've run into a problem early on, when trying to access a pointer to the start of VGA video memory.

1#include &lt;stdio.h&gt;
2#include &lt;dos.h&gt;
3
4void Set_Video_Mode(int mode) {
5    
6    union REGS inregs, outregs;
7
8    inregs.h.ah = 0; 
9    inregs.h.al = (unsigned char) mode;
10
11    int86(0x10, &amp;inregs, &amp;outregs);
12}
13
14
15int main(void)
16{
17    Set_Video_Mode(0x13);
18
19    //the following line throws an error, without it the code compiles and runs
20    char far *video_buffer = (char far *)0xA0000000L;
21
22    while (!kbhit()) { };
23
24    Set_Video_Mode(0x03);
25
26    return 0;
27} 
28

It's the far pointer assignment that throws the following errors:

VGA.C(33): Error! E1077: Missing '}'
VGA.C(33): Warning! W107: Missing return value for function 'main'
VGA.C(36): Error! E1099: Statement must be inside function. Probable cause: missing {

Which is kind of baffling, and seems like a macro definition gone wrong, or something...

When I try the code from the Wikipedia article on far pointers, with the same compiler:

1#include &lt;stdio.h&gt;
2#include &lt;dos.h&gt;
3
4void Set_Video_Mode(int mode) {
5    
6    union REGS inregs, outregs;
7
8    inregs.h.ah = 0; 
9    inregs.h.al = (unsigned char) mode;
10
11    int86(0x10, &amp;inregs, &amp;outregs);
12}
13
14
15int main(void)
16{
17    Set_Video_Mode(0x13);
18
19    //the following line throws an error, without it the code compiles and runs
20    char far *video_buffer = (char far *)0xA0000000L;
21
22    while (!kbhit()) { };
23
24    Set_Video_Mode(0x03);
25
26    return 0;
27} 
28#include &lt;stdio.h&gt;
29int main() {
30    char far *p = (char far *)0x55550005;
31    char far *q = (char far *)0x53332225;
32    *p = 80;
33    (*p)++;
34    printf(&quot;%d&quot;, *q);
35    return 0;
36}
37

It compiles. The compile command is wcl -bcl=dos source.c in both cases.

So I'm kind of stumped now, and can't seem to pinpoint the problem. I'm on the verge of throwing a few asterisks and brackets at random places to see if it sticks somewhere...

ANSWER

Answered 2022-Apr-03 at 07:23

It appears your OpenWatcom C compiler is defaulting to using C89. In C89 variable declarations must be at the beginning of a block scope. In your case all your code and data is at function scope, so the variable has to be declared at the beginning of main before the code.

Moving the variable declaration this way should be C89 compatible:

1#include &lt;stdio.h&gt;
2#include &lt;dos.h&gt;
3
4void Set_Video_Mode(int mode) {
5    
6    union REGS inregs, outregs;
7
8    inregs.h.ah = 0; 
9    inregs.h.al = (unsigned char) mode;
10
11    int86(0x10, &amp;inregs, &amp;outregs);
12}
13
14
15int main(void)
16{
17    Set_Video_Mode(0x13);
18
19    //the following line throws an error, without it the code compiles and runs
20    char far *video_buffer = (char far *)0xA0000000L;
21
22    while (!kbhit()) { };
23
24    Set_Video_Mode(0x03);
25
26    return 0;
27} 
28#include &lt;stdio.h&gt;
29int main() {
30    char far *p = (char far *)0x55550005;
31    char far *q = (char far *)0x53332225;
32    *p = 80;
33    (*p)++;
34    printf(&quot;%d&quot;, *q);
35    return 0;
36}
37int main(void)
38{
39    char far *video_buffer = (char far *)0xA0000000L;
40
41    Set_Video_Mode(0x13);
42    while (!kbhit()) { };
43    Set_Video_Mode(0x03);
44
45    return 0;
46} 
47

If using OpenWatcom 2.0 as you suggest you are, you should be able to compile with C99 mode by adding the option -za99 to the wcl options. In C99 you can place variable declarations in places other than top of block scope.


When compiling as C89, Watcom extended C89 to allow C++ style comments the same way C99 supports it. This behaviour seem to be documented as:

The Open Watcom C/16 and C/32 compilers support an extension for comments. The symbol // can be used at any point in a physical source line (except inside a character constant or string literal). Any characters from the // to the end of the line are treated as comment characters. The comment is terminated by the end of the line.

I agree with the assessment that had the C++ style comments not been allowed, the compiler would have given a much better picture of what the real problem was. I too was fooled at first and it didn't occur to me right away that it was being compiled as C89 code. I had assumed since the // was accepted that it must have been C99.

Source https://stackoverflow.com/questions/71721368

QUESTION

Why is `np.sum(range(N))` very slow?

Asked 2022-Mar-29 at 14:31

I saw a video about speed of loops in python, where it was explained that doing sum(range(N)) is much faster than manually looping through range and adding the variables together, since the former runs in C due to built-in functions being used, while in the latter the summation is done in (slow) python. I was curious what happens when adding numpy to the mix. As I expected np.sum(np.arange(N)) is the fastest, but sum(np.arange(N)) and np.sum(range(N)) are even slower than doing the naive for loop.

Why is this?

Here's the script I used to test, some comments about the supposed cause of slowing done where I know (taken mostly from the video) and the results I got on my machine (python 3.10.0, numpy 1.21.2):

updated script:

1import numpy as np
2from timeit import timeit
3
4N = 10_000_000
5repetition = 10
6
7def sum0(N = N):
8    s = 0
9    i = 0
10    while i &lt; N: # condition is checked in python
11        s += i
12        i += 1 # both additions are done in python
13    return s
14
15def sum1(N = N):
16    s = 0
17    for i in range(N): # increment in C
18        s += i # addition in python
19    return s
20
21def sum2(N = N):
22    return sum(range(N)) # everything in C
23
24def sum3(N = N):
25    return sum(list(range(N)))
26
27def sum4(N = N):
28    return np.sum(range(N)) # very slow np.array conversion
29
30def sum5(N = N):
31    # much faster np.array conversion
32    return np.sum(np.fromiter(range(N),dtype = int))
33
34def sum5v2_(N = N):
35    # much faster np.array conversion
36    return np.sum(np.fromiter(range(N),dtype = np.int_))
37
38def sum6(N = N):
39    # possibly slow conversion to Py_long from np.int
40    return sum(np.arange(N))
41
42def sum7(N = N):
43    # list returns a list of np.int-s
44    return sum(list(np.arange(N)))
45
46def sum7v2(N = N):
47    # tolist conversion to python int seems faster than the implicit conversion
48    # in sum(list()) (tolist returns a list of python int-s)
49    return sum(np.arange(N).tolist())
50
51def sum8(N = N):
52    return np.sum(np.arange(N)) # everything in numpy (fortran libblas?)
53
54def sum9(N = N):
55    return np.arange(N).sum() # remove dispatch overhead
56
57def array_basic(N = N):
58    return np.array(range(N))
59
60def array_dtype(N = N):
61    return np.array(range(N),dtype = np.int_)
62
63def array_iter(N = N):
64    # np.sum's source code mentions to use fromiter to convert from generators
65    return np.fromiter(range(N),dtype = np.int_)
66
67print(f&quot;while loop:         {timeit(sum0, number = repetition)}&quot;)
68print(f&quot;for loop:           {timeit(sum1, number = repetition)}&quot;)
69print(f&quot;sum_range:          {timeit(sum2, number = repetition)}&quot;)
70print(f&quot;sum_rangelist:      {timeit(sum3, number = repetition)}&quot;)
71print(f&quot;npsum_range:        {timeit(sum4, number = repetition)}&quot;)
72print(f&quot;npsum_iterrange:    {timeit(sum5, number = repetition)}&quot;)
73print(f&quot;npsum_iterrangev2:  {timeit(sum5, number = repetition)}&quot;)
74print(f&quot;sum_arange:         {timeit(sum6, number = repetition)}&quot;)
75print(f&quot;sum_list_arange:    {timeit(sum7, number = repetition)}&quot;)
76print(f&quot;sum_arange_tolist:  {timeit(sum7v2, number = repetition)}&quot;)
77print(f&quot;npsum_arange:       {timeit(sum8, number = repetition)}&quot;)
78print(f&quot;nparangenpsum:      {timeit(sum9, number = repetition)}&quot;)
79print(f&quot;array_basic:        {timeit(array_basic, number = repetition)}&quot;)
80print(f&quot;array_dtype:        {timeit(array_dtype, number = repetition)}&quot;)
81print(f&quot;array_iter:         {timeit(array_iter,  number = repetition)}&quot;)
82
83print(f&quot;npsumarangeREP:     {timeit(lambda : sum8(N/1000), number = 100000*repetition)}&quot;)
84print(f&quot;npsumarangeREP:     {timeit(lambda : sum9(N/1000), number = 100000*repetition)}&quot;)
85
86# Example output:
87#
88# while loop:         11.493371912998555
89# for loop:           7.385945574002108
90# sum_range:          2.4605720699983067
91# sum_rangelist:      4.509678105998319
92# npsum_range:        11.85120212900074
93# npsum_iterrange:    4.464334709002287
94# npsum_iterrangev2:  4.498494338993623
95# sum_arange:         9.537815956995473
96# sum_list_arange:    13.290120724996086
97# sum_arange_tolist:  5.231948580003518
98# npsum_arange:       0.241889145996538
99# nparangenpsum:      0.21876695199898677
100# array_basic:        11.736577274998126
101# array_dtype:        8.71628468400013
102# array_iter:         4.303306431000237
103# npsumarangeREP:     21.240833958996518
104# npsumarangeREP:     16.690092379001726
105
106

ANSWER

Answered 2021-Oct-16 at 17:42

From the cpython source code for sum sum initially seems to attempt a fast path that assumes all inputs are the same type. If that fails it will just iterate:

1import numpy as np
2from timeit import timeit
3
4N = 10_000_000
5repetition = 10
6
7def sum0(N = N):
8    s = 0
9    i = 0
10    while i &lt; N: # condition is checked in python
11        s += i
12        i += 1 # both additions are done in python
13    return s
14
15def sum1(N = N):
16    s = 0
17    for i in range(N): # increment in C
18        s += i # addition in python
19    return s
20
21def sum2(N = N):
22    return sum(range(N)) # everything in C
23
24def sum3(N = N):
25    return sum(list(range(N)))
26
27def sum4(N = N):
28    return np.sum(range(N)) # very slow np.array conversion
29
30def sum5(N = N):
31    # much faster np.array conversion
32    return np.sum(np.fromiter(range(N),dtype = int))
33
34def sum5v2_(N = N):
35    # much faster np.array conversion
36    return np.sum(np.fromiter(range(N),dtype = np.int_))
37
38def sum6(N = N):
39    # possibly slow conversion to Py_long from np.int
40    return sum(np.arange(N))
41
42def sum7(N = N):
43    # list returns a list of np.int-s
44    return sum(list(np.arange(N)))
45
46def sum7v2(N = N):
47    # tolist conversion to python int seems faster than the implicit conversion
48    # in sum(list()) (tolist returns a list of python int-s)
49    return sum(np.arange(N).tolist())
50
51def sum8(N = N):
52    return np.sum(np.arange(N)) # everything in numpy (fortran libblas?)
53
54def sum9(N = N):
55    return np.arange(N).sum() # remove dispatch overhead
56
57def array_basic(N = N):
58    return np.array(range(N))
59
60def array_dtype(N = N):
61    return np.array(range(N),dtype = np.int_)
62
63def array_iter(N = N):
64    # np.sum's source code mentions to use fromiter to convert from generators
65    return np.fromiter(range(N),dtype = np.int_)
66
67print(f&quot;while loop:         {timeit(sum0, number = repetition)}&quot;)
68print(f&quot;for loop:           {timeit(sum1, number = repetition)}&quot;)
69print(f&quot;sum_range:          {timeit(sum2, number = repetition)}&quot;)
70print(f&quot;sum_rangelist:      {timeit(sum3, number = repetition)}&quot;)
71print(f&quot;npsum_range:        {timeit(sum4, number = repetition)}&quot;)
72print(f&quot;npsum_iterrange:    {timeit(sum5, number = repetition)}&quot;)
73print(f&quot;npsum_iterrangev2:  {timeit(sum5, number = repetition)}&quot;)
74print(f&quot;sum_arange:         {timeit(sum6, number = repetition)}&quot;)
75print(f&quot;sum_list_arange:    {timeit(sum7, number = repetition)}&quot;)
76print(f&quot;sum_arange_tolist:  {timeit(sum7v2, number = repetition)}&quot;)
77print(f&quot;npsum_arange:       {timeit(sum8, number = repetition)}&quot;)
78print(f&quot;nparangenpsum:      {timeit(sum9, number = repetition)}&quot;)
79print(f&quot;array_basic:        {timeit(array_basic, number = repetition)}&quot;)
80print(f&quot;array_dtype:        {timeit(array_dtype, number = repetition)}&quot;)
81print(f&quot;array_iter:         {timeit(array_iter,  number = repetition)}&quot;)
82
83print(f&quot;npsumarangeREP:     {timeit(lambda : sum8(N/1000), number = 100000*repetition)}&quot;)
84print(f&quot;npsumarangeREP:     {timeit(lambda : sum9(N/1000), number = 100000*repetition)}&quot;)
85
86# Example output:
87#
88# while loop:         11.493371912998555
89# for loop:           7.385945574002108
90# sum_range:          2.4605720699983067
91# sum_rangelist:      4.509678105998319
92# npsum_range:        11.85120212900074
93# npsum_iterrange:    4.464334709002287
94# npsum_iterrangev2:  4.498494338993623
95# sum_arange:         9.537815956995473
96# sum_list_arange:    13.290120724996086
97# sum_arange_tolist:  5.231948580003518
98# npsum_arange:       0.241889145996538
99# nparangenpsum:      0.21876695199898677
100# array_basic:        11.736577274998126
101# array_dtype:        8.71628468400013
102# array_iter:         4.303306431000237
103# npsumarangeREP:     21.240833958996518
104# npsumarangeREP:     16.690092379001726
105
106/* Fast addition by keeping temporary sums in C instead of new Python objects.
107   Assumes all inputs are the same type.  If the assumption fails, default
108   to the more general routine.
109*/
110

I'm not entirely certain what is happening under the hood, but it is likely the repeated creation/conversion of C types to Python objects that is causing these slow-downs. It's worth noting that both sum and range are implemented in C.


This next bit is not really an answer to the question, but I wondered if we could speed up sum for python ranges as range is quite a smart object.

To do this I've used functools.singledispatch to override the built-in sum function specifically for the range type; then implemented a small function to calculate the sum of an arithmetic progression.

1import numpy as np
2from timeit import timeit
3
4N = 10_000_000
5repetition = 10
6
7def sum0(N = N):
8    s = 0
9    i = 0
10    while i &lt; N: # condition is checked in python
11        s += i
12        i += 1 # both additions are done in python
13    return s
14
15def sum1(N = N):
16    s = 0
17    for i in range(N): # increment in C
18        s += i # addition in python
19    return s
20
21def sum2(N = N):
22    return sum(range(N)) # everything in C
23
24def sum3(N = N):
25    return sum(list(range(N)))
26
27def sum4(N = N):
28    return np.sum(range(N)) # very slow np.array conversion
29
30def sum5(N = N):
31    # much faster np.array conversion
32    return np.sum(np.fromiter(range(N),dtype = int))
33
34def sum5v2_(N = N):
35    # much faster np.array conversion
36    return np.sum(np.fromiter(range(N),dtype = np.int_))
37
38def sum6(N = N):
39    # possibly slow conversion to Py_long from np.int
40    return sum(np.arange(N))
41
42def sum7(N = N):
43    # list returns a list of np.int-s
44    return sum(list(np.arange(N)))
45
46def sum7v2(N = N):
47    # tolist conversion to python int seems faster than the implicit conversion
48    # in sum(list()) (tolist returns a list of python int-s)
49    return sum(np.arange(N).tolist())
50
51def sum8(N = N):
52    return np.sum(np.arange(N)) # everything in numpy (fortran libblas?)
53
54def sum9(N = N):
55    return np.arange(N).sum() # remove dispatch overhead
56
57def array_basic(N = N):
58    return np.array(range(N))
59
60def array_dtype(N = N):
61    return np.array(range(N),dtype = np.int_)
62
63def array_iter(N = N):
64    # np.sum's source code mentions to use fromiter to convert from generators
65    return np.fromiter(range(N),dtype = np.int_)
66
67print(f&quot;while loop:         {timeit(sum0, number = repetition)}&quot;)
68print(f&quot;for loop:           {timeit(sum1, number = repetition)}&quot;)
69print(f&quot;sum_range:          {timeit(sum2, number = repetition)}&quot;)
70print(f&quot;sum_rangelist:      {timeit(sum3, number = repetition)}&quot;)
71print(f&quot;npsum_range:        {timeit(sum4, number = repetition)}&quot;)
72print(f&quot;npsum_iterrange:    {timeit(sum5, number = repetition)}&quot;)
73print(f&quot;npsum_iterrangev2:  {timeit(sum5, number = repetition)}&quot;)
74print(f&quot;sum_arange:         {timeit(sum6, number = repetition)}&quot;)
75print(f&quot;sum_list_arange:    {timeit(sum7, number = repetition)}&quot;)
76print(f&quot;sum_arange_tolist:  {timeit(sum7v2, number = repetition)}&quot;)
77print(f&quot;npsum_arange:       {timeit(sum8, number = repetition)}&quot;)
78print(f&quot;nparangenpsum:      {timeit(sum9, number = repetition)}&quot;)
79print(f&quot;array_basic:        {timeit(array_basic, number = repetition)}&quot;)
80print(f&quot;array_dtype:        {timeit(array_dtype, number = repetition)}&quot;)
81print(f&quot;array_iter:         {timeit(array_iter,  number = repetition)}&quot;)
82
83print(f&quot;npsumarangeREP:     {timeit(lambda : sum8(N/1000), number = 100000*repetition)}&quot;)
84print(f&quot;npsumarangeREP:     {timeit(lambda : sum9(N/1000), number = 100000*repetition)}&quot;)
85
86# Example output:
87#
88# while loop:         11.493371912998555
89# for loop:           7.385945574002108
90# sum_range:          2.4605720699983067
91# sum_rangelist:      4.509678105998319
92# npsum_range:        11.85120212900074
93# npsum_iterrange:    4.464334709002287
94# npsum_iterrangev2:  4.498494338993623
95# sum_arange:         9.537815956995473
96# sum_list_arange:    13.290120724996086
97# sum_arange_tolist:  5.231948580003518
98# npsum_arange:       0.241889145996538
99# nparangenpsum:      0.21876695199898677
100# array_basic:        11.736577274998126
101# array_dtype:        8.71628468400013
102# array_iter:         4.303306431000237
103# npsumarangeREP:     21.240833958996518
104# npsumarangeREP:     16.690092379001726
105
106/* Fast addition by keeping temporary sums in C instead of new Python objects.
107   Assumes all inputs are the same type.  If the assumption fails, default
108   to the more general routine.
109*/
110from functools import singledispatch
111
112def sum_range(range_, /, start=0):
113    &quot;&quot;&quot;Overloaded `sum` for range, compute arithmetic sum&quot;&quot;&quot;
114    n = len(range_)
115    if not n:
116        return start
117    return int(start + (n * (range_[0] + range_[-1]) / 2))
118
119sum = singledispatch(sum)
120sum.register(range, sum_range)
121
122def test():
123    &quot;&quot;&quot;
124    &gt;&gt;&gt; sum(range(0, 100))
125    4950
126    &gt;&gt;&gt; sum(range(0, 10, 2))
127    20
128    &gt;&gt;&gt; sum(range(0, 9, 2))
129    20
130    &gt;&gt;&gt; sum(range(0, -10, -1))
131    -45
132    &gt;&gt;&gt; sum(range(-10, 10))
133    -10
134    &gt;&gt;&gt; sum(range(-1, -100, -2))
135    -2500
136    &gt;&gt;&gt; sum(range(0, 10, 100))
137    0
138    &gt;&gt;&gt; sum(range(0, 0))
139    0
140    &gt;&gt;&gt; sum(range(0, 100), 50)
141    5000
142    &gt;&gt;&gt; sum(range(0, 0), 10)
143    10
144    &quot;&quot;&quot;
145
146if __name__ == &quot;__main__&quot;:
147    import doctest
148    doctest.testmod()
149

I'm not sure if this is complete, but it's definitely faster than looping.

Source https://stackoverflow.com/questions/69584027

QUESTION

The unauthenticated git protocol on port 9418 is no longer supported

Asked 2022-Mar-27 at 13:23

I have been using github actions for quite sometime but today my deployments started failing. Below is the error from github action logs

1Command: git
2Arguments: ls-remote --tags --heads git://github.com/adobe-webplatform/eve.git
3Directory: /home/runner/work/stackstream-fe/stackstream-fe
4Output:
5fatal: remote error: 
6  The unauthenticated git protocol on port 9418 is no longer supported.
7

Upon investigation, it appears that below section in my yml file is causing the issue.

1Command: git
2Arguments: ls-remote --tags --heads git://github.com/adobe-webplatform/eve.git
3Directory: /home/runner/work/stackstream-fe/stackstream-fe
4Output:
5fatal: remote error: 
6  The unauthenticated git protocol on port 9418 is no longer supported.
7    - name: Installing modules
8      run: yarn install
9

I have looked into this change log but can't seem to comprehend the issue.

Additional Details: Server: EC2 Instance Github actions steps:

1Command: git
2Arguments: ls-remote --tags --heads git://github.com/adobe-webplatform/eve.git
3Directory: /home/runner/work/stackstream-fe/stackstream-fe
4Output:
5fatal: remote error: 
6  The unauthenticated git protocol on port 9418 is no longer supported.
7    - name: Installing modules
8      run: yarn install
9  steps:
10  - name: Checkout
11    uses: actions/checkout@v2
12
13  - id: vars
14    run: |
15      if [ '${{ github.ref }}' == 'refs/heads/master' ]; then echo &quot;::set-output name=environment::prod_stackstream&quot; ; echo &quot;::set-output name=api-url::api&quot; ; elif [ '${{ github.ref }}' == 'refs/heads/staging' ]; then echo &quot;::set-output name=environment::staging_stackstream&quot;  ; echo &quot;::set-output name=api-url::stagingapi&quot; ; else echo &quot;::set-output name=environment::dev_stackstream&quot; ; echo &quot;::set-output name=api-url::devapi&quot; ; fi
16
17  - uses: pCYSl5EDgo/cat@master
18    id: slack
19    with:
20      path: .github/workflows/slack.txt
21
22  - name: Slack Start Notification
23    uses: 8398a7/action-slack@v3
24    env:
25      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
26      ENVIRONMENT: '`${{ steps.vars.outputs.environment }}`'
27      COLOR: good
28      STATUS: '`Started`'
29    with:
30      status: custom
31      fields: workflow,job,commit,repo,ref,author,took
32      custom_payload: |
33        ${{ steps.slack.outputs.text }}
34
35  - name: Installing modules
36    env:
37      REACT_APP_API_URL: 'https://${{ steps.vars.outputs.api-url }}mergestack.com/api/v1'
38    run: yarn install
39
40  - name: Create Frontend Build
41    env:
42      REACT_APP_API_URL: 'https://${{ steps.vars.outputs.api-url }}mergestack.com/api/v1'
43    run: yarn build
44
45  - name: Deploy to Frontend Server DEV
46    if: ${{ contains(github.ref, 'dev') }}
47    uses: easingthemes/ssh-deploy@v2.1.5
48    env:
49      SSH_PRIVATE_KEY: ${{ secrets.DEV_KEY }}
50      ARGS: '-rltgoDzvO --delete'
51      SOURCE: 'deploy/'
52      REMOTE_HOST: ${{ secrets.DEV_HOST }}
53      REMOTE_USER: plyfolio-dev
54      TARGET: '/home/plyfolio-dev/${{ steps.vars.outputs.environment }}/fe/deploy'
55

package.json file

1Command: git
2Arguments: ls-remote --tags --heads git://github.com/adobe-webplatform/eve.git
3Directory: /home/runner/work/stackstream-fe/stackstream-fe
4Output:
5fatal: remote error: 
6  The unauthenticated git protocol on port 9418 is no longer supported.
7    - name: Installing modules
8      run: yarn install
9  steps:
10  - name: Checkout
11    uses: actions/checkout@v2
12
13  - id: vars
14    run: |
15      if [ '${{ github.ref }}' == 'refs/heads/master' ]; then echo &quot;::set-output name=environment::prod_stackstream&quot; ; echo &quot;::set-output name=api-url::api&quot; ; elif [ '${{ github.ref }}' == 'refs/heads/staging' ]; then echo &quot;::set-output name=environment::staging_stackstream&quot;  ; echo &quot;::set-output name=api-url::stagingapi&quot; ; else echo &quot;::set-output name=environment::dev_stackstream&quot; ; echo &quot;::set-output name=api-url::devapi&quot; ; fi
16
17  - uses: pCYSl5EDgo/cat@master
18    id: slack
19    with:
20      path: .github/workflows/slack.txt
21
22  - name: Slack Start Notification
23    uses: 8398a7/action-slack@v3
24    env:
25      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
26      ENVIRONMENT: '`${{ steps.vars.outputs.environment }}`'
27      COLOR: good
28      STATUS: '`Started`'
29    with:
30      status: custom
31      fields: workflow,job,commit,repo,ref,author,took
32      custom_payload: |
33        ${{ steps.slack.outputs.text }}
34
35  - name: Installing modules
36    env:
37      REACT_APP_API_URL: 'https://${{ steps.vars.outputs.api-url }}mergestack.com/api/v1'
38    run: yarn install
39
40  - name: Create Frontend Build
41    env:
42      REACT_APP_API_URL: 'https://${{ steps.vars.outputs.api-url }}mergestack.com/api/v1'
43    run: yarn build
44
45  - name: Deploy to Frontend Server DEV
46    if: ${{ contains(github.ref, 'dev') }}
47    uses: easingthemes/ssh-deploy@v2.1.5
48    env:
49      SSH_PRIVATE_KEY: ${{ secrets.DEV_KEY }}
50      ARGS: '-rltgoDzvO --delete'
51      SOURCE: 'deploy/'
52      REMOTE_HOST: ${{ secrets.DEV_HOST }}
53      REMOTE_USER: plyfolio-dev
54      TARGET: '/home/plyfolio-dev/${{ steps.vars.outputs.environment }}/fe/deploy'
55   {
56  &quot;name&quot;: &quot;stackstream-fe&quot;,
57  &quot;version&quot;: &quot;1.0.0&quot;,
58  &quot;authors&quot;: [
59    &quot;fayyaznofal@gmail.com&quot;
60  ],
61  &quot;private&quot;: true,
62  &quot;dependencies&quot;: {
63    &quot;@fortawesome/fontawesome-svg-core&quot;: &quot;^1.2.34&quot;,
64    &quot;@fortawesome/free-solid-svg-icons&quot;: &quot;^5.15.2&quot;,
65    &quot;@fortawesome/react-fontawesome&quot;: &quot;^0.1.14&quot;,
66    &quot;@fullcalendar/bootstrap&quot;: &quot;^5.5.0&quot;,
67    &quot;@fullcalendar/core&quot;: &quot;^5.5.0&quot;,
68    &quot;@fullcalendar/daygrid&quot;: &quot;^5.5.0&quot;,
69    &quot;@fullcalendar/interaction&quot;: &quot;^5.5.0&quot;,
70    &quot;@fullcalendar/react&quot;: &quot;^5.5.0&quot;,
71    &quot;@lourenci/react-kanban&quot;: &quot;^2.1.0&quot;,
72    &quot;@redux-saga/simple-saga-monitor&quot;: &quot;^1.1.2&quot;,
73    &quot;@testing-library/jest-dom&quot;: &quot;^5.11.9&quot;,
74    &quot;@testing-library/react&quot;: &quot;^11.2.3&quot;,
75    &quot;@testing-library/user-event&quot;: &quot;^12.6.0&quot;,
76    &quot;@toast-ui/react-chart&quot;: &quot;^1.0.2&quot;,
77    &quot;@types/jest&quot;: &quot;^26.0.14&quot;,
78    &quot;@types/node&quot;: &quot;^14.10.3&quot;,
79    &quot;@types/react&quot;: &quot;^16.9.49&quot;,
80    &quot;@types/react-dom&quot;: &quot;^16.9.8&quot;,
81    &quot;@vtaits/react-color-picker&quot;: &quot;^0.1.1&quot;,
82    &quot;apexcharts&quot;: &quot;^3.23.1&quot;,
83    &quot;availity-reactstrap-validation&quot;: &quot;^2.7.0&quot;,
84    &quot;axios&quot;: &quot;^0.21.1&quot;,
85    &quot;axios-mock-adapter&quot;: &quot;^1.19.0&quot;,
86    &quot;axios-progress-bar&quot;: &quot;^1.2.0&quot;,
87    &quot;bootstrap&quot;: &quot;^5.0.0-beta2&quot;,
88    &quot;chart.js&quot;: &quot;^2.9.4&quot;,
89    &quot;chartist&quot;: &quot;^0.11.4&quot;,
90    &quot;classnames&quot;: &quot;^2.2.6&quot;,
91    &quot;components&quot;: &quot;^0.1.0&quot;,
92    &quot;dotenv&quot;: &quot;^8.2.0&quot;,
93    &quot;draft-js&quot;: &quot;^0.11.7&quot;,
94    &quot;echarts&quot;: &quot;^4.9.0&quot;,
95    &quot;echarts-for-react&quot;: &quot;^2.0.16&quot;,
96    &quot;firebase&quot;: &quot;^8.2.3&quot;,
97    &quot;google-maps-react&quot;: &quot;^2.0.6&quot;,
98    &quot;history&quot;: &quot;^4.10.1&quot;,
99    &quot;i&quot;: &quot;^0.3.6&quot;,
100    &quot;i18next&quot;: &quot;^19.8.4&quot;,
101    &quot;i18next-browser-languagedetector&quot;: &quot;^6.0.1&quot;,
102    &quot;jsonwebtoken&quot;: &quot;^8.5.1&quot;,
103    &quot;leaflet&quot;: &quot;^1.7.1&quot;,
104    &quot;lodash&quot;: &quot;^4.17.21&quot;,
105    &quot;lodash.clonedeep&quot;: &quot;^4.5.0&quot;,
106    &quot;lodash.get&quot;: &quot;^4.4.2&quot;,
107    &quot;metismenujs&quot;: &quot;^1.2.1&quot;,
108    &quot;mkdirp&quot;: &quot;^1.0.4&quot;,
109    &quot;moment&quot;: &quot;2.29.1&quot;,
110    &quot;moment-timezone&quot;: &quot;^0.5.32&quot;,
111    &quot;nouislider-react&quot;: &quot;^3.3.9&quot;,
112    &quot;npm&quot;: &quot;^7.6.3&quot;,
113    &quot;prop-types&quot;: &quot;^15.7.2&quot;,
114    &quot;query-string&quot;: &quot;^6.14.0&quot;,
115    &quot;react&quot;: &quot;^16.13.1&quot;,
116    &quot;react-apexcharts&quot;: &quot;^1.3.7&quot;,
117    &quot;react-auth-code-input&quot;: &quot;^1.0.0&quot;,
118    &quot;react-avatar&quot;: &quot;^3.10.0&quot;,
119    &quot;react-bootstrap&quot;: &quot;^1.5.0&quot;,
120    &quot;react-bootstrap-editable&quot;: &quot;^0.8.2&quot;,
121    &quot;react-bootstrap-sweetalert&quot;: &quot;^5.2.0&quot;,
122    &quot;react-bootstrap-table-next&quot;: &quot;^4.0.3&quot;,
123    &quot;react-bootstrap-table2-editor&quot;: &quot;^1.4.0&quot;,
124    &quot;react-bootstrap-table2-paginator&quot;: &quot;^2.1.2&quot;,
125    &quot;react-bootstrap-table2-toolkit&quot;: &quot;^2.1.3&quot;,
126    &quot;react-chartist&quot;: &quot;^0.14.3&quot;,
127    &quot;react-chartjs-2&quot;: &quot;^2.11.1&quot;,
128    &quot;react-color&quot;: &quot;^2.19.3&quot;,
129    &quot;react-confirm-alert&quot;: &quot;^2.7.0&quot;,
130    &quot;react-content-loader&quot;: &quot;^6.0.1&quot;,
131    &quot;react-countdown&quot;: &quot;^2.3.1&quot;,
132    &quot;react-countup&quot;: &quot;^4.3.3&quot;,
133    &quot;react-cropper&quot;: &quot;^2.1.4&quot;,
134    &quot;react-data-table-component&quot;: &quot;^6.11.8&quot;,
135    &quot;react-date-picker&quot;: &quot;^8.0.6&quot;,
136    &quot;react-datepicker&quot;: &quot;^3.4.1&quot;,
137    &quot;react-dom&quot;: &quot;^16.13.1&quot;,
138    &quot;react-draft-wysiwyg&quot;: &quot;^1.14.5&quot;,
139    &quot;react-drag-listview&quot;: &quot;^0.1.8&quot;,
140    &quot;react-drawer&quot;: &quot;^1.3.4&quot;,
141    &quot;react-dropzone&quot;: &quot;^11.2.4&quot;,
142    &quot;react-dual-listbox&quot;: &quot;^2.0.0&quot;,
143    &quot;react-facebook-login&quot;: &quot;^4.1.1&quot;,
144    &quot;react-flatpickr&quot;: &quot;^3.10.6&quot;,
145    &quot;react-google-login&quot;: &quot;^5.2.2&quot;,
146    &quot;react-hook-form&quot;: &quot;^7.15.2&quot;,
147    &quot;react-i18next&quot;: &quot;^11.8.5&quot;,
148    &quot;react-icons&quot;: &quot;^4.2.0&quot;,
149    &quot;react-image-lightbox&quot;: &quot;^5.1.1&quot;,
150    &quot;react-input-mask&quot;: &quot;^2.0.4&quot;,
151    &quot;react-jvectormap&quot;: &quot;^0.0.16&quot;,
152    &quot;react-leaflet&quot;: &quot;^3.0.5&quot;,
153    &quot;react-meta-tags&quot;: &quot;^1.0.1&quot;,
154    &quot;react-modal-video&quot;: &quot;^1.2.6&quot;,
155    &quot;react-notifications&quot;: &quot;^1.7.2&quot;,
156    &quot;react-number-format&quot;: &quot;^4.7.3&quot;,
157    &quot;react-perfect-scrollbar&quot;: &quot;^1.5.8&quot;,
158    &quot;react-rangeslider&quot;: &quot;^2.2.0&quot;,
159    &quot;react-rating&quot;: &quot;^2.0.5&quot;,
160    &quot;react-rating-tooltip&quot;: &quot;^1.1.6&quot;,
161    &quot;react-redux&quot;: &quot;^7.2.1&quot;,
162    &quot;react-responsive-carousel&quot;: &quot;^3.2.11&quot;,
163    &quot;react-router-dom&quot;: &quot;^5.2.0&quot;,
164    &quot;react-script&quot;: &quot;^2.0.5&quot;,
165    &quot;react-scripts&quot;: &quot;3.4.3&quot;,
166    &quot;react-select&quot;: &quot;^4.3.1&quot;,
167    &quot;react-sparklines&quot;: &quot;^1.7.0&quot;,
168    &quot;react-star-ratings&quot;: &quot;^2.3.0&quot;,
169    &quot;react-super-responsive-table&quot;: &quot;^5.2.0&quot;,
170    &quot;react-switch&quot;: &quot;^6.0.0&quot;,
171    &quot;react-table&quot;: &quot;^7.6.3&quot;,
172    &quot;react-toastify&quot;: &quot;^7.0.3&quot;,
173    &quot;react-toastr&quot;: &quot;^3.0.0&quot;,
174    &quot;react-twitter-auth&quot;: &quot;0.0.13&quot;,
175    &quot;reactstrap&quot;: &quot;^8.8.1&quot;,
176    &quot;recharts&quot;: &quot;^2.0.8&quot;,
177    &quot;redux&quot;: &quot;^4.0.5&quot;,
178    &quot;redux-saga&quot;: &quot;^1.1.3&quot;,
179    &quot;reselect&quot;: &quot;^4.0.0&quot;,
180    &quot;sass&quot;: &quot;^1.37.5&quot;,
181    &quot;simplebar-react&quot;: &quot;^2.3.0&quot;,
182    &quot;styled&quot;: &quot;^1.0.0&quot;,
183    &quot;styled-components&quot;: &quot;^5.2.1&quot;,
184    &quot;toastr&quot;: &quot;^2.1.4&quot;,
185    &quot;typescript&quot;: &quot;^4.0.2&quot;,
186    &quot;universal-cookie&quot;: &quot;^4.0.4&quot;
187  },
188  &quot;devDependencies&quot;: {
189    &quot;@typescript-eslint/eslint-plugin&quot;: &quot;^2.27.0&quot;,
190    &quot;@typescript-eslint/parser&quot;: &quot;^2.27.0&quot;,
191    &quot;@typescript-eslint/typescript-estree&quot;: &quot;^4.15.2&quot;,
192    &quot;eslint-config-prettier&quot;: &quot;^6.10.1&quot;,
193    &quot;eslint-plugin-prettier&quot;: &quot;^3.1.2&quot;,
194    &quot;husky&quot;: &quot;^4.2.5&quot;,
195    &quot;lint-staged&quot;: &quot;^10.1.3&quot;,
196    &quot;prettier&quot;: &quot;^1.19.1&quot;,
197    &quot;react-test-renderer&quot;: &quot;^16.13.1&quot;,
198    &quot;redux-devtools-extension&quot;: &quot;^2.13.8&quot;,
199    &quot;redux-mock-store&quot;: &quot;^1.5.4&quot;
200  },
201  &quot;scripts&quot;: {
202    &quot;start&quot;: &quot;react-scripts start&quot;,
203    &quot;build&quot;: &quot;react-scripts build &amp;&amp; mv build ./deploy/build&quot;,
204    &quot;build-local&quot;: &quot;react-scripts build&quot;,
205    &quot;test&quot;: &quot;react-scripts test&quot;,
206    &quot;eject&quot;: &quot;react-scripts eject&quot;
207  },
208  &quot;eslintConfig&quot;: {
209    &quot;extends&quot;: &quot;react-app&quot;
210  },
211  &quot;husky&quot;: {
212    &quot;hooks&quot;: {
213      &quot;pre-commit&quot;: &quot;lint-staged&quot;
214    }
215  },
216  &quot;lint-staged&quot;: {
217    &quot;*.{js,ts,tsx}&quot;: [
218      &quot;eslint --fix&quot;
219    ]
220  },
221  &quot;browserslist&quot;: {
222    &quot;production&quot;: [
223      &quot;&gt;0.2%&quot;,
224      &quot;not dead&quot;,
225      &quot;not op_mini all&quot;
226    ],
227    &quot;development&quot;: [
228      &quot;last 1 chrome version&quot;,
229      &quot;last 1 firefox version&quot;,
230      &quot;last 1 safari version&quot;
231    ]
232  }
233}
234

ANSWER

Answered 2022-Mar-16 at 07:01

First, this error message is indeed expected on Jan. 11th, 2022.
See "Improving Git protocol security on GitHub".

January 11, 2022 Final brownout.

This is the full brownout period where we’ll temporarily stop accepting the deprecated key and signature types, ciphers, and MACs, and the unencrypted Git protocol.
This will help clients discover any lingering use of older keys or old URLs.

Second, check your package.json dependencies for any git:// URL, as in this example, fixed in this PR.

As noted by Jörg W Mittag:

There was a 4-month warning.
The entire Internet has been moving away from unauthenticated, unencrypted protocols for a decade, it's not like this is a huge surprise.

Personally, I consider it less an "issue" and more "detecting unmaintained dependencies".

Plus, this is still only the brownout period, so the protocol will only be disabled for a short period of time, allowing developers to discover the problem.

The permanent shutdown is not until March 15th.


For GitHub Actions:

As in actions/checkout issue 14, you can add as a first step:

1Command: git
2Arguments: ls-remote --tags --heads git://github.com/adobe-webplatform/eve.git
3Directory: /home/runner/work/stackstream-fe/stackstream-fe
4Output:
5fatal: remote error: 
6  The unauthenticated git protocol on port 9418 is no longer supported.
7    - name: Installing modules
8      run: yarn install
9  steps:
10  - name: Checkout
11    uses: actions/checkout@v2
12
13  - id: vars
14    run: |
15      if [ '${{ github.ref }}' == 'refs/heads/master' ]; then echo &quot;::set-output name=environment::prod_stackstream&quot; ; echo &quot;::set-output name=api-url::api&quot; ; elif [ '${{ github.ref }}' == 'refs/heads/staging' ]; then echo &quot;::set-output name=environment::staging_stackstream&quot;  ; echo &quot;::set-output name=api-url::stagingapi&quot; ; else echo &quot;::set-output name=environment::dev_stackstream&quot; ; echo &quot;::set-output name=api-url::devapi&quot; ; fi
16
17  - uses: pCYSl5EDgo/cat@master
18    id: slack
19    with:
20      path: .github/workflows/slack.txt
21
22  - name: Slack Start Notification
23    uses: 8398a7/action-slack@v3
24    env:
25      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
26      ENVIRONMENT: '`${{ steps.vars.outputs.environment }}`'
27      COLOR: good
28      STATUS: '`Started`'
29    with:
30      status: custom
31      fields: workflow,job,commit,repo,ref,author,took
32      custom_payload: |
33        ${{ steps.slack.outputs.text }}
34
35  - name: Installing modules
36    env:
37      REACT_APP_API_URL: 'https://${{ steps.vars.outputs.api-url }}mergestack.com/api/v1'
38    run: yarn install
39
40  - name: Create Frontend Build
41    env:
42      REACT_APP_API_URL: 'https://${{ steps.vars.outputs.api-url }}mergestack.com/api/v1'
43    run: yarn build
44
45  - name: Deploy to Frontend Server DEV
46    if: ${{ contains(github.ref, 'dev') }}
47    uses: easingthemes/ssh-deploy@v2.1.5
48    env:
49      SSH_PRIVATE_KEY: ${{ secrets.DEV_KEY }}
50      ARGS: '-rltgoDzvO --delete'
51      SOURCE: 'deploy/'
52      REMOTE_HOST: ${{ secrets.DEV_HOST }}
53      REMOTE_USER: plyfolio-dev
54      TARGET: '/home/plyfolio-dev/${{ steps.vars.outputs.environment }}/fe/deploy'
55   {
56  &quot;name&quot;: &quot;stackstream-fe&quot;,
57  &quot;version&quot;: &quot;1.0.0&quot;,
58  &quot;authors&quot;: [
59    &quot;fayyaznofal@gmail.com&quot;
60  ],
61  &quot;private&quot;: true,
62  &quot;dependencies&quot;: {
63    &quot;@fortawesome/fontawesome-svg-core&quot;: &quot;^1.2.34&quot;,
64    &quot;@fortawesome/free-solid-svg-icons&quot;: &quot;^5.15.2&quot;,
65    &quot;@fortawesome/react-fontawesome&quot;: &quot;^0.1.14&quot;,
66    &quot;@fullcalendar/bootstrap&quot;: &quot;^5.5.0&quot;,
67    &quot;@fullcalendar/core&quot;: &quot;^5.5.0&quot;,
68    &quot;@fullcalendar/daygrid&quot;: &quot;^5.5.0&quot;,
69    &quot;@fullcalendar/interaction&quot;: &quot;^5.5.0&quot;,
70    &quot;@fullcalendar/react&quot;: &quot;^5.5.0&quot;,
71    &quot;@lourenci/react-kanban&quot;: &quot;^2.1.0&quot;,
72    &quot;@redux-saga/simple-saga-monitor&quot;: &quot;^1.1.2&quot;,
73    &quot;@testing-library/jest-dom&quot;: &quot;^5.11.9&quot;,
74    &quot;@testing-library/react&quot;: &quot;^11.2.3&quot;,
75    &quot;@testing-library/user-event&quot;: &quot;^12.6.0&quot;,
76    &quot;@toast-ui/react-chart&quot;: &quot;^1.0.2&quot;,
77    &quot;@types/jest&quot;: &quot;^26.0.14&quot;,
78    &quot;@types/node&quot;: &quot;^14.10.3&quot;,
79    &quot;@types/react&quot;: &quot;^16.9.49&quot;,
80    &quot;@types/react-dom&quot;: &quot;^16.9.8&quot;,
81    &quot;@vtaits/react-color-picker&quot;: &quot;^0.1.1&quot;,
82    &quot;apexcharts&quot;: &quot;^3.23.1&quot;,
83    &quot;availity-reactstrap-validation&quot;: &quot;^2.7.0&quot;,
84    &quot;axios&quot;: &quot;^0.21.1&quot;,
85    &quot;axios-mock-adapter&quot;: &quot;^1.19.0&quot;,
86    &quot;axios-progress-bar&quot;: &quot;^1.2.0&quot;,
87    &quot;bootstrap&quot;: &quot;^5.0.0-beta2&quot;,
88    &quot;chart.js&quot;: &quot;^2.9.4&quot;,
89    &quot;chartist&quot;: &quot;^0.11.4&quot;,
90    &quot;classnames&quot;: &quot;^2.2.6&quot;,
91    &quot;components&quot;: &quot;^0.1.0&quot;,
92    &quot;dotenv&quot;: &quot;^8.2.0&quot;,
93    &quot;draft-js&quot;: &quot;^0.11.7&quot;,
94    &quot;echarts&quot;: &quot;^4.9.0&quot;,
95    &quot;echarts-for-react&quot;: &quot;^2.0.16&quot;,
96    &quot;firebase&quot;: &quot;^8.2.3&quot;,
97    &quot;google-maps-react&quot;: &quot;^2.0.6&quot;,
98    &quot;history&quot;: &quot;^4.10.1&quot;,
99    &quot;i&quot;: &quot;^0.3.6&quot;,
100    &quot;i18next&quot;: &quot;^19.8.4&quot;,
101    &quot;i18next-browser-languagedetector&quot;: &quot;^6.0.1&quot;,
102    &quot;jsonwebtoken&quot;: &quot;^8.5.1&quot;,
103    &quot;leaflet&quot;: &quot;^1.7.1&quot;,
104    &quot;lodash&quot;: &quot;^4.17.21&quot;,
105    &quot;lodash.clonedeep&quot;: &quot;^4.5.0&quot;,
106    &quot;lodash.get&quot;: &quot;^4.4.2&quot;,
107    &quot;metismenujs&quot;: &quot;^1.2.1&quot;,
108    &quot;mkdirp&quot;: &quot;^1.0.4&quot;,
109    &quot;moment&quot;: &quot;2.29.1&quot;,
110    &quot;moment-timezone&quot;: &quot;^0.5.32&quot;,
111    &quot;nouislider-react&quot;: &quot;^3.3.9&quot;,
112    &quot;npm&quot;: &quot;^7.6.3&quot;,
113    &quot;prop-types&quot;: &quot;^15.7.2&quot;,
114    &quot;query-string&quot;: &quot;^6.14.0&quot;,
115    &quot;react&quot;: &quot;^16.13.1&quot;,
116    &quot;react-apexcharts&quot;: &quot;^1.3.7&quot;,
117    &quot;react-auth-code-input&quot;: &quot;^1.0.0&quot;,
118    &quot;react-avatar&quot;: &quot;^3.10.0&quot;,
119    &quot;react-bootstrap&quot;: &quot;^1.5.0&quot;,
120    &quot;react-bootstrap-editable&quot;: &quot;^0.8.2&quot;,
121    &quot;react-bootstrap-sweetalert&quot;: &quot;^5.2.0&quot;,
122    &quot;react-bootstrap-table-next&quot;: &quot;^4.0.3&quot;,
123    &quot;react-bootstrap-table2-editor&quot;: &quot;^1.4.0&quot;,
124    &quot;react-bootstrap-table2-paginator&quot;: &quot;^2.1.2&quot;,
125    &quot;react-bootstrap-table2-toolkit&quot;: &quot;^2.1.3&quot;,
126    &quot;react-chartist&quot;: &quot;^0.14.3&quot;,
127    &quot;react-chartjs-2&quot;: &quot;^2.11.1&quot;,
128    &quot;react-color&quot;: &quot;^2.19.3&quot;,
129    &quot;react-confirm-alert&quot;: &quot;^2.7.0&quot;,
130    &quot;react-content-loader&quot;: &quot;^6.0.1&quot;,
131    &quot;react-countdown&quot;: &quot;^2.3.1&quot;,
132    &quot;react-countup&quot;: &quot;^4.3.3&quot;,
133    &quot;react-cropper&quot;: &quot;^2.1.4&quot;,
134    &quot;react-data-table-component&quot;: &quot;^6.11.8&quot;,
135    &quot;react-date-picker&quot;: &quot;^8.0.6&quot;,
136    &quot;react-datepicker&quot;: &quot;^3.4.1&quot;,
137    &quot;react-dom&quot;: &quot;^16.13.1&quot;,
138    &quot;react-draft-wysiwyg&quot;: &quot;^1.14.5&quot;,
139    &quot;react-drag-listview&quot;: &quot;^0.1.8&quot;,
140    &quot;react-drawer&quot;: &quot;^1.3.4&quot;,
141    &quot;react-dropzone&quot;: &quot;^11.2.4&quot;,
142    &quot;react-dual-listbox&quot;: &quot;^2.0.0&quot;,
143    &quot;react-facebook-login&quot;: &quot;^4.1.1&quot;,
144    &quot;react-flatpickr&quot;: &quot;^3.10.6&quot;,
145    &quot;react-google-login&quot;: &quot;^5.2.2&quot;,
146    &quot;react-hook-form&quot;: &quot;^7.15.2&quot;,
147    &quot;react-i18next&quot;: &quot;^11.8.5&quot;,
148    &quot;react-icons&quot;: &quot;^4.2.0&quot;,
149    &quot;react-image-lightbox&quot;: &quot;^5.1.1&quot;,
150    &quot;react-input-mask&quot;: &quot;^2.0.4&quot;,
151    &quot;react-jvectormap&quot;: &quot;^0.0.16&quot;,
152    &quot;react-leaflet&quot;: &quot;^3.0.5&quot;,
153    &quot;react-meta-tags&quot;: &quot;^1.0.1&quot;,
154    &quot;react-modal-video&quot;: &quot;^1.2.6&quot;,
155    &quot;react-notifications&quot;: &quot;^1.7.2&quot;,
156    &quot;react-number-format&quot;: &quot;^4.7.3&quot;,
157    &quot;react-perfect-scrollbar&quot;: &quot;^1.5.8&quot;,
158    &quot;react-rangeslider&quot;: &quot;^2.2.0&quot;,
159    &quot;react-rating&quot;: &quot;^2.0.5&quot;,
160    &quot;react-rating-tooltip&quot;: &quot;^1.1.6&quot;,
161    &quot;react-redux&quot;: &quot;^7.2.1&quot;,
162    &quot;react-responsive-carousel&quot;: &quot;^3.2.11&quot;,
163    &quot;react-router-dom&quot;: &quot;^5.2.0&quot;,
164    &quot;react-script&quot;: &quot;^2.0.5&quot;,
165    &quot;react-scripts&quot;: &quot;3.4.3&quot;,
166    &quot;react-select&quot;: &quot;^4.3.1&quot;,
167    &quot;react-sparklines&quot;: &quot;^1.7.0&quot;,
168    &quot;react-star-ratings&quot;: &quot;^2.3.0&quot;,
169    &quot;react-super-responsive-table&quot;: &quot;^5.2.0&quot;,
170    &quot;react-switch&quot;: &quot;^6.0.0&quot;,
171    &quot;react-table&quot;: &quot;^7.6.3&quot;,
172    &quot;react-toastify&quot;: &quot;^7.0.3&quot;,
173    &quot;react-toastr&quot;: &quot;^3.0.0&quot;,
174    &quot;react-twitter-auth&quot;: &quot;0.0.13&quot;,
175    &quot;reactstrap&quot;: &quot;^8.8.1&quot;,
176    &quot;recharts&quot;: &quot;^2.0.8&quot;,
177    &quot;redux&quot;: &quot;^4.0.5&quot;,
178    &quot;redux-saga&quot;: &quot;^1.1.3&quot;,
179    &quot;reselect&quot;: &quot;^4.0.0&quot;,
180    &quot;sass&quot;: &quot;^1.37.5&quot;,
181    &quot;simplebar-react&quot;: &quot;^2.3.0&quot;,
182    &quot;styled&quot;: &quot;^1.0.0&quot;,
183    &quot;styled-components&quot;: &quot;^5.2.1&quot;,
184    &quot;toastr&quot;: &quot;^2.1.4&quot;,
185    &quot;typescript&quot;: &quot;^4.0.2&quot;,
186    &quot;universal-cookie&quot;: &quot;^4.0.4&quot;
187  },
188  &quot;devDependencies&quot;: {
189    &quot;@typescript-eslint/eslint-plugin&quot;: &quot;^2.27.0&quot;,
190    &quot;@typescript-eslint/parser&quot;: &quot;^2.27.0&quot;,
191    &quot;@typescript-eslint/typescript-estree&quot;: &quot;^4.15.2&quot;,
192    &quot;eslint-config-prettier&quot;: &quot;^6.10.1&quot;,
193    &quot;eslint-plugin-prettier&quot;: &quot;^3.1.2&quot;,
194    &quot;husky&quot;: &quot;^4.2.5&quot;,
195    &quot;lint-staged&quot;: &quot;^10.1.3&quot;,
196    &quot;prettier&quot;: &quot;^1.19.1&quot;,
197    &quot;react-test-renderer&quot;: &quot;^16.13.1&quot;,
198    &quot;redux-devtools-extension&quot;: &quot;^2.13.8&quot;,
199    &quot;redux-mock-store&quot;: &quot;^1.5.4&quot;
200  },
201  &quot;scripts&quot;: {
202    &quot;start&quot;: &quot;react-scripts start&quot;,
203    &quot;build&quot;: &quot;react-scripts build &amp;&amp; mv build ./deploy/build&quot;,
204    &quot;build-local&quot;: &quot;react-scripts build&quot;,
205    &quot;test&quot;: &quot;react-scripts test&quot;,
206    &quot;eject&quot;: &quot;react-scripts eject&quot;
207  },
208  &quot;eslintConfig&quot;: {
209    &quot;extends&quot;: &quot;react-app&quot;
210  },
211  &quot;husky&quot;: {
212    &quot;hooks&quot;: {
213      &quot;pre-commit&quot;: &quot;lint-staged&quot;
214    }
215  },
216  &quot;lint-staged&quot;: {
217    &quot;*.{js,ts,tsx}&quot;: [
218      &quot;eslint --fix&quot;
219    ]
220  },
221  &quot;browserslist&quot;: {
222    &quot;production&quot;: [
223      &quot;&gt;0.2%&quot;,
224      &quot;not dead&quot;,
225      &quot;not op_mini all&quot;
226    ],
227    &quot;development&quot;: [
228      &quot;last 1 chrome version&quot;,
229      &quot;last 1 firefox version&quot;,
230      &quot;last 1 safari version&quot;
231    ]
232  }
233}
234    - name: Fix up git URLs
235      run: echo -e '[url &quot;https://github.com/&quot;]\n  insteadOf = &quot;git://github.com/&quot;' &gt;&gt; ~/.gitconfig
236

That will change any git://github.com/ into https://github.com/.

For local projects

For all your repositories, you can set:

1Command: git
2Arguments: ls-remote --tags --heads git://github.com/adobe-webplatform/eve.git
3Directory: /home/runner/work/stackstream-fe/stackstream-fe
4Output:
5fatal: remote error: 
6  The unauthenticated git protocol on port 9418 is no longer supported.
7    - name: Installing modules
8      run: yarn install
9  steps:
10  - name: Checkout
11    uses: actions/checkout@v2
12
13  - id: vars
14    run: |
15      if [ '${{ github.ref }}' == 'refs/heads/master' ]; then echo &quot;::set-output name=environment::prod_stackstream&quot; ; echo &quot;::set-output name=api-url::api&quot; ; elif [ '${{ github.ref }}' == 'refs/heads/staging' ]; then echo &quot;::set-output name=environment::staging_stackstream&quot;  ; echo &quot;::set-output name=api-url::stagingapi&quot; ; else echo &quot;::set-output name=environment::dev_stackstream&quot; ; echo &quot;::set-output name=api-url::devapi&quot; ; fi
16
17  - uses: pCYSl5EDgo/cat@master
18    id: slack
19    with:
20      path: .github/workflows/slack.txt
21
22  - name: Slack Start Notification
23    uses: 8398a7/action-slack@v3
24    env:
25      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
26      ENVIRONMENT: '`${{ steps.vars.outputs.environment }}`'
27      COLOR: good
28      STATUS: '`Started`'
29    with:
30      status: custom
31      fields: workflow,job,commit,repo,ref,author,took
32      custom_payload: |
33        ${{ steps.slack.outputs.text }}
34
35  - name: Installing modules
36    env:
37      REACT_APP_API_URL: 'https://${{ steps.vars.outputs.api-url }}mergestack.com/api/v1'
38    run: yarn install
39
40  - name: Create Frontend Build
41    env:
42      REACT_APP_API_URL: 'https://${{ steps.vars.outputs.api-url }}mergestack.com/api/v1'
43    run: yarn build
44
45  - name: Deploy to Frontend Server DEV
46    if: ${{ contains(github.ref, 'dev') }}
47    uses: easingthemes/ssh-deploy@v2.1.5
48    env:
49      SSH_PRIVATE_KEY: ${{ secrets.DEV_KEY }}
50      ARGS: '-rltgoDzvO --delete'
51      SOURCE: 'deploy/'
52      REMOTE_HOST: ${{ secrets.DEV_HOST }}
53      REMOTE_USER: plyfolio-dev
54      TARGET: '/home/plyfolio-dev/${{ steps.vars.outputs.environment }}/fe/deploy'
55   {
56  &quot;name&quot;: &quot;stackstream-fe&quot;,
57  &quot;version&quot;: &quot;1.0.0&quot;,
58  &quot;authors&quot;: [
59    &quot;fayyaznofal@gmail.com&quot;
60  ],
61  &quot;private&quot;: true,
62  &quot;dependencies&quot;: {
63    &quot;@fortawesome/fontawesome-svg-core&quot;: &quot;^1.2.34&quot;,
64    &quot;@fortawesome/free-solid-svg-icons&quot;: &quot;^5.15.2&quot;,
65    &quot;@fortawesome/react-fontawesome&quot;: &quot;^0.1.14&quot;,
66    &quot;@fullcalendar/bootstrap&quot;: &quot;^5.5.0&quot;,
67    &quot;@fullcalendar/core&quot;: &quot;^5.5.0&quot;,
68    &quot;@fullcalendar/daygrid&quot;: &quot;^5.5.0&quot;,
69    &quot;@fullcalendar/interaction&quot;: &quot;^5.5.0&quot;,
70    &quot;@fullcalendar/react&quot;: &quot;^5.5.0&quot;,
71    &quot;@lourenci/react-kanban&quot;: &quot;^2.1.0&quot;,
72    &quot;@redux-saga/simple-saga-monitor&quot;: &quot;^1.1.2&quot;,
73    &quot;@testing-library/jest-dom&quot;: &quot;^5.11.9&quot;,
74    &quot;@testing-library/react&quot;: &quot;^11.2.3&quot;,
75    &quot;@testing-library/user-event&quot;: &quot;^12.6.0&quot;,
76    &quot;@toast-ui/react-chart&quot;: &quot;^1.0.2&quot;,
77    &quot;@types/jest&quot;: &quot;^26.0.14&quot;,
78    &quot;@types/node&quot;: &quot;^14.10.3&quot;,
79    &quot;@types/react&quot;: &quot;^16.9.49&quot;,
80    &quot;@types/react-dom&quot;: &quot;^16.9.8&quot;,
81    &quot;@vtaits/react-color-picker&quot;: &quot;^0.1.1&quot;,
82    &quot;apexcharts&quot;: &quot;^3.23.1&quot;,
83    &quot;availity-reactstrap-validation&quot;: &quot;^2.7.0&quot;,
84    &quot;axios&quot;: &quot;^0.21.1&quot;,
85    &quot;axios-mock-adapter&quot;: &quot;^1.19.0&quot;,
86    &quot;axios-progress-bar&quot;: &quot;^1.2.0&quot;,
87    &quot;bootstrap&quot;: &quot;^5.0.0-beta2&quot;,
88    &quot;chart.js&quot;: &quot;^2.9.4&quot;,
89    &quot;chartist&quot;: &quot;^0.11.4&quot;,
90    &quot;classnames&quot;: &quot;^2.2.6&quot;,
91    &quot;components&quot;: &quot;^0.1.0&quot;,
92    &quot;dotenv&quot;: &quot;^8.2.0&quot;,
93    &quot;draft-js&quot;: &quot;^0.11.7&quot;,
94    &quot;echarts&quot;: &quot;^4.9.0&quot;,
95    &quot;echarts-for-react&quot;: &quot;^2.0.16&quot;,
96    &quot;firebase&quot;: &quot;^8.2.3&quot;,
97    &quot;google-maps-react&quot;: &quot;^2.0.6&quot;,
98    &quot;history&quot;: &quot;^4.10.1&quot;,
99    &quot;i&quot;: &quot;^0.3.6&quot;,
100    &quot;i18next&quot;: &quot;^19.8.4&quot;,
101    &quot;i18next-browser-languagedetector&quot;: &quot;^6.0.1&quot;,
102    &quot;jsonwebtoken&quot;: &quot;^8.5.1&quot;,
103    &quot;leaflet&quot;: &quot;^1.7.1&quot;,
104    &quot;lodash&quot;: &quot;^4.17.21&quot;,
105    &quot;lodash.clonedeep&quot;: &quot;^4.5.0&quot;,
106    &quot;lodash.get&quot;: &quot;^4.4.2&quot;,
107    &quot;metismenujs&quot;: &quot;^1.2.1&quot;,
108    &quot;mkdirp&quot;: &quot;^1.0.4&quot;,
109    &quot;moment&quot;: &quot;2.29.1&quot;,
110    &quot;moment-timezone&quot;: &quot;^0.5.32&quot;,
111    &quot;nouislider-react&quot;: &quot;^3.3.9&quot;,
112    &quot;npm&quot;: &quot;^7.6.3&quot;,
113    &quot;prop-types&quot;: &quot;^15.7.2&quot;,
114    &quot;query-string&quot;: &quot;^6.14.0&quot;,
115    &quot;react&quot;: &quot;^16.13.1&quot;,
116    &quot;react-apexcharts&quot;: &quot;^1.3.7&quot;,
117    &quot;react-auth-code-input&quot;: &quot;^1.0.0&quot;,
118    &quot;react-avatar&quot;: &quot;^3.10.0&quot;,
119    &quot;react-bootstrap&quot;: &quot;^1.5.0&quot;,
120    &quot;react-bootstrap-editable&quot;: &quot;^0.8.2&quot;,
121    &quot;react-bootstrap-sweetalert&quot;: &quot;^5.2.0&quot;,
122    &quot;react-bootstrap-table-next&quot;: &quot;^4.0.3&quot;,
123    &quot;react-bootstrap-table2-editor&quot;: &quot;^1.4.0&quot;,
124    &quot;react-bootstrap-table2-paginator&quot;: &quot;^2.1.2&quot;,
125    &quot;react-bootstrap-table2-toolkit&quot;: &quot;^2.1.3&quot;,
126    &quot;react-chartist&quot;: &quot;^0.14.3&quot;,
127    &quot;react-chartjs-2&quot;: &quot;^2.11.1&quot;,
128    &quot;react-color&quot;: &quot;^2.19.3&quot;,
129    &quot;react-confirm-alert&quot;: &quot;^2.7.0&quot;,
130    &quot;react-content-loader&quot;: &quot;^6.0.1&quot;,
131    &quot;react-countdown&quot;: &quot;^2.3.1&quot;,
132    &quot;react-countup&quot;: &quot;^4.3.3&quot;,
133    &quot;react-cropper&quot;: &quot;^2.1.4&quot;,
134    &quot;react-data-table-component&quot;: &quot;^6.11.8&quot;,
135    &quot;react-date-picker&quot;: &quot;^8.0.6&quot;,
136    &quot;react-datepicker&quot;: &quot;^3.4.1&quot;,
137    &quot;react-dom&quot;: &quot;^16.13.1&quot;,
138    &quot;react-draft-wysiwyg&quot;: &quot;^1.14.5&quot;,
139    &quot;react-drag-listview&quot;: &quot;^0.1.8&quot;,
140    &quot;react-drawer&quot;: &quot;^1.3.4&quot;,
141    &quot;react-dropzone&quot;: &quot;^11.2.4&quot;,
142    &quot;react-dual-listbox&quot;: &quot;^2.0.0&quot;,
143    &quot;react-facebook-login&quot;: &quot;^4.1.1&quot;,
144    &quot;react-flatpickr&quot;: &quot;^3.10.6&quot;,
145    &quot;react-google-login&quot;: &quot;^5.2.2&quot;,
146    &quot;react-hook-form&quot;: &quot;^7.15.2&quot;,
147    &quot;react-i18next&quot;: &quot;^11.8.5&quot;,
148    &quot;react-icons&quot;: &quot;^4.2.0&quot;,
149    &quot;react-image-lightbox&quot;: &quot;^5.1.1&quot;,
150    &quot;react-input-mask&quot;: &quot;^2.0.4&quot;,
151    &quot;react-jvectormap&quot;: &quot;^0.0.16&quot;,
152    &quot;react-leaflet&quot;: &quot;^3.0.5&quot;,
153    &quot;react-meta-tags&quot;: &quot;^1.0.1&quot;,
154    &quot;react-modal-video&quot;: &quot;^1.2.6&quot;,
155    &quot;react-notifications&quot;: &quot;^1.7.2&quot;,
156    &quot;react-number-format&quot;: &quot;^4.7.3&quot;,
157    &quot;react-perfect-scrollbar&quot;: &quot;^1.5.8&quot;,
158    &quot;react-rangeslider&quot;: &quot;^2.2.0&quot;,
159    &quot;react-rating&quot;: &quot;^2.0.5&quot;,
160    &quot;react-rating-tooltip&quot;: &quot;^1.1.6&quot;,
161    &quot;react-redux&quot;: &quot;^7.2.1&quot;,
162    &quot;react-responsive-carousel&quot;: &quot;^3.2.11&quot;,
163    &quot;react-router-dom&quot;: &quot;^5.2.0&quot;,
164    &quot;react-script&quot;: &quot;^2.0.5&quot;,
165    &quot;react-scripts&quot;: &quot;3.4.3&quot;,
166    &quot;react-select&quot;: &quot;^4.3.1&quot;,
167    &quot;react-sparklines&quot;: &quot;^1.7.0&quot;,
168    &quot;react-star-ratings&quot;: &quot;^2.3.0&quot;,
169    &quot;react-super-responsive-table&quot;: &quot;^5.2.0&quot;,
170    &quot;react-switch&quot;: &quot;^6.0.0&quot;,
171    &quot;react-table&quot;: &quot;^7.6.3&quot;,
172    &quot;react-toastify&quot;: &quot;^7.0.3&quot;,
173    &quot;react-toastr&quot;: &quot;^3.0.0&quot;,
174    &quot;react-twitter-auth&quot;: &quot;0.0.13&quot;,
175    &quot;reactstrap&quot;: &quot;^8.8.1&quot;,
176    &quot;recharts&quot;: &quot;^2.0.8&quot;,
177    &quot;redux&quot;: &quot;^4.0.5&quot;,
178    &quot;redux-saga&quot;: &quot;^1.1.3&quot;,
179    &quot;reselect&quot;: &quot;^4.0.0&quot;,
180    &quot;sass&quot;: &quot;^1.37.5&quot;,
181    &quot;simplebar-react&quot;: &quot;^2.3.0&quot;,
182    &quot;styled&quot;: &quot;^1.0.0&quot;,
183    &quot;styled-components&quot;: &quot;^5.2.1&quot;,
184    &quot;toastr&quot;: &quot;^2.1.4&quot;,
185    &quot;typescript&quot;: &quot;^4.0.2&quot;,
186    &quot;universal-cookie&quot;: &quot;^4.0.4&quot;
187  },
188  &quot;devDependencies&quot;: {
189    &quot;@typescript-eslint/eslint-plugin&quot;: &quot;^2.27.0&quot;,
190    &quot;@typescript-eslint/parser&quot;: &quot;^2.27.0&quot;,
191    &quot;@typescript-eslint/typescript-estree&quot;: &quot;^4.15.2&quot;,
192    &quot;eslint-config-prettier&quot;: &quot;^6.10.1&quot;,
193    &quot;eslint-plugin-prettier&quot;: &quot;^3.1.2&quot;,
194    &quot;husky&quot;: &quot;^4.2.5&quot;,
195    &quot;lint-staged&quot;: &quot;^10.1.3&quot;,
196    &quot;prettier&quot;: &quot;^1.19.1&quot;,
197    &quot;react-test-renderer&quot;: &quot;^16.13.1&quot;,
198    &quot;redux-devtools-extension&quot;: &quot;^2.13.8&quot;,
199    &quot;redux-mock-store&quot;: &quot;^1.5.4&quot;
200  },
201  &quot;scripts&quot;: {
202    &quot;start&quot;: &quot;react-scripts start&quot;,
203    &quot;build&quot;: &quot;react-scripts build &amp;&amp; mv build ./deploy/build&quot;,
204    &quot;build-local&quot;: &quot;react-scripts build&quot;,
205    &quot;test&quot;: &quot;react-scripts test&quot;,
206    &quot;eject&quot;: &quot;react-scripts eject&quot;
207  },
208  &quot;eslintConfig&quot;: {
209    &quot;extends&quot;: &quot;react-app&quot;
210  },
211  &quot;husky&quot;: {
212    &quot;hooks&quot;: {
213      &quot;pre-commit&quot;: &quot;lint-staged&quot;
214    }
215  },
216  &quot;lint-staged&quot;: {
217    &quot;*.{js,ts,tsx}&quot;: [
218      &quot;eslint --fix&quot;
219    ]
220  },
221  &quot;browserslist&quot;: {
222    &quot;production&quot;: [
223      &quot;&gt;0.2%&quot;,
224      &quot;not dead&quot;,
225      &quot;not op_mini all&quot;
226    ],
227    &quot;development&quot;: [
228      &quot;last 1 chrome version&quot;,
229      &quot;last 1 firefox version&quot;,
230      &quot;last 1 safari version&quot;
231    ]
232  }
233}
234    - name: Fix up git URLs
235      run: echo -e '[url &quot;https://github.com/&quot;]\n  insteadOf = &quot;git://github.com/&quot;' &gt;&gt; ~/.gitconfig
236git config --global url.&quot;https://github.com/&quot;.insteadOf git://github.com/
237

You can also use SSH, but GitHub Security reminds us that, as of March 15th, 2022, GitHub stopped accepting DSA keys. RSA keys uploaded after Nov 2, 2021 will work only with SHA-2 signatures.
The deprecated MACs, ciphers, and unencrypted Git protocol are permanently disabled.

So this (with the right key) would work:

1Command: git
2Arguments: ls-remote --tags --heads git://github.com/adobe-webplatform/eve.git
3Directory: /home/runner/work/stackstream-fe/stackstream-fe
4Output:
5fatal: remote error: 
6  The unauthenticated git protocol on port 9418 is no longer supported.
7    - name: Installing modules
8      run: yarn install
9  steps:
10  - name: Checkout
11    uses: actions/checkout@v2
12
13  - id: vars
14    run: |
15      if [ '${{ github.ref }}' == 'refs/heads/master' ]; then echo &quot;::set-output name=environment::prod_stackstream&quot; ; echo &quot;::set-output name=api-url::api&quot; ; elif [ '${{ github.ref }}' == 'refs/heads/staging' ]; then echo &quot;::set-output name=environment::staging_stackstream&quot;  ; echo &quot;::set-output name=api-url::stagingapi&quot; ; else echo &quot;::set-output name=environment::dev_stackstream&quot; ; echo &quot;::set-output name=api-url::devapi&quot; ; fi
16
17  - uses: pCYSl5EDgo/cat@master
18    id: slack
19    with:
20      path: .github/workflows/slack.txt
21
22  - name: Slack Start Notification
23    uses: 8398a7/action-slack@v3
24    env:
25      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
26      ENVIRONMENT: '`${{ steps.vars.outputs.environment }}`'
27      COLOR: good
28      STATUS: '`Started`'
29    with:
30      status: custom
31      fields: workflow,job,commit,repo,ref,author,took
32      custom_payload: |
33        ${{ steps.slack.outputs.text }}
34
35  - name: Installing modules
36    env:
37      REACT_APP_API_URL: 'https://${{ steps.vars.outputs.api-url }}mergestack.com/api/v1'
38    run: yarn install
39
40  - name: Create Frontend Build
41    env:
42      REACT_APP_API_URL: 'https://${{ steps.vars.outputs.api-url }}mergestack.com/api/v1'
43    run: yarn build
44
45  - name: Deploy to Frontend Server DEV
46    if: ${{ contains(github.ref, 'dev') }}
47    uses: easingthemes/ssh-deploy@v2.1.5
48    env:
49      SSH_PRIVATE_KEY: ${{ secrets.DEV_KEY }}
50      ARGS: '-rltgoDzvO --delete'
51      SOURCE: 'deploy/'
52      REMOTE_HOST: ${{ secrets.DEV_HOST }}
53      REMOTE_USER: plyfolio-dev
54      TARGET: '/home/plyfolio-dev/${{ steps.vars.outputs.environment }}/fe/deploy'
55   {
56  &quot;name&quot;: &quot;stackstream-fe&quot;,
57  &quot;version&quot;: &quot;1.0.0&quot;,
58  &quot;authors&quot;: [
59    &quot;fayyaznofal@gmail.com&quot;
60  ],
61  &quot;private&quot;: true,
62  &quot;dependencies&quot;: {
63    &quot;@fortawesome/fontawesome-svg-core&quot;: &quot;^1.2.34&quot;,
64    &quot;@fortawesome/free-solid-svg-icons&quot;: &quot;^5.15.2&quot;,
65    &quot;@fortawesome/react-fontawesome&quot;: &quot;^0.1.14&quot;,
66    &quot;@fullcalendar/bootstrap&quot;: &quot;^5.5.0&quot;,
67    &quot;@fullcalendar/core&quot;: &quot;^5.5.0&quot;,
68    &quot;@fullcalendar/daygrid&quot;: &quot;^5.5.0&quot;,
69    &quot;@fullcalendar/interaction&quot;: &quot;^5.5.0&quot;,
70    &quot;@fullcalendar/react&quot;: &quot;^5.5.0&quot;,
71    &quot;@lourenci/react-kanban&quot;: &quot;^2.1.0&quot;,
72    &quot;@redux-saga/simple-saga-monitor&quot;: &quot;^1.1.2&quot;,
73    &quot;@testing-library/jest-dom&quot;: &quot;^5.11.9&quot;,
74    &quot;@testing-library/react&quot;: &quot;^11.2.3&quot;,
75    &quot;@testing-library/user-event&quot;: &quot;^12.6.0&quot;,
76    &quot;@toast-ui/react-chart&quot;: &quot;^1.0.2&quot;,
77    &quot;@types/jest&quot;: &quot;^26.0.14&quot;,
78    &quot;@types/node&quot;: &quot;^14.10.3&quot;,
79    &quot;@types/react&quot;: &quot;^16.9.49&quot;,
80    &quot;@types/react-dom&quot;: &quot;^16.9.8&quot;,
81    &quot;@vtaits/react-color-picker&quot;: &quot;^0.1.1&quot;,
82    &quot;apexcharts&quot;: &quot;^3.23.1&quot;,
83    &quot;availity-reactstrap-validation&quot;: &quot;^2.7.0&quot;,
84    &quot;axios&quot;: &quot;^0.21.1&quot;,
85    &quot;axios-mock-adapter&quot;: &quot;^1.19.0&quot;,
86    &quot;axios-progress-bar&quot;: &quot;^1.2.0&quot;,
87    &quot;bootstrap&quot;: &quot;^5.0.0-beta2&quot;,
88    &quot;chart.js&quot;: &quot;^2.9.4&quot;,
89    &quot;chartist&quot;: &quot;^0.11.4&quot;,
90    &quot;classnames&quot;: &quot;^2.2.6&quot;,
91    &quot;components&quot;: &quot;^0.1.0&quot;,
92    &quot;dotenv&quot;: &quot;^8.2.0&quot;,
93    &quot;draft-js&quot;: &quot;^0.11.7&quot;,
94    &quot;echarts&quot;: &quot;^4.9.0&quot;,
95    &quot;echarts-for-react&quot;: &quot;^2.0.16&quot;,
96    &quot;firebase&quot;: &quot;^8.2.3&quot;,
97    &quot;google-maps-react&quot;: &quot;^2.0.6&quot;,
98    &quot;history&quot;: &quot;^4.10.1&quot;,
99    &quot;i&quot;: &quot;^0.3.6&quot;,
100    &quot;i18next&quot;: &quot;^19.8.4&quot;,
101    &quot;i18next-browser-languagedetector&quot;: &quot;^6.0.1&quot;,
102    &quot;jsonwebtoken&quot;: &quot;^8.5.1&quot;,
103    &quot;leaflet&quot;: &quot;^1.7.1&quot;,
104    &quot;lodash&quot;: &quot;^4.17.21&quot;,
105    &quot;lodash.clonedeep&quot;: &quot;^4.5.0&quot;,
106    &quot;lodash.get&quot;: &quot;^4.4.2&quot;,
107    &quot;metismenujs&quot;: &quot;^1.2.1&quot;,
108    &quot;mkdirp&quot;: &quot;^1.0.4&quot;,
109    &quot;moment&quot;: &quot;2.29.1&quot;,
110    &quot;moment-timezone&quot;: &quot;^0.5.32&quot;,
111    &quot;nouislider-react&quot;: &quot;^3.3.9&quot;,
112    &quot;npm&quot;: &quot;^7.6.3&quot;,
113    &quot;prop-types&quot;: &quot;^15.7.2&quot;,
114    &quot;query-string&quot;: &quot;^6.14.0&quot;,
115    &quot;react&quot;: &quot;^16.13.1&quot;,
116    &quot;react-apexcharts&quot;: &quot;^1.3.7&quot;,
117    &quot;react-auth-code-input&quot;: &quot;^1.0.0&quot;,
118    &quot;react-avatar&quot;: &quot;^3.10.0&quot;,
119    &quot;react-bootstrap&quot;: &quot;^1.5.0&quot;,
120    &quot;react-bootstrap-editable&quot;: &quot;^0.8.2&quot;,
121    &quot;react-bootstrap-sweetalert&quot;: &quot;^5.2.0&quot;,
122    &quot;react-bootstrap-table-next&quot;: &quot;^4.0.3&quot;,
123    &quot;react-bootstrap-table2-editor&quot;: &quot;^1.4.0&quot;,
124    &quot;react-bootstrap-table2-paginator&quot;: &quot;^2.1.2&quot;,
125    &quot;react-bootstrap-table2-toolkit&quot;: &quot;^2.1.3&quot;,
126    &quot;react-chartist&quot;: &quot;^0.14.3&quot;,
127    &quot;react-chartjs-2&quot;: &quot;^2.11.1&quot;,
128    &quot;react-color&quot;: &quot;^2.19.3&quot;,
129    &quot;react-confirm-alert&quot;: &quot;^2.7.0&quot;,
130    &quot;react-content-loader&quot;: &quot;^6.0.1&quot;,
131    &quot;react-countdown&quot;: &quot;^2.3.1&quot;,
132    &quot;react-countup&quot;: &quot;^4.3.3&quot;,
133    &quot;react-cropper&quot;: &quot;^2.1.4&quot;,
134    &quot;react-data-table-component&quot;: &quot;^6.11.8&quot;,
135    &quot;react-date-picker&quot;: &quot;^8.0.6&quot;,
136    &quot;react-datepicker&quot;: &quot;^3.4.1&quot;,
137    &quot;react-dom&quot;: &quot;^16.13.1&quot;,
138    &quot;react-draft-wysiwyg&quot;: &quot;^1.14.5&quot;,
139    &quot;react-drag-listview&quot;: &quot;^0.1.8&quot;,
140    &quot;react-drawer&quot;: &quot;^1.3.4&quot;,
141    &quot;react-dropzone&quot;: &quot;^11.2.4&quot;,
142    &quot;react-dual-listbox&quot;: &quot;^2.0.0&quot;,
143    &quot;react-facebook-login&quot;: &quot;^4.1.1&quot;,
144    &quot;react-flatpickr&quot;: &quot;^3.10.6&quot;,
145    &quot;react-google-login&quot;: &quot;^5.2.2&quot;,
146    &quot;react-hook-form&quot;: &quot;^7.15.2&quot;,
147    &quot;react-i18next&quot;: &quot;^11.8.5&quot;,
148    &quot;react-icons&quot;: &quot;^4.2.0&quot;,
149    &quot;react-image-lightbox&quot;: &quot;^5.1.1&quot;,
150    &quot;react-input-mask&quot;: &quot;^2.0.4&quot;,
151    &quot;react-jvectormap&quot;: &quot;^0.0.16&quot;,
152    &quot;react-leaflet&quot;: &quot;^3.0.5&quot;,
153    &quot;react-meta-tags&quot;: &quot;^1.0.1&quot;,
154    &quot;react-modal-video&quot;: &quot;^1.2.6&quot;,
155    &quot;react-notifications&quot;: &quot;^1.7.2&quot;,
156    &quot;react-number-format&quot;: &quot;^4.7.3&quot;,
157    &quot;react-perfect-scrollbar&quot;: &quot;^1.5.8&quot;,
158    &quot;react-rangeslider&quot;: &quot;^2.2.0&quot;,
159    &quot;react-rating&quot;: &quot;^2.0.5&quot;,
160    &quot;react-rating-tooltip&quot;: &quot;^1.1.6&quot;,
161    &quot;react-redux&quot;: &quot;^7.2.1&quot;,
162    &quot;react-responsive-carousel&quot;: &quot;^3.2.11&quot;,
163    &quot;react-router-dom&quot;: &quot;^5.2.0&quot;,
164    &quot;react-script&quot;: &quot;^2.0.5&quot;,
165    &quot;react-scripts&quot;: &quot;3.4.3&quot;,
166    &quot;react-select&quot;: &quot;^4.3.1&quot;,
167    &quot;react-sparklines&quot;: &quot;^1.7.0&quot;,
168    &quot;react-star-ratings&quot;: &quot;^2.3.0&quot;,
169    &quot;react-super-responsive-table&quot;: &quot;^5.2.0&quot;,
170    &quot;react-switch&quot;: &quot;^6.0.0&quot;,
171    &quot;react-table&quot;: &quot;^7.6.3&quot;,
172    &quot;react-toastify&quot;: &quot;^7.0.3&quot;,
173    &quot;react-toastr&quot;: &quot;^3.0.0&quot;,
174    &quot;react-twitter-auth&quot;: &quot;0.0.13&quot;,
175    &quot;reactstrap&quot;: &quot;^8.8.1&quot;,
176    &quot;recharts&quot;: &quot;^2.0.8&quot;,
177    &quot;redux&quot;: &quot;^4.0.5&quot;,
178    &quot;redux-saga&quot;: &quot;^1.1.3&quot;,
179    &quot;reselect&quot;: &quot;^4.0.0&quot;,
180    &quot;sass&quot;: &quot;^1.37.5&quot;,
181    &quot;simplebar-react&quot;: &quot;^2.3.0&quot;,
182    &quot;styled&quot;: &quot;^1.0.0&quot;,
183    &quot;styled-components&quot;: &quot;^5.2.1&quot;,
184    &quot;toastr&quot;: &quot;^2.1.4&quot;,
185    &quot;typescript&quot;: &quot;^4.0.2&quot;,
186    &quot;universal-cookie&quot;: &quot;^4.0.4&quot;
187  },
188  &quot;devDependencies&quot;: {
189    &quot;@typescript-eslint/eslint-plugin&quot;: &quot;^2.27.0&quot;,
190    &quot;@typescript-eslint/parser&quot;: &quot;^2.27.0&quot;,
191    &quot;@typescript-eslint/typescript-estree&quot;: &quot;^4.15.2&quot;,
192    &quot;eslint-config-prettier&quot;: &quot;^6.10.1&quot;,
193    &quot;eslint-plugin-prettier&quot;: &quot;^3.1.2&quot;,
194    &quot;husky&quot;: &quot;^4.2.5&quot;,
195    &quot;lint-staged&quot;: &quot;^10.1.3&quot;,
196    &quot;prettier&quot;: &quot;^1.19.1&quot;,
197    &quot;react-test-renderer&quot;: &quot;^16.13.1&quot;,
198    &quot;redux-devtools-extension&quot;: &quot;^2.13.8&quot;,
199    &quot;redux-mock-store&quot;: &quot;^1.5.4&quot;
200  },
201  &quot;scripts&quot;: {
202    &quot;start&quot;: &quot;react-scripts start&quot;,
203    &quot;build&quot;: &quot;react-scripts build &amp;&amp; mv build ./deploy/build&quot;,
204    &quot;build-local&quot;: &quot;react-scripts build&quot;,
205    &quot;test&quot;: &quot;react-scripts test&quot;,
206    &quot;eject&quot;: &quot;react-scripts eject&quot;
207  },
208  &quot;eslintConfig&quot;: {
209    &quot;extends&quot;: &quot;react-app&quot;
210  },
211  &quot;husky&quot;: {
212    &quot;hooks&quot;: {
213      &quot;pre-commit&quot;: &quot;lint-staged&quot;
214    }
215  },
216  &quot;lint-staged&quot;: {
217    &quot;*.{js,ts,tsx}&quot;: [
218      &quot;eslint --fix&quot;
219    ]
220  },
221  &quot;browserslist&quot;: {
222    &quot;production&quot;: [
223      &quot;&gt;0.2%&quot;,
224      &quot;not dead&quot;,
225      &quot;not op_mini all&quot;
226    ],
227    &quot;development&quot;: [
228      &quot;last 1 chrome version&quot;,
229      &quot;last 1 firefox version&quot;,
230      &quot;last 1 safari version&quot;
231    ]
232  }
233}
234    - name: Fix up git URLs
235      run: echo -e '[url &quot;https://github.com/&quot;]\n  insteadOf = &quot;git://github.com/&quot;' &gt;&gt; ~/.gitconfig
236git config --global url.&quot;https://github.com/&quot;.insteadOf git://github.com/
237git config --global url.&quot;git@github.com:&quot;.insteadOf git://github.com/
238

That will change any git://github.com/ (unencrypted Git protocol) into git@github.com: (SSH URL).

Source https://stackoverflow.com/questions/70663523

QUESTION

in Typescript, try...catch error object shows &quot;Object is of type 'unknown'.ts(2571)&quot;

Asked 2022-Mar-18 at 03:47
1router.get('/cells', async (req, res) =&gt; {
2    try {
3      const result = await fs.readFile(fullPath, { encoding: 'utf-8' });
4      res.send(JSON.parse(result));
5    } catch (err) {
6      if (err.code === 'ENOENT') { // Object is of type 'unknown'.ts(2571) (local var) err: unknown
7        await fs.writeFile(fullPath, '[]', 'utf-8');
8        res.send([]);
9      } else {
10        throw err;
11      }
12    }
13

err.code make this ts error : Object is of type 'unknown'.ts(2571)

I definitely know that err.code exists, so I want to know how to define the type(or interface) of err?

(tsc version info : My global typescript version is v4.3.5 and the above code belongs to my project which has typescript v4.1.2)

--- Edit ---

I finally know why this error happens to me. I thought I used tsc version under 4.3.x, but it turns out I used v4.4.x.

In vscode, cmd + shift + P and search for Select Typescript version and I actually used v4.4.3, (I mistakenly thought on version because I only check tsc version from terminal)

enter image description here

enter image description here

Thanks for sharing Youtube video,

ANSWER

Answered 2021-Oct-03 at 06:44

In JavaScript/TypeScript you can throw anything, not only errors. In theory it could be anything in the catch block. If you want to prevent the type error it could make sense to check if the unknown value is a system error before checking the code.

1router.get('/cells', async (req, res) =&gt; {
2    try {
3      const result = await fs.readFile(fullPath, { encoding: 'utf-8' });
4      res.send(JSON.parse(result));
5    } catch (err) {
6      if (err.code === 'ENOENT') { // Object is of type 'unknown'.ts(2571) (local var) err: unknown
7        await fs.writeFile(fullPath, '[]', 'utf-8');
8        res.send([]);
9      } else {
10        throw err;
11      }
12    }
13if (err instanceof SystemError &amp;&amp; err.code === 'ENOENT') {
14  // file not found
15}
16

Source https://stackoverflow.com/questions/69422525

QUESTION

RAKUDO_RAKUAST=1 raku --target=ast is not yet available

Asked 2022-Mar-08 at 19:27

It has been almost a year since I saw Jonathan Worthington presenting the new RakuAST in the YouTube video A Raku API to Raku programs the journey so far from TRC 2021. In the video, he showed that we could dump this new RakuAST using RAKUDO_RAKUAST=1 like this:

1RAKUDO_RAKUAST=1 raku --target=ast -e 'say [*] 1..10'
2

I'm using the lasted version of RakudoStar, and yet, the command above still dumps the old QAST tree.

What is happening here?

Why doesn't it show the new RakuAST and how can I compile rakudo the right way so that it does?

For the build, I use the instruction on this page https://rakudo.org/downloads/rakudo/source for Linux with a slight modification because the instructions are slightly outdated. This is what I do instead of what the page tells me to (It worked previously but not anymore):

1RAKUDO_RAKUAST=1 raku --target=ast -e 'say [*] 1..10'
2sudo perl Configure.pl --backends=moar --gen-moar --gen-nqp
3

ANSWER

Answered 2022-Mar-08 at 11:46

You need to checkout and build the rakuast branch of Rakudo. The RakuAST work is still very much in progress, and has not landed in the main branch let.

Source https://stackoverflow.com/questions/71392434

QUESTION

Error when trying to run my React Native app on Android

Asked 2022-Mar-06 at 07:58

I've built my React Native app and tested and troubleshooted with my iOS devices for months. Now I'm trying to built and test the app on Android for the first time. The thing is, that I keep getting errors trying to run the Android-version of my app. After hours of debugging and troubleshooting, I tried to create a new RN project and see if that could run on my emulator and device. I got that part working and then I wanted to copy/paste the files of my existing app project into the new project.

I pasted my existing assets, styles, the source JS-files and the package.json file into the new project, ran npm install and then I ended up with the exact same error message as I had in the original project when I run react-native run-android.

The full error message is here:

1error Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup.
2Error: Command failed: ./gradlew app:installDebug -PreactNativeDevServerPort=8081
3Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
4Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
5Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
6Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
7Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
8
9FAILURE: Build failed with an exception.
10
11* What went wrong:
12Execution failed for task ':app:mergeDebugAssets'.
13&gt; Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
14   &gt; Could not find com.facebook.yoga:proguard-annotations:1.14.1.
15     Searched in the following locations:
16       - https://dl.google.com/dl/android/maven2/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
17       - https://repo.maven.apache.org/maven2/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
18       - file:/Users/MyUser/.m2/repository/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
19       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/react-native/android/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
20       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/jsc-android/dist/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
21       - https://www.jitpack.io/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
22     Required by:
23         project :app &gt; com.facebook.react:react-native:0.64.2
24   &gt; Could not find com.facebook.fbjni:fbjni-java-only:0.0.3.
25     Searched in the following locations:
26       - https://dl.google.com/dl/android/maven2/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
27       - https://repo.maven.apache.org/maven2/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
28       - file:/Users/MyUser/.m2/repository/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
29       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/react-native/android/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
30       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/jsc-android/dist/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
31       - https://www.jitpack.io/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
32     Required by:
33         project :app &gt; com.facebook.react:react-native:0.64.2
34   &gt; Could not find com.yqritc:android-scalablevideoview:1.0.4.
35     Searched in the following locations:
36       - https://dl.google.com/dl/android/maven2/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
37       - https://repo.maven.apache.org/maven2/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
38       - file:/Users/MyUser/.m2/repository/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
39       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/react-native/android/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
40       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/jsc-android/dist/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
41       - https://www.jitpack.io/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
42     Required by:
43         project :app &gt; project :react-native-video
44
45* Try:
46Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
47
48* Get more help at https://help.gradle.org
49
50BUILD FAILED in 10s
51
52    at makeError (/Users/MyUser/MyAppFolder/MyApp/node_modules/execa/index.js:174:9)
53    at /Users/MyUser/MyAppFolder/MyApp/node_modules/execa/index.js:278:16
54    at processTicksAndRejections (node:internal/process/task_queues:96:5)
55    at async runOnAllDevices (/Users/MyUser/MyAppFolder/MyApp/node_modules/@react-native-community/cli-platform-android/build/commands/runAndroid/runOnAllDevices.js:94:5)
56    at async Command.handleAction (/Users/MyUser/MyAppFolder/MyApp/node_modules/react-native/node_modules/@react-native-community/cli/build/index.js:186:9)
57

I've tried to run ./gradlew clean in the android-folder without any luck. My build.gradle-file looks like this:

1error Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup.
2Error: Command failed: ./gradlew app:installDebug -PreactNativeDevServerPort=8081
3Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
4Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
5Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
6Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
7Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
8
9FAILURE: Build failed with an exception.
10
11* What went wrong:
12Execution failed for task ':app:mergeDebugAssets'.
13&gt; Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
14   &gt; Could not find com.facebook.yoga:proguard-annotations:1.14.1.
15     Searched in the following locations:
16       - https://dl.google.com/dl/android/maven2/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
17       - https://repo.maven.apache.org/maven2/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
18       - file:/Users/MyUser/.m2/repository/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
19       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/react-native/android/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
20       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/jsc-android/dist/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
21       - https://www.jitpack.io/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
22     Required by:
23         project :app &gt; com.facebook.react:react-native:0.64.2
24   &gt; Could not find com.facebook.fbjni:fbjni-java-only:0.0.3.
25     Searched in the following locations:
26       - https://dl.google.com/dl/android/maven2/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
27       - https://repo.maven.apache.org/maven2/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
28       - file:/Users/MyUser/.m2/repository/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
29       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/react-native/android/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
30       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/jsc-android/dist/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
31       - https://www.jitpack.io/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
32     Required by:
33         project :app &gt; com.facebook.react:react-native:0.64.2
34   &gt; Could not find com.yqritc:android-scalablevideoview:1.0.4.
35     Searched in the following locations:
36       - https://dl.google.com/dl/android/maven2/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
37       - https://repo.maven.apache.org/maven2/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
38       - file:/Users/MyUser/.m2/repository/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
39       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/react-native/android/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
40       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/jsc-android/dist/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
41       - https://www.jitpack.io/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
42     Required by:
43         project :app &gt; project :react-native-video
44
45* Try:
46Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
47
48* Get more help at https://help.gradle.org
49
50BUILD FAILED in 10s
51
52    at makeError (/Users/MyUser/MyAppFolder/MyApp/node_modules/execa/index.js:174:9)
53    at /Users/MyUser/MyAppFolder/MyApp/node_modules/execa/index.js:278:16
54    at processTicksAndRejections (node:internal/process/task_queues:96:5)
55    at async runOnAllDevices (/Users/MyUser/MyAppFolder/MyApp/node_modules/@react-native-community/cli-platform-android/build/commands/runAndroid/runOnAllDevices.js:94:5)
56    at async Command.handleAction (/Users/MyUser/MyAppFolder/MyApp/node_modules/react-native/node_modules/@react-native-community/cli/build/index.js:186:9)
57// Top-level build file where you can add configuration options common to all sub-projects/modules.
58
59buildscript {
60    ext {
61        buildToolsVersion = &quot;30.0.2&quot;
62        minSdkVersion = 21
63        compileSdkVersion = 30
64        targetSdkVersion = 30
65        ndkVersion = &quot;20.1.5948944&quot;
66        kotlinVersion = &quot;1.3.72&quot;
67    }
68    repositories {
69        repositories {
70            google()
71            maven { url 'https://maven.google.com' }
72            mavenLocal()
73            mavenCentral()
74
75           // jcenter()
76            maven {
77                // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
78                url &quot;$rootDir/../node_modules/react-native/android&quot;
79            }
80        }
81    }
82    dependencies {
83        classpath(&quot;com.android.tools.build:gradle:4.2.1&quot;)
84        classpath &quot;org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion&quot;
85        // NOTE: Do not place your application dependencies here; they belong
86        // in the individual module build.gradle files
87    }
88}
89
90allprojects {
91    repositories {
92        google()
93        mavenCentral()
94
95        mavenLocal()
96        maven {
97            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
98            url(&quot;$rootDir/../node_modules/react-native/android&quot;)
99        }
100        maven {
101            // Android JSC is installed from npm
102            url(&quot;$rootDir/../node_modules/jsc-android/dist&quot;)
103        }
104
105        maven { url 'https://www.jitpack.io' }
106    }
107}
108

Please let me know if you know what to do or if you have experienced a similar issue!

ANSWER

Answered 2021-Aug-21 at 13:43

I've hit this same issue and have temporarily resolved it by uninstalling react-native-video (npm uninstall --save react-native-video). That's not a great answer as I need that component, but I don't have a full solution yet. I think somehow com.yqritc:android-scalablevideoview:1.0.4. is required by react-native-video but has gotten lost or removed. Other thoughts are welcome.

UPDATE: Resolved! In your build.gradle in your Android folder you need to add the repository "jcenter()" in allprojects (not in build dependencies) like this...

1error Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup.
2Error: Command failed: ./gradlew app:installDebug -PreactNativeDevServerPort=8081
3Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
4Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
5Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
6Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
7Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
8
9FAILURE: Build failed with an exception.
10
11* What went wrong:
12Execution failed for task ':app:mergeDebugAssets'.
13&gt; Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
14   &gt; Could not find com.facebook.yoga:proguard-annotations:1.14.1.
15     Searched in the following locations:
16       - https://dl.google.com/dl/android/maven2/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
17       - https://repo.maven.apache.org/maven2/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
18       - file:/Users/MyUser/.m2/repository/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
19       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/react-native/android/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
20       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/jsc-android/dist/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
21       - https://www.jitpack.io/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
22     Required by:
23         project :app &gt; com.facebook.react:react-native:0.64.2
24   &gt; Could not find com.facebook.fbjni:fbjni-java-only:0.0.3.
25     Searched in the following locations:
26       - https://dl.google.com/dl/android/maven2/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
27       - https://repo.maven.apache.org/maven2/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
28       - file:/Users/MyUser/.m2/repository/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
29       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/react-native/android/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
30       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/jsc-android/dist/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
31       - https://www.jitpack.io/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
32     Required by:
33         project :app &gt; com.facebook.react:react-native:0.64.2
34   &gt; Could not find com.yqritc:android-scalablevideoview:1.0.4.
35     Searched in the following locations:
36       - https://dl.google.com/dl/android/maven2/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
37       - https://repo.maven.apache.org/maven2/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
38       - file:/Users/MyUser/.m2/repository/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
39       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/react-native/android/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
40       - file:/Users/MyUser/MyAppFolder/MyApp/node_modules/jsc-android/dist/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
41       - https://www.jitpack.io/com/yqritc/android-scalablevideoview/1.0.4/android-scalablevideoview-1.0.4.pom
42     Required by:
43         project :app &gt; project :react-native-video
44
45* Try:
46Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
47
48* Get more help at https://help.gradle.org
49
50BUILD FAILED in 10s
51
52    at makeError (/Users/MyUser/MyAppFolder/MyApp/node_modules/execa/index.js:174:9)
53    at /Users/MyUser/MyAppFolder/MyApp/node_modules/execa/index.js:278:16
54    at processTicksAndRejections (node:internal/process/task_queues:96:5)
55    at async runOnAllDevices (/Users/MyUser/MyAppFolder/MyApp/node_modules/@react-native-community/cli-platform-android/build/commands/runAndroid/runOnAllDevices.js:94:5)
56    at async Command.handleAction (/Users/MyUser/MyAppFolder/MyApp/node_modules/react-native/node_modules/@react-native-community/cli/build/index.js:186:9)
57// Top-level build file where you can add configuration options common to all sub-projects/modules.
58
59buildscript {
60    ext {
61        buildToolsVersion = &quot;30.0.2&quot;
62        minSdkVersion = 21
63        compileSdkVersion = 30
64        targetSdkVersion = 30
65        ndkVersion = &quot;20.1.5948944&quot;
66        kotlinVersion = &quot;1.3.72&quot;
67    }
68    repositories {
69        repositories {
70            google()
71            maven { url 'https://maven.google.com' }
72            mavenLocal()
73            mavenCentral()
74
75           // jcenter()
76            maven {
77                // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
78                url &quot;$rootDir/../node_modules/react-native/android&quot;
79            }
80        }
81    }
82    dependencies {
83        classpath(&quot;com.android.tools.build:gradle:4.2.1&quot;)
84        classpath &quot;org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion&quot;
85        // NOTE: Do not place your application dependencies here; they belong
86        // in the individual module build.gradle files
87    }
88}
89
90allprojects {
91    repositories {
92        google()
93        mavenCentral()
94
95        mavenLocal()
96        maven {
97            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
98            url(&quot;$rootDir/../node_modules/react-native/android&quot;)
99        }
100        maven {
101            // Android JSC is installed from npm
102            url(&quot;$rootDir/../node_modules/jsc-android/dist&quot;)
103        }
104
105        maven { url 'https://www.jitpack.io' }
106    }
107}
108allprojects {
109    repositories {
110        mavenCentral()
111        mavenLocal()
112        jcenter()
113}
114

Source https://stackoverflow.com/questions/68835157

QUESTION

How to make the grey hints that point the type on methods auto appear?

Asked 2022-Feb-28 at 23:59

I am watching video lesson and when teacher starts writing code, grey formatting letters appear. I attached a screenshot to this question.

Do anybody know how to activate it? I am using Visual Studio 2022 and mine doesn't have it.

ANSWER

Answered 2022-Jan-13 at 15:07

Go to Tools -> Options and search for the following options. Check the boxes and you're good to go.

enter image description here

Source https://stackoverflow.com/questions/70697568

QUESTION

What's the library should I import for UTTypeImage, which is the replacement of kUTTypeImage in iOS 15?

Asked 2022-Feb-20 at 12:20

Before iOS 15, I used UIImagePickerController to capture images and video, and I got mediaType from [UIImagePickerController.InfoKey : Any], then I used kUTTypeImage (in the MobileCoreServices library) to identify the mediaType.

However, When it comes to iOS 15, Xcode complains that kUTTypeImage was deprecated in iOS 15.0. Use UTTypeImage instead. So, I replaced kUTTypeImage with UTTypeImage, but Xcode didn't know it.

Tried searching for some information, but didn't get any clue. I guess I should import the right library, but what is it?

Here is part of the code:

1func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
2        guard let mediaType = info[.mediaType] as? String else { return }
3        switch mediaType {
4        case String(kUTTypeImage):
5        // blabla
6        case String(kUTTypeMovie):
7        // blabla
8

and here are some screenshots: enter image description here

enter image description here

ANSWER

Answered 2021-Sep-26 at 06:40

It's a bit confusing. First, you'll need to import UniformTypeIdentifiers. Then, replace kUTTypeImage with UTType.image (the Swift version of UTTypeImage).

Source https://stackoverflow.com/questions/69332404

QUESTION

Replacing YouTube HTML links with embed code

Asked 2022-Jan-30 at 22:33

I'm writing web pages in markdown and converting them to HTML using md2html tool. I want to process the output HTML file and find any youtube link like this:

<a href="https://www.youtube.com/watch?v=abcdefgh887">https://www.youtube.com/watch?v=abcdefgh887</a>

and replace it with the embed code:

<iframe width="560" height="315" src="https://www.youtube.com/embed/abcdefgh887?controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

I toyed around a little with Grammars, mostly to get familiar with them, but concluded this probably isn't the ideal tool for the job. Plus I'd prefer to use existing modules that are easily adaptable to other similar tasks rather than roll my own half-baked solution.

Perl5 has some good tools for this kind of thing but I'd like to use a pure Raku solution so I can learn more Raku.

Any recommendations for good approaches to this problem?

ANSWER

Answered 2022-Jan-28 at 20:31

I tried to answer your question without knowing an example.

You need to extract youtubeId from A tag and then replace A tag into iframe tag.

pseudo code is:

1for each line:
2   if is youtube A tag,
3       youtube A tag = youtube Iframe tag
4

Please paste your input file into my input variable.

1for each line:
2   if is youtube A tag,
3       youtube A tag = youtube Iframe tag
4const input = `
5text1
6&lt;a href="https://www.youtube.com/watch?v=youtubeId1"&gt;https://www.youtube.com/watch?v=youtubeId1&lt;/a&gt;
7text2
8text3
9&lt;a href="https://www.youtube.com/watch?v=youtubeId2"&gt;https://www.youtube.com/watch?v=youtubeId2&lt;/a&gt;
10`;
11
12const rx = /^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&amp;v(?:i)?=))([^#\&amp;\?&lt;]*).*/;
13
14const getYoutubeIframe = (youtubeId) =&gt; {
15   return `&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/${youtubeId}?controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;`
16}
17
18const output = input.split('\n').map(line =&gt; {
19   const youtubeLink = '&lt;a href="https://www.youtube.com/watch?v=';
20   if (line.trim().indexOf(youtubeLink) === 0) {
21      const youtubeId = line.match(rx)[1];
22      return getYoutubeIframe(youtubeId);
23   }
24   return line;
25}).join('\n');
26
27console.log(output);

Source https://stackoverflow.com/questions/70899694

QUESTION

How to prevent actor reentrancy resulting in duplicative requests?

Asked 2022-Jan-21 at 06:56

In WWDC 2021 video, Protect mutable state with Swift actors, they provide the following code snippet:

1actor ImageDownloader {
2    private var cache: [URL: Image] = [:]
3
4    func image(from url: URL) async throws -&gt; Image? {
5        if let cached = cache[url] {
6            return cached
7        }
8
9        let image = try await downloadImage(from: url)
10
11        cache[url] = cache[url, default: image]
12
13        return cache[url]
14    }
15
16    func downloadImage(from url: URL) async throws -&gt; Image { ... }
17}
18

The issue is that actors offer reentrancy, so cache[url, default: image] reference effectively ensures that even if you performed a duplicative request because of some race, that you at least check the actor’s cache after the continuation, ensuring that you get the same image for the duplicative request.

And in that video, they say:

A better solution would be to avoid redundant downloads entirely. We’ve put that solution in the code associated with this video.

But there is no code associated with that video on the website. So, what is the better solution?

I understand the benefits of actor reentrancy (as discussed in SE-0306). E.g., if downloading four images, one does not want to prohibit reentrancy, losing concurrency of downloads. We would, effectively, like to wait for the result of a duplicative prior request for a particular image if any, and if not, start a new downloadImage.

ANSWER

Answered 2022-Jan-05 at 00:30

The key is to keep a reference to the Task, and if found, await its value.

Perhaps:

1actor ImageDownloader {
2    private var cache: [URL: Image] = [:]
3
4    func image(from url: URL) async throws -&gt; Image? {
5        if let cached = cache[url] {
6            return cached
7        }
8
9        let image = try await downloadImage(from: url)
10
11        cache[url] = cache[url, default: image]
12
13        return cache[url]
14    }
15
16    func downloadImage(from url: URL) async throws -&gt; Image { ... }
17}
18actor ImageDownloader {
19    private var cache: [URL: Image] = [:]
20    private var tasks: [URL: Task&lt;Image, Error&gt;] = [:]
21
22    func image(from url: URL) async throws -&gt; Image {
23        if let image = try await tasks[url]?.value {
24            print(&quot;found request&quot;)
25            return image
26        }
27
28        if let cached = cache[url] {
29            print(&quot;found cached&quot;)
30            return cached
31        }
32
33        let task = Task {
34            try await download(from: url)
35        }
36
37        tasks[url] = task
38        defer { tasks[url] = nil }
39
40        let image = try await task.value
41        cache[url] = image
42
43        return image
44    }
45
46    private func download(from url: URL) async throws -&gt; Image {
47        let (data, response) = try await URLSession.shared.data(from: url)
48        guard
49            let response = response as? HTTPURLResponse,
50            200 ..&lt; 300 ~= response.statusCode,
51            let image = Image(data: data)
52        else {
53            throw URLError(.badServerResponse)
54        }
55        return image
56    }
57}
58

Source https://stackoverflow.com/questions/70586562

Community Discussions contain sources that include Stack Exchange Network

Tutorials and Learning Resources in Video

Tutorials and Learning Resources are not available at this moment for Video

Share this Page

share link

Get latest updates on Video