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

The Data Community As A Service
Latest   Machine Learning

The Data Community As A Service

Last Updated on July 25, 2023 by Editorial Team

Author(s): Gift Ojeabulu

Originally published on Towards AI.

An opinionated perspective on data communities, their importance, benefits, and how community members are gaining from it.

Photo by DatafestAfrica on Flickr

Why this article?

I wrote this article to educate and make data enthusiasts and practitioners see the importance of community to individuals in the data space worldwide.

Alone, we can do so little; together, we can do so much — Helen Keller.

Our world is connected and increasingly disillusioned with traditional career paths and traditional education. In such a world, is it any surprise that people put in extra effort on access to networking in the data field and learning experiences?

What is the best way to attain those experiences reliably and at a low cost?

The answer is D.C.A.A.S — Data-Community-As-A-Service.

Data community-as-a-service is the phenomenon where access to a group of data practitioners is valuable enough that we can consider it a mutual relationship between the data community and data practitioners.

For whom is this article?

  • Technical and non-technical data professionals.
  • Data enthusiasts who are interested in joining data communities to connect with other data practitioners and to get a clear path in their data careers.
  • Data professionals looking for the best data communities to join with like minds.

What you will learn?

  • Why Data Community as a service?
  • What is a data community?
  • The benefit of belonging to data communities as a data enthusiast or practitioner.
  • List of data communities for data enthusiasts, and professionals, and their specific impact.

Why Data community As A Service?

The community itself defines humans, A conglomeration of communities ‌forms states, countries, and continents.

The developer community is not an exception.

The rate at which people are getting into the tech industry in different parts of the world keeps rising every day.

Developers in this context are data practitioners since I’m talking about the data community as a service.

As data grows, the need for other data careers keeps growing since data is everywhere and information is scarce.

Data Community as a service is a concept that allows members of the data community to learn and share ideas while maintaining guardrails and parameters that allow the data community to focus on a greater purpose for the betterment of all, the success of this concept relies on the trusted status of the community, so its members feel comfortable sharing and engaging in the community-Gift Ojeabulu

As the data careers keep growing, there is a need for building data communities, since humans are naturally gregarious, I.e. humans are social.

Human beings are social animals and therefore naturally seek the companionship of others as part of their well being-Aristotle

What is a data community?

We can simply define the data community as a group of technical and non-technical people i.e Data Scientists, Data Engineers, Data Analysts, Data product managers, data community managers, and so on.

We encapsulate them under an umbrella called data practitioners that have certain attitudes or interests in common, which includes three key elements:

  1. Community participation — Answering, asking questions, and supporting each other.
  2. Organization — Organizing meetups, hackathons & Conferences.
  3. Work — Building, contributing to open source projects, & providing data solutions at their workplace.

From an organization’s perspective, a data community can be valuable for marketing and sales initiatives but the goal should be a focus on providing value to data practitioners in your community foremost, to ensure that data practitioners find value in the community worth their time, it will pay off in the long run — in summary, it is all about genuine relationship building.

Benefits of joining a community as a data scientist or machine learning engineer

In this context, A Data scientist or a Machine learning engineer represents the generic name for a data practitioner.

I use this because that is the closest profession to what I do.

If you are a data engineer, replace it as a benefit of joining a community as a data engineer.

  1. Direction.
  2. Networking & opportunity.
  3. Broadens your knowledge.
  4. Support, motivation, and persistency
  1. Direction -It directs you rightly. The Data field is full of complexities, especially for beginners. Most times, you get started and need clarification. So joining a community directs you.

You can relate and ask experienced people, then decide where to focus. You can’t learn everything in the data science field though matter how smart you are.

But getting directed on the right path, and learning what you need to learn to land a job, is very important. Since your implicit reason is to make money.

Note: A lot of beginners complain they need a mentor.

As a beginner, have you ever considered staying active in communities and asking questions when things go wrong?

Mentorship doesn’t have to be direct. A community can fill up that gap.

2. Networking opportunity — When you join a community, you ‌meet different people, and there are a lot of job opportunities in the community. Many get referrals that land them their dream job just by joining a community.

3. It expands your area of expertise -When you join a community; you notice what is happening.

It exposed you to discussions about data science-related topics. You see people giving answers to what you are struggling with.

It builds and improves you unconsciously.

4. For support, motivation & persistence — The journey can be very tough. Sometimes you discover you just keep procrastinating because of a lack of support and motivation, but when you join a community, seeing people building and learning motivates you not to give up.

My Advice: Join communities and stay active

List of top data communities for data enthusiasts, professionals, and their specific impact.

These are some lists of the data communities I have found helpful in the data space from personal experience, research, online reviews, and conversations with members of the community.

DataTalksClub

The DataTalksClub community is a global online community of data enthusiasts, Data/product analysts, data scientists, Machine learning engineers, data engineers, analytics engineers, developer advocates, and software engineer / Python developers led by Alexey Grigorev.

It is a place to talk about data, machine learning, and engineering, attend weekly events and learn from free courses, ask career questions and
discuss career options.

DataTalksClub has some amazing resources like MLOps Zoomcamp, Data Engineering Zoomcamp, and ML zoom camp.

