Name: Towards AI Legal Name: Towards AI, Inc. Description: Towards AI is the world's leading artificial intelligence (AI) and technology publication. Read by thought-leaders and decision-makers around the world. Phone Number: +1-650-246-9381 Email: pub@towardsai.net
228 Park Avenue South New York, NY 10003 United States
Website: Publisher: https://towardsai.net/#publisher Diversity Policy: https://towardsai.net/about Ethics Policy: https://towardsai.net/about Masthead: https://towardsai.net/about
Name: Towards AI Legal Name: Towards AI, Inc. Description: Towards AI is the world's leading artificial intelligence (AI) and technology publication. Founders: Roberto Iriondo, , Job Title: Co-founder and Advisor Works for: Towards AI, Inc. Follow Roberto: X, LinkedIn, GitHub, Google Scholar, Towards AI Profile, Medium, ML@CMU, FreeCodeCamp, Crunchbase, Bloomberg, Roberto Iriondo, Generative AI Lab, Generative AI Lab Denis Piffaretti, Job Title: Co-founder Works for: Towards AI, Inc. Louie Peters, Job Title: Co-founder Works for: Towards AI, Inc. Louis-François Bouchard, Job Title: Co-founder Works for: Towards AI, Inc. Cover:
Towards AI Cover
Logo:
Towards AI Logo
Areas Served: Worldwide Alternate Name: Towards AI, Inc. Alternate Name: Towards AI Co. Alternate Name: towards ai Alternate Name: towardsai Alternate Name: towards.ai Alternate Name: tai Alternate Name: toward ai Alternate Name: toward.ai Alternate Name: Towards AI, Inc. Alternate Name: towardsai.net Alternate Name: pub.towardsai.net
5 stars – based on 497 reviews

Frequently Used, Contextual References

TODO: Remember to copy unique IDs whenever it needs used. i.e., URL: 304b2e42315e

Resources

Take our 85+ lesson From Beginner to Advanced LLM Developer Certification: From choosing a project to deploying a working product this is the most comprehensive and practical LLM course out there!

Publication

5 Step Guide to Successfully Implementing Robotic Process Automation
Latest   Machine Learning

5 Step Guide to Successfully Implementing Robotic Process Automation

Last Updated on July 20, 2023 by Editorial Team

Author(s): Maruti Techlabs

Originally published on Towards AI.

Robotic Process Automation has been around for quite some time. It is starting to gain momentum in large corporations as they’ve seen the results of cost savings from previous RPA implementations. In this article, we aim to break down what RPA is and how enterprises can go about formulating the right RPA implementation strategy — from creating the business case to the initial discovery workshops and implementation to testing and rollout.

Implementation of RPA can be quite straightforward if enterprises/organizations follow a clear and detailed roadmap. As shown in the graph above, the majority of RPA deployments require close to 2 months to configure, test, as well as launch automation into production.

According to KPMG, multiple businesses across different industries, “are uncertain where and how to begin to transition to robotics and cognitive automation systems.” This uncertainty accompanying robotic transformation may impact up to 78% of companies, with 40% not using RPA at all and another 24% only considering it.

The implementation of any new software may be accompanied by questions, anxieties, and doubts. Implementing an RPA solution is no different. The more promising the technology –RPA has a well-earned reputation as being easy to use and delivering fast ROI — the bigger the questions.

The automation of business & operational processes works wonders towards enhancing your business potential. Requiring minimal upfront investment, it aims to provide quick organizational benefits without creating any disruption in the underlying systems. Although there are a variety of traditional solutions that facilitate this approach, not all of them can perform as seamlessly as a successful RPA implementation.

According to this report by Software Testing and Big Data Hadoop, almost 20% of work hours are spent on monotonous and repetitive computer-based tasks. This marks a considerable chunk of time, which is lost on processes that are in dire need of automation.

Robotic Process Automation (RPA), in simple words, is a technology that employs computer software equipped with bots to perform tasks by emulating human actions. Primarily used for executing repetitive, predictable, and high-volume activities, RPA works by capturing data, interpreting responses, and communicating with other devices in an organized and systematic manner.

