<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: David Adeaga</title>
    <description>The latest articles on DEV Community by David Adeaga (@deecreativewriter).</description>
    <link>https://dev.to/deecreativewriter</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1207396%2Fe313df1d-527f-48bd-82d9-e0e030811439.jpg</url>
      <title>DEV Community: David Adeaga</title>
      <link>https://dev.to/deecreativewriter</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/deecreativewriter"/>
    <language>en</language>
    <item>
      <title>Leveraging CI/CD for Streamlined Software Development and Deployment</title>
      <dc:creator>David Adeaga</dc:creator>
      <pubDate>Sun, 21 Jan 2024 23:43:24 +0000</pubDate>
      <link>https://dev.to/deecreativewriter/leveraging-cicd-for-streamlined-software-development-and-deployment-417b</link>
      <guid>https://dev.to/deecreativewriter/leveraging-cicd-for-streamlined-software-development-and-deployment-417b</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As a developer, whether you're just starting out or a seasoned pro, you'll reach a point where you want your project accessible to the world. To achieve this, you have two choices: manual deployment or automating the deployment process. Both methods get your project online, but they come with different speeds and challenges. Manual deployment tends to be slower, potentially causing delays and issues like scalability problems, rollback difficulties, and limited testing. This is where Continuous Integration/Continuous Deployment (CI/CD) steps in to save the day.&lt;/p&gt;

&lt;p&gt;In this article, you will learn "why, how, and what" to understand when CI/CD implementation is needed for your next project, providing you with all the information needed to get started with building CI/CD pipelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why CI/CD?
&lt;/h2&gt;

&lt;p&gt;CI/CD have emerged as critical practices in the ever-changing landscape of software development. It represents a transformative approach, streamlining the way software is built, tested, and deployed. By automating these critical steps, CI/CD significantly reduces development cycle times, allowing developers to deliver high-quality software to users more quickly. &lt;/p&gt;

&lt;p&gt;One of the main selling points of CI/CD is automated testing. As a developer, when you push your code to platforms like Github, testing could be overlooked. This is where CI/CD pipelines step in by including automated testing stages configured by the developer. These tests help catch bugs and issues early in the development process. This ensures that code changes maintain or improve overall software quality.&lt;/p&gt;

&lt;p&gt;Furthermore, CI/CD improves collaboration within development teams and allows for quick adaptation to changing requirements. Because of its ability to empower developers and improve software delivery, CI/CD has become an essential component of modern development pipelines, ensuring that software remains agile, robust, and efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  How To Get Started
&lt;/h2&gt;

&lt;p&gt;To get started with CI/CD, you'll need to learn about CI/CD platforms and &lt;a href="https://www.redhat.com/en/topics/automation/what-is-yaml" rel="noopener noreferrer"&gt;YAML configuration files&lt;/a&gt;, which define your pipeline. Pipelines, as they are commonly referred to, are series of steps that outline the process leading up to the release of a software feature&lt;/p&gt;

&lt;p&gt;Choosing the right CI/CD platform and mastering YAML configuration are critical steps in optimizing your software development process. First, choose a CI/CD platform from popular options such as &lt;a href="https://www.jenkins.io/" rel="noopener noreferrer"&gt;Jenkins&lt;/a&gt;, &lt;a href="https://www.travis-ci.com/" rel="noopener noreferrer"&gt;Travis CI&lt;/a&gt;, &lt;a href="https://circleci.com/" rel="noopener noreferrer"&gt;CircleCI&lt;/a&gt;, &lt;a href="https://docs.gitlab.com/ee/ci/" rel="noopener noreferrer"&gt;GitLab&lt;/a&gt; CI/CD, or &lt;a href="https://github.com/features/actions" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt; that meets the needs of your project and integrates seamlessly with your development stack. &lt;/p&gt;

&lt;p&gt;After you've decided, go over the YAML configuration, which serves as the blueprint for your CI/CD pipeline. YAML provides a clear structure for defining the steps your pipeline should take, thanks to indentation and key-value pairs. To ensure that YAML parses correctly, pay close attention to indentation.&lt;/p&gt;