Community guidelines, Slack channel

MLOps community

The MLOps Community Led by Demetrios Brinkmann fills the swiftly growing need to share real-world Machine Learning Operations’ best practices from engineers in the field.

The MLOps community needed a community laser-focused on solving the unique daily challenges in building production AI/ML pipelines.

The MLOps community is in 18 countries with over 5.2k members.

Examples of some MLOps local meetups are:

All Meetup Link, Slack channel

DatafestAfrica

DataFestAfrica, now Data community Africa, started as a discussion of 4 data practitioners (Gift Ojeabulu, David Abu, Oyinbooke Olarenwaju, and Opeyemi Fabiyi) who saw the need to create a community for all data-related careers in Africa.

It is the first-ever event and community that showcases and brings all career professions within the data space together in Africa.

If you are a Data Analyst, Data Scientist, Data Engineer, AI/ML Engineer, Low Code Developer, student, researcher, Data Manager, Data Consumer, or recruiter within this space, then Data Community Africa is for you.

Data Community Africa has built the data community in Africa through holding solution-based Hackathon, Conference, and interactive online community that has a track record of helping data enthusiasts and professionals.

Online Community

Kaggle

Kaggle, a subsidiary of Google LLC, is an online community of data scientists and machine learning practitioners. Kaggle allows users to find and publish data sets, explore and build models in a web-based data-science environment, work with other data scientists and machine learning engineers, and enter competitions to solve data science challenges.

Kaggle got its start in 2010 by offering machine learning competitions and now also offers a public data platform, a cloud-based workbench for data science, and Artificial Intelligence education.

CohereforAI

Cohere For AI is a non-profit research lab led by Sarah Hooker that seeks to solve complex machine-learning problems. This community supports fundamental research that explores the unknown and is focused on creating more points of entry into machine learning research.

This community is a space where researchers, engineers, linguists, social scientists, and lifelong learners connect and collaborate. Individuals come together from all over the world and welcome you, whether you are a mentor, dropout, just getting started, PhD, master’s, undergraduate, unaffiliated, industry, academic, or not sure.

The Cohere for AI community is excited to support community-driven research and to be shaped by members’ interests.

Cohere community

Datatechspace

DataTech Space (DTS) is a free online community led by Jessica Uwoghiren exclusive to individuals with an interest in Data-related fields (i.e. Data Analytics, Data Science, Data Engineering, Machine Learning, etc.) Regardless of their skill level.

This community provided a support system for budding data enthusiasts and connected them with their peers and experienced professionals.

This community has 2 levels, the telegram and discord channel.

DataTechSpace Community

YDP

Young Data Professionals (YDP) is a tribe and vibrant community of smart, young, and energetic data lovers across different levels of expertise led by Opeyemi Fabiyi.

YDP engages in robust discussions on data and proffers solutions to members’ challenging tasks. YDP also help community members sharpen their skills towards staying updated with the global trends in the Analytics space.

YDP community is the driver of dbt Lagos Nigeria U+1F1F3U+1F1EC Meetup and leads the awareness of Analytics Engineering in the African data ecosystem.

Slack community

DBT

DBT is one of the most popular open-source tools right now. The online Slack community for dbt boasts one of the largest hubs of conversation for Analytics Engineering, with over 22,700 members in total!

While the conversation is typically related to dbt and the tooling that connects to it, some of the best minds in data are actively sharing their thoughts here.

It doesn’t hurt that the community itself is one of the most welcoming, heartwarming groups out there.

DBT community

Hugging face

The Hugging Face community led by Omar Sansevero is on a journey to advance good Machine Learning and make it more accessible. Along the way, hugging face contributes to the development of technology for the better.

Hugging Face has a thriving open-source ecosystem with all backgrounds (from ML Researchers to students interested in model biases). With over a dozen open-source projects, an amazing community, and thousands of contributors and collaborators.

Thousands of creators work as a community to solve audio, vision, and language with AI.

Discord community, Forum, Classroom

MasaKhane

Masakhane is a grassroots organization whose mission is to strengthen and spur NLP research in African languages, for Africans, by Africans.

Masakhane community

Zindi

Zindi hosts the largest community of African data scientists, working to solve the world’s most pressing challenges using machine learning and AI.

Zindi connects data scientists with organizations and provides a place to learn, hone your skills, and find a job.

Zindi aims to transform the African continent and showcase African data science talent to the world.

Zindi Community

Other amazing data communities:

References

[1] Jovian Cicmil, https://medium.com/swlh/community-as-a-service-a-business-model-for-the-21st-century-b7e0612e7095 (2021)

And we draw into conclusion here…

Attending tech events, and joining & staying active in a data community, are one of the best experiences in the data space as an experienced or novice data practitioner.

Congratulations! You now have an excellent knowledge of the benefit of belonging to data communities as a data enthusiast or practitioner, data community as a service, and active data communities for data enthusiasts and professionals.

I can’t wait to see you adopt what I explained in this article and start making waves with them in the data space.

Connect with me on LinkedIn

Connect with me on Twitter

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'); -->