Despite the scalability and productivity which this technique offers, most businesses struggle with successful RPA implementation, mainly because they are either not able to accurately assess the specific processes which require automation or because they fail to get approval for RPA designing and integration. However, if you want the implementation of RPA to be an efficient affair, you would need to follow a stringent road map that balances the concerns of all stakeholders without compromising on the interests of any.

5 Step Process to a Successful RPA Implementation

Here’s a simple yet comprehensive 5 step guide to assist you in understanding the process of strategizing the implementation, development, and launch of Robotic Process Automation within your organization or enterprise:

1. Picking The Process

When it comes to RPA implementation, selecting the right set of processes to automate, holds the key to success. To do this, you need to carry out a thorough assessment of all the operations, within and across various departments, so that you can determine which particular processes can prove to be good candidates for automation. Nonetheless, as most businesses operate in a complex and sensitive environment, conducting such an objective analysis becomes nothing short of a challenging task.

The answer lies in the development of a framework that aligns the primary intent of RPA with the organization’s strategic objectives. This framework should try to examine both the potential risks and the expected value, which can be derived from automation.

The following attributes can be considered and scored in a structured way to ascertain the suitability of a process for automation:

  • The total volume of transactions can be performed without human intervention.
  • The amount of labor or resources required to execute repetitive tasks at regular intervals.
  • The ability of the components and subcomponents of a process to be digitized.
  • The capacity of a process to deliver an excellent customer experience without any manual errors.
  • The possible constraints which might obstruct the harvesting of automation benefits.
  • The capability of the rules that govern a process, to be mechanically defined and programmed.
  • The sensitivity and relevance of a process in the overall organizational workflow.

Apart from the aforementioned, factors like probable impact, compliance requirements, cost-effectiveness, technical complexity, and data privacy might also come in handy for identifying the processes, which can yield the most significant rewards after a successful RPA implementation.

2. Managing the People

Even though it deals with automation, implementation of RPA is all about managing the people. The organization right from the top rung to the grassroots must be taken into confidence. To begin with, a compelling case has to be built for the company’s leadership to take notice. They must be informed about the need for automation, its essentiality, and how it is likely to influence the return on investment (ROI).

Once this is done, the next step is to convince the employees. A lack of proper understanding on their part can lead to the fear that robotic process automation implementation might take their jobs away. The unease that accompanies automation is genuine, and that is why it needs to be adequately addressed by having open and honest discussions.

Talk to the staff about what automation will bring. RPA would only work as a process of filtering out redundancy and improving productivity. It would never be allowed to replace their jobs.

For still inspiring greater confidence, build a cross-functional team from amongst the employees to oversee successful RPA implementation. Empower the team to deal with operational challenges and grievance redressal while facilitating the proliferation of RPA technologies. This would also include coordinating with departments like IT & HR to make sure that the incorporation and configuration of RPA are absolute and complete.

As the business gets ready to embrace the new, it is now time to focus your attention on the selection of a competent RPA vendor.

3. Selecting The Vendor

All organizations have unique needs. To fulfill them, they require RPA vendors who understand these needs and offer customized solutions, which can only happen when the organization has conducted a detailed evaluation to determine the precise tools that it would require for a successful RPA implementation.

Here is a list of parameters that you must bear in mind while selecting a vendor for RPA so that pitfalls, if any, can be avoided:

  • The likely cost and time that they would require to deploy software bots.
  • Their ability to provide bots which can be scaled to handle transactional fluctuations and financial complexities.
  • Provisions made for encrypting stored data and ensuring its privacy and confidentiality.
  • Positioning systems to alert the organization in case there is a process error or a data breach.
  • The presence of an audit trail feature which records every action taken by the bot, thus, enabling performance monitoring.
  • The vendor-supplied RPA tool should also be non-intrusive and well-equipped to adapt to changing technologies.

Additionally, the technical prowess of the vendor should be verified along with their organizational credentials. The commitment of a vendor to the RPA domain can be substantiated by their previous associations, governance history, and development experience. Ultimately, it is only the capability of the vendor to combat automation issues, that can help you implement Robotic Process Automation skillfully.

4. Implementing the Idea