&lt;p&gt;Next, begin your CI/CD journey by writing a simple YAML file that handles basic tasks such as code compilation and unit testing. To get started, most CI/CD platforms provide extensive documentation and examples. As you gain confidence, gradually increase the level of complexity by adding stages such as integration tests, code quality checks, and automated deployments to different environments. &lt;/p&gt;

&lt;p&gt;Remember to keep your YAML files in your project's version control system, such as Git, to maintain version history and effectively collaborate with your team. Before deploying your pipeline, thoroughly review and test it for errors, taking advantage of CI/CD platforms' &lt;a href="https://en.wikipedia.org/wiki/Dry_run_(testing)" rel="noopener noreferrer"&gt;"dry run"&lt;/a&gt; mode for safe testing. Finally, to ensure your development, keep up with the ever-changing CI/CD landscape through continuous learning, community support, and platform documentation.&lt;/p&gt;

&lt;p&gt;A basic process diagram for implementing a CI/CD:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fietyxm7z2mmuyzcxjyvp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fietyxm7z2mmuyzcxjyvp.png" alt="process diagram" width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What To Expect
&lt;/h2&gt;

&lt;p&gt;By embracing CI/CD, you can expect to have an organised  workflow, deliver high-quality software more faster, and respond quickly to new requirements and user needs, ultimately driving efficiency and excellence in your development endeavors. Issues revolving around security will become a thing of the past and also have a better developer expirience overall. &lt;/p&gt;

&lt;h2&gt;
  
  
  Who Should Embrace CI/CD
&lt;/h2&gt;

&lt;p&gt;If you're a software developer, no matter your specialization (front-end, back-end, DevOps, or platform engineering), CI/CD is your ally. It streamlines your work, accelerates your projects, and makes your life easier. Whether you're launching your first website or managing a complex system, CI/CD is a game-changer.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;As the saying goes, "The only way to do great work is to love what you do," and CI/CD loves to make great work possible. CI/CD is essential in software development and should be practiced by all.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Web Accessibility: A Web for Everyone by Empowering Inclusion and Equal Access for All</title>
      <dc:creator>David Adeaga</dc:creator>
      <pubDate>Sun, 21 Jan 2024 23:36:02 +0000</pubDate>
      <link>https://dev.to/deecreativewriter/web-accessibility-a-web-for-everyone-by-empowering-inclusion-and-equal-access-for-all-582a</link>
      <guid>https://dev.to/deecreativewriter/web-accessibility-a-web-for-everyone-by-empowering-inclusion-and-equal-access-for-all-582a</guid>
      <description>&lt;p&gt;&lt;strong&gt;Table of content:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;History of netizens and the web&lt;/li&gt;
&lt;li&gt;Measuring color contrast for visually impaired users&lt;/li&gt;
&lt;li&gt;Understanding the power of alternative text&lt;/li&gt;
&lt;li&gt;A practical example of using  WAI ARIA label for custom component development&lt;/li&gt;
&lt;li&gt;Understanding WCAG (Web Content Accessibility Guidelines) and its compliance requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a id="item-one"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In today's connected world, the internet has shaped how we learn, work, communicate, and access information, becoming a crucial part of our daily lives. The internet presents a lot of opportunities for empowerment, knowledge sharing, and economic development with its vast selection of websites, applications, and digital services. However, while the internet has unlocked a world of opportunities, it has also unintentionally put obstacles in the way of some people, excluding them from its abundant resources.&lt;/p&gt;

&lt;p&gt;The concept of "Web for Everyone" prioritized inclusion, accessibility, and equal access for all users, regardless of their skills, backgrounds, or technological resources. It highlights the significance of creating web experiences that cater to the diverse needs of people with disabilities, the elderly, those living in areas with low bandwidth, and users dealing with a range of socioeconomic challenges.&lt;/p&gt;

&lt;p&gt;In this article, We delve into the significance of empowering inclusion in web development and how it can contribute to an online environment that is more equitable. We look at the fundamentals of accessibility as well as the tools and methods that web designers can use to create truly inclusive web experiences that make sure no one is left out of the digital revolution.&lt;/p&gt;

&lt;p&gt;&lt;a id="item-two"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  History of netizens and the web
&lt;/h2&gt;