Before getting down to the actual execution, it is imperative to devise a meticulous and structured implementation approach that will define the contours of your overall strategy. At the initial stage, a team that has been tasked with the implementation of RPA, would identify the requisites and provide guiding principles that will help individual business units drive automation.

Once the framework has been designed, an implementation partner would be chosen which can either be an RPA vendor or an in-house crew. Irrespective of who you choose, make sure that they have the necessary functional know-how, the domain expertise and the technical competence to undertake successful RPA implementation.

The next step is to develop an appropriate solution. Carve out a comprehensive process map and mark the specific parts, which you plan to automate. Document this map, clarify the exact role that you expect RPA bots to play and program them accordingly. Throughout this time, ascertain that the various departments and personnel involved are operating in sync. Just as the programming is complete, run a few tests.

The infrastructure, software, and other systemic variations can sometimes lead to the cropping up of minor issues. Therefore, iterate the processes repeatedly and resolve any unexpected hindrances that might arise. After you have considered all the major scenarios, and crafted a fallback plan, get ready to run the pilot.

While the pilot is in operation, charge the team by randomly selecting bot outputs and reviewing them. Evaluate the results which have been obtained during this test run and use them to rectify glitches, if any. If the bots are working correctly, configure them to handle changes. This implies that a mechanism should be put in place, which equips them to continue functioning, even if the processes change. As this settles, inform all the stakeholders of their roles and responsibilities concerning robotic process automation implementation. Finally, double-check your contingency plan and go live!

5. Measuring The Performance

Last but not least, formulate key performance indicators (KPIs) based on which you can find out the success rate of your RPA implementation.

Although these metrics can vary from one organization to another, they generally tend to include:

  • Measuring how the deployment of RPA has affected the back-office processes.
  • Finding out if the productivity of employees has increased by comparing the time in which RPA finishes a task with the time in which human workers perform the same function.
  • Calculating the accuracy of the output, which ideally, should have increased to a hundred percent.
  • Analyzing the compliance reports of RPA, i.e., the efficiency with which the bots are adhering to rules and regulations.

A candid assessment would highlight any possible discrepancies and give you sufficient time to rectify them. After the completion of the incubation period, more such evaluations based on these yardsticks should be carried out, so that any gaps left in the successful RPA implementation plan can be timely identified and corrected.

Looking Ahead

For proper implementation of Robotic Process Automation, a business needs to blend diligence with skill. Considering the massive importance and benefits of RPA solutions in reducing efforts, improving customer service, and increasing profits, it becomes pivotal to ensure that every step is duly scrutinized, vetted, and backed.

Given that the implementation of RPA in an organizational change initiative, it is crucial for every stakeholder to closely follow through with an implementation roadmap, even after initial successes. It is vital that the right RPA vendor provides the efficient user experience, apt resource training in order to lower the technical entry-level and finally an RPA platform outfitted with strong features.

The RPA platform should ensure things like first-class operational support for constant monitoring and troubleshooting of bots, load management to make sure that robot usage is optimal across processes, performance metrics, and full audit trails.

When it comes to a successful RPA implementation, it is only more ROI positive and advantageous when it is considered as a platform and not some separate tool. With a bigger and more encompassing scope for automation, enterprises are guaranteed to see a more profound impact. After all, automation allows businesses to expand their digital footprint and be a part of the digital transformation, which harbors the capacity to change the future significantly!

Join thousands of data leaders on the AI newsletter. Join over 80,000 subscribers and keep up to date with the latest developments in AI. From research to projects and ideas. If you are building an AI startup, an AI-related product, or a service, we invite you to consider becoming a sponsor.

Published via Towards AI

Feedback ↓