&lt;p&gt;The World Wide Web was created in the early 1990s, and the idea of netizens, or citizens of the internet, started to take shape. Initially, the web primarily catered to a niche group of tech enthusiasts, academics, and researchers. Accessibility wasn't a major issue during this time because most people used desktop computers with straightforward text-based user interfaces to access the internet.&lt;/p&gt;

&lt;p&gt;Graphical user interfaces spread as the web gained popularity. Users with disabilities, however, faced difficulties as a result of this transition. For example, image-based content that lacked alternative text descriptions created barriers for the visually impaired and made it challenging for screen readers to effectively communicate information.&lt;/p&gt;

&lt;p&gt;Organizations and standards bodies started pushing for a more inclusive web in response to growing accessibility concerns. The World Wide Web Consortium (W3C) launched the Web Accessibility Initiative (WAI) in 1999. WAI concentrated on developing policies and procedures to improve the accessibility of the web for those with disabilities. The Web Content Accessibility Guidelines (WCAG) framework has become a vital tool for developers to use when creating accessible websites.&lt;/p&gt;

&lt;p&gt;While significant progress has been made, web accessibility remains an ongoing challenge. The rapid evolution of technology, including the Internet of Things (IoT), artificial intelligence (AI), and virtual reality (VR), brings new accessibility considerations to the forefront. Ensuring equal access for all netizens will continue to be a vital aspect of the web's future.&lt;/p&gt;

&lt;p&gt;&lt;a id="item-three"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Measuring color contrast for visually impaired users
&lt;/h2&gt;

&lt;p&gt;To ensure that digital content is readable and usable by all users, including those with visual impairments, color's role in accessibility, particularly regarding contrast, is essential. The difference in luminance (brightness) between two colors—typically the color of the background and the foreground text—is referred to as contrast. Regardless of a user's visual abilities, a sufficient contrast ratio is necessary to make content readable and distinguishable.&lt;/p&gt;

&lt;p&gt;Here is an example of how to text for contrast while building an application using Chrome DevTool.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Open the web page you want to analyze in Google Chrome.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open Chrome DevTools by right-clicking on the page and &lt;br&gt;
selecting "Inspect" or pressing the F12 key on Windows/Linux or Cmd + Option + I on macOS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In DevTools, click on the "Elements" tab to inspect the HTML structure of the page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Locate the element that contains the text whose color contrast you want to measure. You can do this by hovering over the elements in the "Elements" panel to highlight them on the page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once you've identified the element, click on it in the "Elements" panel. This will bring up the "Styles" section on the right-hand side of DevTools, showing the CSS styles applied to the element.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An example of a good color contrast. &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz8bo9vj10erbo8qyvaoi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz8bo9vj10erbo8qyvaoi.png" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a id="item-four"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the power of alternative text
&lt;/h2&gt;

&lt;p&gt;Alternative text, also known as "alt text," is a vital component of web accessibility that improves the usability of websites for people with visual impairments. Screen readers can now convey information to users who are unable to directly perceive these visual elements by using alt text, which offers a text-based alternative to non-text content like images, graphics, and multimedia elements. It guarantees that everyone can understand and interact with the content on a website, regardless of their knowledge or skills.&lt;/p&gt;

&lt;p&gt;There are numerous benefits to using a proper, concise, and yet descriptive alt text for images, ranging from better SEO (Search Engine Optimization), great accessibility, Compliance with WCAG (Web Content Accessibility Guidelines), and an awesome user experience. These benefits are the benchmark for a well-performing product that prioritizes inclusion. However, alt text can be excluded for certain images that are not important for SEO, such as a landing page image. This can be achieved by giving the image an empty alt value, which will force a screen reader to omit this image.&lt;/p&gt;

&lt;h4&gt;
  
  
  A simple code example of an alternative text
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Alt Text Example&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Mountain Landscape&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"mountain.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Scenic view of a majestic mountain landscape with snow-capped peaks and a serene lake in the foreground."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a id="item-five"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical example of using  WAI ARIA label for custom component development
&lt;/h2&gt;

&lt;p&gt;Let's look at a real-world example of how to improve the accessibility of a custom tabbed component using WAI-ARIA (Web Accessibility Initiative: Accessible Rich Internet Applications) attributes. A common user interface element used to structure and organize content presentation is a tabbed component.&lt;/p&gt;

&lt;p&gt;In this example, we will be creating an accessible tab component using HTML, CSS, and WAI-ARIA attributes to improve accessibility for screen reader users.&lt;/p&gt;

&lt;h4&gt;
  
  
  HTML Structure
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Accessible Tabbed Component&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/css"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"styles.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tabbed-container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;aria-selected=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;aria-controls=&lt;/span&gt;&lt;span class="s"&gt;"tab-content-1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Tab 1&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;aria-selected=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;aria-controls=&lt;/span&gt;&lt;span class="s"&gt;"tab-content-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Tab 2&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;aria-selected=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;aria-controls=&lt;/span&gt;&lt;span class="s"&gt;"tab-content-3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Tab 3&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"tab-content-1"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Content for Tab 1&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"tab-content-2"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Content for Tab 2&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"tab-content-3"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Content for Tab 3&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  CSS (Styles)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.tabbed-container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;space-between&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.tab&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f0f0f0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.tab-content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.tab-content&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;aria-hidden&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"false"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we've created a basic tabbed component with three tabs and corresponding content panels. To enhance accessibility, we've used WAI-ARIA attributes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;role="tab"&lt;/code&gt; : Indicates that the button element serves as a tab.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;aria-selected&lt;/code&gt; : Indicates whether a tab is currently selected (true) or not (false).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;aria-controls&lt;/code&gt; : Associates each tab with the corresponding content panel.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We've also used &lt;code&gt;aria-hidden&lt;/code&gt; in the CSS to control the visibility of the tab content based on its selected state.&lt;/p&gt;

&lt;p&gt;&lt;a id="item-six"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding WCAG (Web Content Accessibility Guidelines) and its compliance requirements
&lt;/h2&gt;

&lt;p&gt;The Web Accessibility Initiative (WAI) of the World Wide Web Consortium (W3C) created a set of guidelines known as the Web Content Accessibility Guidelines (WCAG). These recommendations are made to guarantee that digital content, such as websites and web applications, is accessible to those who have disabilities. No matter a user's abilities, WCAG offers a framework for producing content that is perceivable, operable, understandable, and robust. &lt;/p&gt;

&lt;p&gt;WCAG is organized into four main principles, each of which is supported by specific guidelines and success criteri. The &lt;/p&gt;

</description>
    </item>
    <item>
      <title>A comprehensive guide to pinia</title>
      <dc:creator>David Adeaga</dc:creator>
      <pubDate>Sun, 21 Jan 2024 23:25:50 +0000</pubDate>
      <link>https://dev.to/deecreativewriter/a-comprehensive-guide-to-pinia-3cgi</link>
      <guid>https://dev.to/deecreativewriter/a-comprehensive-guide-to-pinia-3cgi</guid>
      <description>&lt;p&gt;Pinia is a new state management tool for vue js. It has been widely accepted within the vue js community due to its simplicity, efficiency, scalability, and flexibility. However, a lot of Vue developers still find themselves using Vuex due to limited information and a better understanding of the advantages of using pinia.&lt;/p&gt;

&lt;p&gt;In this article, I will be explaining how a vue.js developer can quickly get the best out of Pinia by implementing an example app that features some of the use cases needed while working with Pinia. Readers interested in Vue JS will find this article very helpful, and an experienced Vue developer with knowledge of pinia will also build on their prior knowledge using this technology.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Pinia&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pinia is a state management solution that is based on the Vue JS concept of reactivity. In Vue JS, reactivity is a core feature that allows Vue JS to set up a remote tracking system for data that is reactive and automatically update the user interface when there is a change in these data properties.&lt;br&gt;
Pinia builds on this core reactivity system by providing a way to manage the state of a Vue.js application in a reactive and efficient way. With Pinia, you can define a centralized store that holds all the state for your application and then use that store to manage your data and update the user interface as needed.&lt;br&gt;
It offers a more effective, adaptable, and scalable approach to managing the state of your Vue.js applications in order to ease the process of maintaining application state. Pinia, which is based on the Composition API, has a number of advantages over more established state management programs like Vuex.&lt;br&gt;
Pinia is compatible with both Vue 2 and Vue 3, so you don't have to trouble yourself with issues regarding versioning.&lt;/p&gt;