Sign Up for the Course
`; } else { console.error('Element with id="subscribe" not found within the page with class "home".'); } } }); // Remove duplicate text from articles /* Backup: 09/11/24 function removeDuplicateText() { const elements = document.querySelectorAll('h1, h2, h3, h4, h5, strong'); // Select the desired elements const seenTexts = new Set(); // A set to keep track of seen texts const tagCounters = {}; // Object to track instances of each tag elements.forEach(el => { const tagName = el.tagName.toLowerCase(); // Get the tag name (e.g., 'h1', 'h2', etc.) // Initialize a counter for each tag if not already done if (!tagCounters[tagName]) { tagCounters[tagName] = 0; } // Only process the first 10 elements of each tag type if (tagCounters[tagName] >= 2) { return; // Skip if the number of elements exceeds 10 } const text = el.textContent.trim(); // Get the text content const words = text.split(/\s+/); // Split the text into words if (words.length >= 4) { // Ensure at least 4 words const significantPart = words.slice(0, 5).join(' '); // Get first 5 words for matching // Check if the text (not the tag) has been seen before if (seenTexts.has(significantPart)) { // console.log('Duplicate found, removing:', el); // Log duplicate el.remove(); // Remove duplicate element } else { seenTexts.add(significantPart); // Add the text to the set } } tagCounters[tagName]++; // Increment the counter for this tag }); } removeDuplicateText(); */ // Remove duplicate text from articles function removeDuplicateText() { const elements = document.querySelectorAll('h1, h2, h3, h4, h5, strong'); // Select the desired elements const seenTexts = new Set(); // A set to keep track of seen texts const tagCounters = {}; // Object to track instances of each tag // List of classes to be excluded const excludedClasses = ['medium-author', 'post-widget-title']; elements.forEach(el => { // Skip elements with any of the excluded classes if (excludedClasses.some(cls => el.classList.contains(cls))) { return; // Skip this element if it has any of the excluded classes } const tagName = el.tagName.toLowerCase(); // Get the tag name (e.g., 'h1', 'h2', etc.) // Initialize a counter for each tag if not already done if (!tagCounters[tagName]) { tagCounters[tagName] = 0; } // Only process the first 10 elements of each tag type if (tagCounters[tagName] >= 10) { return; // Skip if the number of elements exceeds 10 } const text = el.textContent.trim(); // Get the text content const words = text.split(/\s+/); // Split the text into words if (words.length >= 4) { // Ensure at least 4 words const significantPart = words.slice(0, 5).join(' '); // Get first 5 words for matching // Check if the text (not the tag) has been seen before if (seenTexts.has(significantPart)) { // console.log('Duplicate found, removing:', el); // Log duplicate el.remove(); // Remove duplicate element } else { seenTexts.add(significantPart); // Add the text to the set } } tagCounters[tagName]++; // Increment the counter for this tag }); } removeDuplicateText(); //Remove unnecessary text in blog excerpts document.querySelectorAll('.blog p').forEach(function(paragraph) { // Replace the unwanted text pattern for each paragraph paragraph.innerHTML = paragraph.innerHTML .replace(/Author\(s\): [\w\s]+ Originally published on Towards AI\.?/g, '') // Removes 'Author(s): XYZ Originally published on Towards AI' .replace(/This member-only story is on us\. Upgrade to access all of Medium\./g, ''); // Removes 'This member-only story...' }); //Load ionic icons and cache them if ('localStorage' in window && window['localStorage'] !== null) { const cssLink = 'https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css'; const storedCss = localStorage.getItem('ionicons'); if (storedCss) { loadCSS(storedCss); } else { fetch(cssLink).then(response => response.text()).then(css => { localStorage.setItem('ionicons', css); loadCSS(css); }); } } function loadCSS(css) { const style = document.createElement('style'); style.innerHTML = css; document.head.appendChild(style); } //Remove elements from imported content automatically function removeStrongFromHeadings() { const elements = document.querySelectorAll('h1, h2, h3, h4, h5, h6, span'); elements.forEach(el => { const strongTags = el.querySelectorAll('strong'); strongTags.forEach(strongTag => { while (strongTag.firstChild) { strongTag.parentNode.insertBefore(strongTag.firstChild, strongTag); } strongTag.remove(); }); }); } removeStrongFromHeadings(); "use strict"; window.onload = () => { /* //This is an object for each category of subjects and in that there are kewords and link to the keywods let keywordsAndLinks = { //you can add more categories and define their keywords and add a link ds: { keywords: [ //you can add more keywords here they are detected and replaced with achor tag automatically 'data science', 'Data science', 'Data Science', 'data Science', 'DATA SCIENCE', ], //we will replace the linktext with the keyword later on in the code //you can easily change links for each category here //(include class="ml-link" and linktext) link: 'linktext', }, ml: { keywords: [ //Add more keywords 'machine learning', 'Machine learning', 'Machine Learning', 'machine Learning', 'MACHINE LEARNING', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, ai: { keywords: [ 'artificial intelligence', 'Artificial intelligence', 'Artificial Intelligence', 'artificial Intelligence', 'ARTIFICIAL INTELLIGENCE', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, nl: { keywords: [ 'NLP', 'nlp', 'natural language processing', 'Natural Language Processing', 'NATURAL LANGUAGE PROCESSING', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, des: { keywords: [ 'data engineering services', 'Data Engineering Services', 'DATA ENGINEERING SERVICES', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, td: { keywords: [ 'training data', 'Training Data', 'training Data', 'TRAINING DATA', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, ias: { keywords: [ 'image annotation services', 'Image annotation services', 'image Annotation services', 'image annotation Services', 'Image Annotation Services', 'IMAGE ANNOTATION SERVICES', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, l: { keywords: [ 'labeling', 'labelling', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, pbp: { keywords: [ 'previous blog posts', 'previous blog post', 'latest', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, mlc: { keywords: [ 'machine learning course', 'machine learning class', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, }; //Articles to skip let articleIdsToSkip = ['post-2651', 'post-3414', 'post-3540']; //keyword with its related achortag is recieved here along with article id function searchAndReplace(keyword, anchorTag, articleId) { //selects the h3 h4 and p tags that are inside of the article let content = document.querySelector(`#${articleId} .entry-content`); //replaces the "linktext" in achor tag with the keyword that will be searched and replaced let newLink = anchorTag.replace('linktext', keyword); //regular expression to search keyword var re = new RegExp('(' + keyword + ')', 'g'); //this replaces the keywords in h3 h4 and p tags content with achor tag content.innerHTML = content.innerHTML.replace(re, newLink); } function articleFilter(keyword, anchorTag) { //gets all the articles var articles = document.querySelectorAll('article'); //if its zero or less then there are no articles if (articles.length > 0) { for (let x = 0; x < articles.length; x++) { //articles to skip is an array in which there are ids of articles which should not get effected //if the current article's id is also in that array then do not call search and replace with its data if (!articleIdsToSkip.includes(articles[x].id)) { //search and replace is called on articles which should get effected searchAndReplace(keyword, anchorTag, articles[x].id, key); } else { console.log( `Cannot replace the keywords in article with id ${articles[x].id}` ); } } } else { console.log('No articles found.'); } } let key; //not part of script, added for (key in keywordsAndLinks) { //key is the object in keywords and links object i.e ds, ml, ai for (let i = 0; i < keywordsAndLinks[key].keywords.length; i++) { //keywordsAndLinks[key].keywords is the array of keywords for key (ds, ml, ai) //keywordsAndLinks[key].keywords[i] is the keyword and keywordsAndLinks[key].link is the link //keyword and link is sent to searchreplace where it is then replaced using regular expression and replace function articleFilter( keywordsAndLinks[key].keywords[i], keywordsAndLinks[key].link ); } } function cleanLinks() { // (making smal functions is for DRY) this function gets the links and only keeps the first 2 and from the rest removes the anchor tag and replaces it with its text function removeLinks(links) { if (links.length > 1) { for (let i = 2; i < links.length; i++) { links[i].outerHTML = links[i].textContent; } } } //arrays which will contain all the achor tags found with the class (ds-link, ml-link, ailink) in each article inserted using search and replace let dslinks; let mllinks; let ailinks; let nllinks; let deslinks; let tdlinks; let iaslinks; let llinks; let pbplinks; let mlclinks; const content = document.querySelectorAll('article'); //all articles content.forEach((c) => { //to skip the articles with specific ids if (!articleIdsToSkip.includes(c.id)) { //getting all the anchor tags in each article one by one dslinks = document.querySelectorAll(`#${c.id} .entry-content a.ds-link`); mllinks = document.querySelectorAll(`#${c.id} .entry-content a.ml-link`); ailinks = document.querySelectorAll(`#${c.id} .entry-content a.ai-link`); nllinks = document.querySelectorAll(`#${c.id} .entry-content a.ntrl-link`); deslinks = document.querySelectorAll(`#${c.id} .entry-content a.des-link`); tdlinks = document.querySelectorAll(`#${c.id} .entry-content a.td-link`); iaslinks = document.querySelectorAll(`#${c.id} .entry-content a.ias-link`); mlclinks = document.querySelectorAll(`#${c.id} .entry-content a.mlc-link`); llinks = document.querySelectorAll(`#${c.id} .entry-content a.l-link`); pbplinks = document.querySelectorAll(`#${c.id} .entry-content a.pbp-link`); //sending the anchor tags list of each article one by one to remove extra anchor tags removeLinks(dslinks); removeLinks(mllinks); removeLinks(ailinks); removeLinks(nllinks); removeLinks(deslinks); removeLinks(tdlinks); removeLinks(iaslinks); removeLinks(mlclinks); removeLinks(llinks); removeLinks(pbplinks); } }); } //To remove extra achor tags of each category (ds, ml, ai) and only have 2 of each category per article cleanLinks(); */ //Recommended Articles var ctaLinks = [ /* ' ' + '