&lt;p&gt;Let's get started with setting up Pinia Store in a fresh Vue.js application.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;vue create pinia_tutorial
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click enter to continue, and please follow the on-screen guide to complete the setup. Once completed, you will be prompted with these messages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;🎉  Successfully created project pinia_tutorial.
👉  Get started with the following commands:
 cd pinia_tutorial
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CD to move into this new scalfold pinia_tutorial and run the next command to add pinia to the codebase.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;vue add pinia
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Doing it this way will ensure that all the configurations needed for the store to function well will automatically be done for you, however, if you use yarn or npm to install it. You will have to manually do those configurations yourself.&lt;br&gt;
There might be a file path error after the installation. Don't panic; just shut down the serve and rerun your npm run serve or yarn serve, depending on what you are using, and you should have a bug-free app.&lt;/p&gt;

&lt;p&gt;Now, Let's do some real quick practical examples on creating and using the store.&lt;/p&gt;

&lt;p&gt;store/index.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineStore&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pinia&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;useCounterStore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defineStore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;counter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="na"&gt;getters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;double&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;//In vuex you will have to create a mutaion to do this directly&lt;/span&gt;
      &lt;span class="c1"&gt;//but, it's allowed here because pinia preaches flexibility&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nf"&gt;decrement&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the usage of vuex, there should  be states, mutations, getters, and actions, and you are not allowed to make changes to state data from within an action. To do that, you will have to create a mutation to update the data. Now the big deal is that pinia allows you to make changes to state data from within an action. Now the code above is a counter store that is defined to increment or decrease the count value;&lt;/p&gt;

&lt;p&gt;Let's create a button in HelloWorld.vue so we can have a visual representation of what we are trying to achieve.&lt;/p&gt;

&lt;p&gt;HelloWorld.vue&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;template&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hello"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;{{ count }}&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"incrementHandler"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn base-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Increment
    &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"decrementHandler"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn base-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Decrement
    &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the code snippet above, there are two buttons with a click event on each. Our aim is to create a click action that will eventually dispatch the actions in the Pinia store.&lt;/p&gt;

&lt;p&gt;HelloWorld.vue&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;setup&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useCounterStore&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../store&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;computed&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useCounterStore&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getCounter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;incrementHandler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decrementHandler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decrement&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In Pinia, stores are modules, so we have to import them before using them. reason why useCounterStore was imported and assigned to a new variable was ease of use. Instead of dispatching actions the vuex way, for example, $store.dispatch('action_name'). Pinia allows us to trigger the action directly with "store.increment," which is cleaner and  better.&lt;/p&gt;

&lt;p&gt;In conclusion, Pinia offers a robust and adaptable state management solution for Vue.js applications overall. It's a fantastic option for a variety of applications thanks to its straightforward API, flexible architecture, support for plugins, and support for custom stores. Pinia is unquestionably something to take into consideration if you're searching for a small and simple-to-use state management library for your Vue.js application.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Web Accessibility: A Web for Everyone by Empowering Inclusion and Equal Access for All</title>
      <dc:creator>David Adeaga</dc:creator>
      <pubDate>Sun, 21 Jan 2024 19:01:33 +0000</pubDate>
      <link>https://dev.to/deecreativewriter/web-accessibility-a-web-for-everyone-by-empowering-inclusion-and-equal-access-for-all-19nd</link>
      <guid>https://dev.to/deecreativewriter/web-accessibility-a-web-for-everyone-by-empowering-inclusion-and-equal-access-for-all-19nd</guid>
      <description>&lt;p&gt;&lt;strong&gt;Table of content:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;History of netizens and the web&lt;/li&gt;
&lt;li&gt;Measuring color contrast for visually impaired users&lt;/li&gt;
&lt;li&gt;Understanding the power of alternative text&lt;/li&gt;
&lt;li&gt;A practical example of using  WAI ARIA label for custom component development&lt;/li&gt;
&lt;li&gt;Understanding WCAG (Web Content Accessibility Guidelines) and its compliance requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a id="item-one"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In today's connected world, the internet has shaped how we learn, work, communicate, and access information, becoming a crucial part of our daily lives. The internet presents a lot of opportunities for empowerment, knowledge sharing, and economic development with its vast selection of websites, applications, and digital services. However, while the internet has unlocked a world of opportunities, it has also unintentionally put obstacles in the way of some people, excluding them from its abundant resources.&lt;/p&gt;