Subscribe to our AI newsletter!

' + */ '

Take our 85+ lesson From Beginner to Advanced LLM Developer Certification: From choosing a project to deploying a working product this is the most comprehensive and practical LLM course out there!

'+ '

Towards AI has published Building LLMs for Production—our 470+ page guide to mastering LLMs with practical projects and expert insights!

' + '
' + '' + '' + '

Note: Content contains the views of the contributing authors and not Towards AI.
Disclosure: This website may contain sponsored content and affiliate links.

' + 'Discover Your Dream AI Career at Towards AI Jobs' + '

Towards AI has built a jobs board tailored specifically to Machine Learning and Data Science Jobs and Skills. Our software searches for live AI jobs each hour, labels and categorises them and makes them easily searchable. Explore over 10,000 live jobs today with Towards AI Jobs!

' + '
' + '

🔥 Recommended Articles 🔥

' + 'Why Become an LLM Developer? Launching Towards AI’s New One-Stop Conversion Course'+ 'Testing Launchpad.sh: A Container-based GPU Cloud for Inference and Fine-tuning'+ 'The Top 13 AI-Powered CRM Platforms
' + 'Top 11 AI Call Center Software for 2024
' + 'Learn Prompting 101—Prompt Engineering Course
' + 'Explore Leading Cloud Providers for GPU-Powered LLM Training
' + 'Best AI Communities for Artificial Intelligence Enthusiasts
' + 'Best Workstations for Deep Learning
' + 'Best Laptops for Deep Learning
' + 'Best Machine Learning Books
' + 'Machine Learning Algorithms
' + 'Neural Networks Tutorial
' + 'Best Public Datasets for Machine Learning
' + 'Neural Network Types
' + 'NLP Tutorial
' + 'Best Data Science Books
' + 'Monte Carlo Simulation Tutorial
' + 'Recommender System Tutorial
' + 'Linear Algebra for Deep Learning Tutorial
' + 'Google Colab Introduction
' + 'Decision Trees in Machine Learning
' + 'Principal Component Analysis (PCA) Tutorial
' + 'Linear Regression from Zero to Hero
'+ '