&lt;p&gt;The concept of "Web for Everyone" prioritized inclusion, accessibility, and equal access for all users, regardless of their skills, backgrounds, or technological resources. It highlights the significance of creating web experiences that cater to the diverse needs of people with disabilities, the elderly, those living in areas with low bandwidth, and users dealing with a range of socioeconomic challenges.&lt;/p&gt;

&lt;p&gt;In this article, We delve into the significance of empowering inclusion in web development and how it can contribute to an online environment that is more equitable. We look at the fundamentals of accessibility as well as the tools and methods that web designers can use to create truly inclusive web experiences that make sure no one is left out of the digital revolution.&lt;/p&gt;

&lt;p&gt;&lt;a id="item-two"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  History of netizens and the web
&lt;/h2&gt;

&lt;p&gt;The World Wide Web was created in the early 1990s, and the idea of netizens, or citizens of the internet, started to take shape. Initially, the web primarily catered to a niche group of tech enthusiasts, academics, and researchers. Accessibility wasn't a major issue during this time because most people used desktop computers with straightforward text-based user interfaces to access the internet.&lt;/p&gt;

&lt;p&gt;Graphical user interfaces spread as the web gained popularity. Users with disabilities, however, faced difficulties as a result of this transition. For example, image-based content that lacked alternative text descriptions created barriers for the visually impaired and made it challenging for screen readers to effectively communicate information.&lt;/p&gt;

&lt;p&gt;Organizations and standards bodies started pushing for a more inclusive web in response to growing accessibility concerns. The World Wide Web Consortium (W3C) launched the Web Accessibility Initiative (WAI) in 1999. WAI concentrated on developing policies and procedures to improve the accessibility of the web for those with disabilities. The Web Content Accessibility Guidelines (WCAG) framework has become a vital tool for developers to use when creating accessible websites.&lt;/p&gt;

&lt;p&gt;While significant progress has been made, web accessibility remains an ongoing challenge. The rapid evolution of technology, including the Internet of Things (IoT), artificial intelligence (AI), and virtual reality (VR), brings new accessibility considerations to the forefront. Ensuring equal access for all netizens will continue to be a vital aspect of the web's future.&lt;/p&gt;

&lt;p&gt;&lt;a id="item-three"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Measuring color contrast for visually impaired users
&lt;/h2&gt;

&lt;p&gt;To ensure that digital content is readable and usable by all users, including those with visual impairments, color's role in accessibility, particularly regarding contrast, is essential. The difference in luminance (brightness) between two colors—typically the color of the background and the foreground text—is referred to as contrast. Regardless of a user's visual abilities, a sufficient contrast ratio is necessary to make content readable and distinguishable.&lt;/p&gt;

&lt;p&gt;Here is an example of how to text for contrast while building an application using Chrome DevTool.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Open the web page you want to analyze in Google Chrome.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open Chrome DevTools by right-clicking on the page and &lt;br&gt;
selecting "Inspect" or pressing the F12 key on Windows/Linux or Cmd + Option + I on macOS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In DevTools, click on the "Elements" tab to inspect the HTML structure of the page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Locate the element that contains the text whose color contrast you want to measure. You can do this by hovering over the elements in the "Elements" panel to highlight them on the page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once you've identified the element, click on it in the "Elements" panel. This will bring up the "Styles" section on the right-hand side of DevTools, showing the CSS styles applied to the element.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An example of a good color contrast. &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz8bo9vj10erbo8qyvaoi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz8bo9vj10erbo8qyvaoi.png" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a id="item-four"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the power of alternative text
&lt;/h2&gt;

&lt;p&gt;Alternative text, also known as "alt text," is a vital component of web accessibility that improves the usability of websites for people with visual impairments. Screen readers can now convey information to users who are unable to directly perceive these visual elements by using alt text, which offers a text-based alternative to non-text content like images, graphics, and multimedia elements. It guarantees that everyone can understand and interact with the content on a website, regardless of their knowledge or skills.&lt;/p&gt;