', /* + '

Join thousands of data leaders on the AI newsletter. It’s free, we don’t spam, and we never share your email address. Keep up to date with the latest work in AI. From research to projects and ideas. If you are building an AI startup, an AI-related product, or a service, we invite you to consider becoming a sponsor.

',*/ ]; var replaceText = { '': '', '': '', '
': '
' + ctaLinks + '
', }; Object.keys(replaceText).forEach((txtorig) => { //txtorig is the key in replacetext object const txtnew = replaceText[txtorig]; //txtnew is the value of the key in replacetext object let entryFooter = document.querySelector('article .entry-footer'); if (document.querySelectorAll('.single-post').length > 0) { //console.log('Article found.'); const text = entryFooter.innerHTML; entryFooter.innerHTML = text.replace(txtorig, txtnew); } else { // console.log('Article not found.'); //removing comment 09/04/24 } }); var css = document.createElement('style'); css.type = 'text/css'; css.innerHTML = '.post-tags { display:none !important } .article-cta a { font-size: 18px; }'; document.body.appendChild(css); //Extra //This function adds some accessibility needs to the site. function addAlly() { // In this function JQuery is replaced with vanilla javascript functions const imgCont = document.querySelector('.uw-imgcont'); imgCont.setAttribute('aria-label', 'AI news, latest developments'); imgCont.title = 'AI news, latest developments'; imgCont.rel = 'noopener'; document.querySelector('.page-mobile-menu-logo a').title = 'Towards AI Home'; document.querySelector('a.social-link').rel = 'noopener'; document.querySelector('a.uw-text').rel = 'noopener'; document.querySelector('a.uw-w-branding').rel = 'noopener'; document.querySelector('.blog h2.heading').innerHTML = 'Publication'; const popupSearch = document.querySelector$('a.btn-open-popup-search'); popupSearch.setAttribute('role', 'button'); popupSearch.title = 'Search'; const searchClose = document.querySelector('a.popup-search-close'); searchClose.setAttribute('role', 'button'); searchClose.title = 'Close search page'; // document // .querySelector('a.btn-open-popup-search') // .setAttribute( // 'href', // 'https://medium.com/towards-artificial-intelligence/search' // ); } // Add external attributes to 302 sticky and editorial links function extLink() { // Sticky 302 links, this fuction opens the link we send to Medium on a new tab and adds a "noopener" rel to them var stickyLinks = document.querySelectorAll('.grid-item.sticky a'); for (var i = 0; i < stickyLinks.length; i++) { /* stickyLinks[i].setAttribute('target', '_blank'); stickyLinks[i].setAttribute('rel', 'noopener'); */ } // Editorial 302 links, same here var editLinks = document.querySelectorAll( '.grid-item.category-editorial a' ); for (var i = 0; i < editLinks.length; i++) { editLinks[i].setAttribute('target', '_blank'); editLinks[i].setAttribute('rel', 'noopener'); } } // Add current year to copyright notices document.getElementById( 'js-current-year' ).textContent = new Date().getFullYear(); // Call functions after page load extLink(); //addAlly(); setTimeout(function() { //addAlly(); //ideally we should only need to run it once ↑ }, 5000); }; function closeCookieDialog (){ document.getElementById("cookie-consent").style.display = "none"; return false; } setTimeout ( function () { closeCookieDialog(); }, 15000); console.log(`%c 🚀🚀🚀 ███ █████ ███████ █████████ ███████████ █████████████ ███████████████ ███████ ███████ ███████ ┌───────────────────────────────────────────────────────────────────┐ │ │ │ Towards AI is looking for contributors! │ │ Join us in creating awesome AI content. │ │ Let's build the future of AI together → │ │ https://towardsai.net/contribute │ │ │ └───────────────────────────────────────────────────────────────────┘ `, `background: ; color: #00adff; font-size: large`); //Remove latest category across site document.querySelectorAll('a[rel="category tag"]').forEach(function(el) { if (el.textContent.trim() === 'Latest') { // Remove the two consecutive spaces (  ) if (el.nextSibling && el.nextSibling.nodeValue.includes('\u00A0\u00A0')) { el.nextSibling.nodeValue = ''; // Remove the spaces } el.style.display = 'none'; // Hide the element } }); // Add cross-domain measurement, anonymize IPs 'use strict'; //var ga = gtag; ga('config', 'G-9D3HKKFV1Q', 'auto', { /*'allowLinker': true,*/ 'anonymize_ip': true/*, 'linker': { 'domains': [ 'medium.com/towards-artificial-intelligence', 'datasets.towardsai.net', 'rss.towardsai.net', 'feed.towardsai.net', 'contribute.towardsai.net', 'members.towardsai.net', 'pub.towardsai.net', 'news.towardsai.net' ] } */ }); ga('send', 'pageview'); -->