&lt;p&gt;There are numerous benefits to using a proper, concise, and yet descriptive alt text for images, ranging from better SEO (Search Engine Optimization), great accessibility, Compliance with WCAG (Web Content Accessibility Guidelines), and an awesome user experience. These benefits are the benchmark for a well-performing product that prioritizes inclusion. However, alt text can be excluded for certain images that are not important for SEO, such as a landing page image. This can be achieved by giving the image an empty alt value, which will force a screen reader to omit this image.&lt;/p&gt;

&lt;h4&gt;
  
  
  A simple code example of an alternative text
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Alt Text Example&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Mountain Landscape&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"mountain.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Scenic view of a majestic mountain landscape with snow-capped peaks and a serene lake in the foreground."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a id="item-five"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical example of using  WAI ARIA label for custom component development
&lt;/h2&gt;

&lt;p&gt;Let's look at a real-world example of how to improve the accessibility of a custom tabbed component using WAI-ARIA (Web Accessibility Initiative: Accessible Rich Internet Applications) attributes. A common user interface element used to structure and organize content presentation is a tabbed component.&lt;/p&gt;

&lt;p&gt;In this example, we will be creating an accessible tab component using HTML, CSS, and WAI-ARIA attributes to improve accessibility for screen reader users.&lt;/p&gt;

&lt;h4&gt;
  
  
  HTML Structure
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Accessible Tabbed Component&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/css"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"styles.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tabbed-container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;aria-selected=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;aria-controls=&lt;/span&gt;&lt;span class="s"&gt;"tab-content-1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Tab 1&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;aria-selected=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;aria-controls=&lt;/span&gt;&lt;span class="s"&gt;"tab-content-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Tab 2&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;aria-selected=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;aria-controls=&lt;/span&gt;&lt;span class="s"&gt;"tab-content-3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Tab 3&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"tab-content-1"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Content for Tab 1&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"tab-content-2"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Content for Tab 2&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"tab-content-3"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Content for Tab 3&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  CSS (Styles)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.tabbed-container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;space-between&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.tab&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f0f0f0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.tab-content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.tab-content&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;aria-hidden&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"false"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we've created a basic tabbed component with three tabs and corresponding content panels. To enhance accessibility, we've used WAI-ARIA attributes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;role="tab"&lt;/code&gt; : Indicates that the button element serves as a tab.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;aria-selected&lt;/code&gt; : Indicates whether a tab is currently selected (true) or not (false).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;aria-controls&lt;/code&gt; : Associates each tab with the corresponding content panel.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We've also used &lt;code&gt;aria-hidden&lt;/code&gt; in the CSS to control the visibility of the tab content based on its selected state.&lt;/p&gt;

&lt;p&gt;&lt;a id="item-six"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding WCAG (Web Content Accessibility Guidelines) and its compliance requirements
&lt;/h2&gt;

&lt;p&gt;The Web Accessibility Initiative (WAI) of the World Wide Web Consortium (W3C) created a set of guidelines known as the Web Content Accessibility Guidelines (WCAG). These recommendations are made to guarantee that digital content, such as websites and web applications, is accessible to those who have disabilities. No matter a user's abilities, WCAG offers a framework for producing content that is perceivable, operable, understandable, and robust. &lt;/p&gt;

&lt;p&gt;WCAG is organized into four main principles, each of which is supported by specific guidelines and success criteri. The principles or benchmark for a website is for them to be perceivable, operable, understandable and robust. It also has three level of comformancy. &lt;/p&gt;

&lt;p&gt;A, AA, and AAA are the three levels of WCAG conformance. With Level A being the most fundamental and AAA being the highest level of accessibility, each level builds on the prerequisites of the one before it. Since it strikes a good balance between accessibility enhancements and implementation effort, the AA level is frequently regarded as the ideal for the majority of websites and applications.&lt;/p&gt;

&lt;p&gt;Here is a link to learn more about this &lt;a href="https://www.w3.org/WAI/standards-guidelines/wcag/" rel="noopener noreferrer"&gt;guidelines&lt;/a&gt; from the WCAG website.&lt;/p&gt;

&lt;p&gt;In conclusion, web accessibility is not merely an optional feature but a fundamental necessity for creating an inclusive and equitable digital space for all. As the internet becomes an increasingly integral part of our daily lives, it is crucial to ensure that individuals with disabilities can participate fully and benefit from its vast resources. &lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
