<?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: Joe Bou Khalil</title>
    <description>The latest articles on DEV Community by Joe Bou Khalil (@joe_boukhalil_a638efd870).</description>
    <link>https://dev.to/joe_boukhalil_a638efd870</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%2F3404446%2F74532f1d-f072-4b5f-aaf7-450e23b7cac1.jpg</url>
      <title>DEV Community: Joe Bou Khalil</title>
      <link>https://dev.to/joe_boukhalil_a638efd870</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joe_boukhalil_a638efd870"/>
    <language>en</language>
    <item>
      <title>Building an Advanced Color Contrast Checker for Accessibility (WCAG Guide + Auto-Fix)</title>
      <dc:creator>Joe Bou Khalil</dc:creator>
      <pubDate>Sun, 12 Apr 2026 16:02:49 +0000</pubDate>
      <link>https://dev.to/joe_boukhalil_a638efd870/building-an-advanced-color-contrast-checker-for-accessibility-wcag-guide-auto-fix-47o8</link>
      <guid>https://dev.to/joe_boukhalil_a638efd870/building-an-advanced-color-contrast-checker-for-accessibility-wcag-guide-auto-fix-47o8</guid>
      <description>&lt;p&gt;There are a lot of colors, but not all colors go together. &lt;/p&gt;

&lt;p&gt;How to choose between colors? Which colors go with each? And even how color-blind people see colors? &lt;/p&gt;

&lt;p&gt;All of these problems are solved in this code. &lt;/p&gt;

&lt;h2&gt;
  
  
  What it does?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You choose 2 colors you want. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It tells you if they go together. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can make the app choose a color that matches. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And even you can choose between different color-blind disorders. And see how the colors are seen.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;`&amp;lt;!DOCTYPE html&amp;gt;&lt;/p&gt;








Advanced Contrast Checker



body {

    font-family: Arial;

    background: #0f172a;

    color: white;

    text-align: center;

    padding: 20px;

}

.container {

    max-width: 600px;

    margin: auto;

    background: #1e293b;

    padding: 20px;

    border-radius: 15px;

}

input, select {

    margin: 10px;

    padding: 10px;

    border-radius: 10px;

}

.preview {

    margin-top: 20px;

    padding: 40px;

    border-radius: 10px;

    font-size: 22px;

}

button {

    padding: 10px;

    border-radius: 10px;

    margin: 5px;

    cursor: pointer;

}

.good {color: #22c55e;}

.medium {color: #facc15;}

.bad {color: #ef4444;}







&lt;h1&gt;🎨 Advanced Contrast Checker&lt;/h1&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;br&amp;gt;





    Normal Text

    Large Text





Check

Auto Fix



Accessible Text



&amp;lt;p id="result"&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;p id="details"&amp;gt;&amp;lt;/p&amp;gt;



&amp;lt;h3&amp;gt;Color Blind Simulation&amp;lt;/h3&amp;gt;



    None

    Protanopia

    Deuteranopia

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

&lt;/div&gt;
&lt;p&gt;function hexToRgb(hex){&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let bigint=parseInt(hex.slice(1),16);

return {r:(bigint&amp;amp;gt;&amp;amp;gt;16)&amp;amp;amp;255,g:(bigint&amp;amp;gt;&amp;amp;gt;8)&amp;amp;amp;255,b:bigint&amp;amp;amp;255};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;function luminance(r,g,b){&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let a=[r,g,b].map(v=&amp;amp;gt;{

    v/=255;

    return v&amp;amp;lt;=0.03928?v/12.92:Math.pow((v+0.055)/1.055,2.4);

});

return 0.2126*a[0]+0.7152*a[1]+0.0722*a[2];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;function contrast(c1,c2){&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let L1=luminance(c1.r,c1.g,c1.b);

let L2=luminance(c2.r,c2.g,c2.b);

return (Math.max(L1,L2)+0.05)/(Math.min(L1,L2)+0.05);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;function check(){&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let bg=document.getElementById("bg").value;

let text=document.getElementById("text").value;



let c1=hexToRgb(bg);

let c2=hexToRgb(text);



let ratio=contrast(c1,c2).toFixed(2);



let mode=document.getElementById("mode").value;

let pass = mode==="large" ? 3 : 4.5;



let result="";

let cls="";



if(ratio&amp;amp;gt;=7){ result="AAA"; cls="good";}

else if(ratio&amp;amp;gt;=pass){ result="AA"; cls="medium";}

else { result="Poor"; cls="bad"; }



document.getElementById("preview").style.background=bg;

document.getElementById("preview").style.color=text;



document.getElementById("result").innerHTML =

    `Contrast: ${ratio} - &amp;amp;lt;span class="${cls}"&amp;amp;gt;${result}&amp;amp;lt;/span&amp;amp;gt;`;



document.getElementById("details").innerHTML =

    `BG: ${bg} | TEXT: ${text}`;



speak(result);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;function autoFix(){&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let bg=document.getElementById("bg").value;

let text="#ffffff";



let c1=hexToRgb(bg);



for(let i=0;i&amp;amp;lt;=255;i++){

    let test=`rgb(${i},${i},${i})`;

    let c2={r:i,g:i,b:i};

    if(contrast(c1,c2)&amp;amp;gt;=4.5){

        document.getElementById("text").value=rgbToHex(i,i,i);

        break;

    }

}

check();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;function rgbToHex(r,g,b){&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return "#" + r,g,b].map(x=&amp;amp;gt;x.toString(16).padStart(2,"0")).join("");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;function speak(text){&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let msg=new SpeechSynthesisUtterance("Contrast is " + text);

speechSynthesis.speak(msg);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;function simulate(type){&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let preview=document.getElementById("preview");



if(type==="protanopia"){

    preview.style.filter="grayscale(50%)";

} else if(type==="deuteranopia"){

    preview.style.filter="sepia(60%)";

} else if(type==="tritanopia"){

    preview.style.filter="invert(20%)";

} else {

    preview.style.filter="none";

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

&lt;/div&gt;
&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;check();&lt;/p&gt;



&lt;p&gt;`&lt;/p&gt;

&lt;h2&gt;
  
  
  What does the code do?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Color Conversion (Hex → RGB)
&lt;/h3&gt;

&lt;p&gt;`function hexToRgb(hex){&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let bigint = parseInt(hex.slice(1),16);

return {

    r:(bigint&amp;gt;&amp;gt;16)&amp;amp;255,

    g:(bigint&amp;gt;&amp;gt;8)&amp;amp;255,

    b:bigint&amp;amp;255

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

&lt;/div&gt;

&lt;p&gt;}`&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Converts colors like #ffffff into numbers:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Red, green, and blue values (0–255)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Luminance Calculation (VERY IMPORTANT)
&lt;/h3&gt;

&lt;p&gt;`function luminance(r,g,b){&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let a=[r,g,b].map(v=&amp;gt;{

    v/=255;

    return v&amp;lt;=0.03928 ? v/12.92 : Math.pow((v+0.055)/1.055,2.4);

});

return 0.2126*a[0]+0.7152*a[1]+0.0722*a[2];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}`&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Measures how bright a color actually is&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Not just visually—mathematically accurate (WCAG standard)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;White → high luminance&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Black → low luminance&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Contrast Ratio Formula (THE CORE)
&lt;/h3&gt;

&lt;p&gt;`function contrast(c1,c2){&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let L1=luminance(c1.r,c1.g,c1.b);

let L2=luminance(c2.r,c2.g,c2.b);

return (Math.max(L1,L2)+0.05)/(Math.min(L1,L2)+0.05);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}`&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Calculates the contrast ratio between two colors&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This determines accessibility.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Output examples:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;21 → perfect contrast&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;4.5+ → good&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&amp;lt;4.5 → bad&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And here's even a &lt;a href="https://joeboukhalil.github.io/Accessible-Color-Contrast-Checker-with-Auto-Fix-Vision-Simulation/" rel="noopener noreferrer"&gt;demo&lt;/a&gt; if you want to try it yourself. &lt;/p&gt;

&lt;h2&gt;
  
  
  Who can use it?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;People who work in design. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;People who want to see colors and are colorblind. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;People in web development. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This project has been built on the view of helping people. And everything can be built with some work and mindset. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>code</category>
      <category>javascript</category>
    </item>
    <item>
      <title>From Taps to Beats: Building a Browser-Based Music Maker with JavaScript</title>
      <dc:creator>Joe Bou Khalil</dc:creator>
      <pubDate>Sun, 29 Mar 2026 09:24:21 +0000</pubDate>
      <link>https://dev.to/joe_boukhalil_a638efd870/from-taps-to-beats-building-a-browser-based-music-maker-with-javascript-293j</link>
      <guid>https://dev.to/joe_boukhalil_a638efd870/from-taps-to-beats-building-a-browser-based-music-maker-with-javascript-293j</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Creating music is very beautiful, especially with some tools that help. &lt;/p&gt;

&lt;p&gt;This tool is a technique to build or combine beats to make sounds. Very easy and very helpful. &lt;/p&gt;

&lt;h1&gt;
  
  
  What does it do?
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You can record sounds. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stop it when you finish. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Play it. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And then download it. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  What it's used for
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Make sounds. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Try different beats. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Try mixing your own sounds. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Code
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Audio Engine (creates sound)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;let audioCtx = new (window.AudioContext || window.webkitAudioContext)();&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This is the core. Without it no sound plays. &lt;/p&gt;

&lt;h2&gt;
  
  
  Sound Generator (oscillator)
&lt;/h2&gt;

&lt;p&gt;`let osc = audioCtx.createOscillator();&lt;/p&gt;

&lt;p&gt;osc.frequency.value = 200;&lt;/p&gt;

&lt;p&gt;osc.start();&lt;/p&gt;

&lt;p&gt;osc.stop(audioCtx.currentTime + 0.1);`&lt;/p&gt;

&lt;p&gt;This is what actually produces the beep sound.&lt;/p&gt;

&lt;p&gt;You change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;frequency → pitch&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;type → sound style&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Recording Timing (rhythm `capture)
&lt;/h2&gt;

&lt;p&gt;let now = Date.now();&lt;/p&gt;

&lt;p&gt;taps.push(now - lastTap);&lt;/p&gt;

&lt;p&gt;lastTap = now;`&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;This records the time between taps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;That’s how your app understands rhythm.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Playback Loop (beat repetition)
&lt;/h2&gt;

&lt;p&gt;`function loop() {&lt;/p&gt;

&lt;p&gt;playSound();&lt;/p&gt;

&lt;p&gt;setTimeout(() =&amp;gt; {&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;loop();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}, taps[i]);&lt;/p&gt;

&lt;p&gt;} `&lt;/p&gt;

&lt;p&gt;This repeats the pattern → turning taps into a looping beat&lt;/p&gt;

&lt;h2&gt;
  
  
  Pad Interaction + Sequence Storage
&lt;/h2&gt;

&lt;p&gt;`sequence.push({&lt;/p&gt;

&lt;p&gt;delay: now - lastTime,&lt;/p&gt;

&lt;p&gt;sound: type&lt;/p&gt;

&lt;p&gt;});`&lt;/p&gt;

&lt;p&gt;This is what makes your 6-button beat pad work.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Stores which sound&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stores when it was played&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://joeboukhalil.github.io/TapBeat-Studio-Browser-Beat-Maker-Recorder/" rel="noopener noreferrer"&gt;Demo if you want to try it yourself.&lt;/a&gt; &lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;This tool is a representation of what coding can do and achieve. &lt;/p&gt;

&lt;p&gt;It's becoming more possible and possible to achieve big deals using AI today. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>code</category>
      <category>music</category>
      <category>programming</category>
    </item>
    <item>
      <title>Building a simulator using AI for children to learn</title>
      <dc:creator>Joe Bou Khalil</dc:creator>
      <pubDate>Thu, 27 Nov 2025 09:33:38 +0000</pubDate>
      <link>https://dev.to/joe_boukhalil_a638efd870/building-a-simulator-using-ai-for-children-to-learn-40op</link>
      <guid>https://dev.to/joe_boukhalil_a638efd870/building-a-simulator-using-ai-for-children-to-learn-40op</guid>
      <description>&lt;p&gt;Building with ai has become easier and is becoming easier every day. You can do almost anything using AI. And the best thing to do is help people to learn. &lt;/p&gt;

&lt;p&gt;This is why I created Flower Growth Simulator Interactive Plant Learning. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4nzt2l05o8rzcwd0ce47.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4nzt2l05o8rzcwd0ce47.jpg" alt=" " width="800" height="1551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's easy; it shows you how the plant grows when you modify the water, soil health, and sun. &lt;/p&gt;

&lt;p&gt;Easy but effective if you want to see how a plant grows over time. &lt;/p&gt;

&lt;p&gt;For kids it's of great importance; it could teach them about plants. It could teach them the importance of taking care of a flower. Using only a simulator. &lt;/p&gt;

&lt;p&gt;Try it here: &lt;a href="https://joeboukhalil.github.io/Flower-Growth-Simulator-Interactive-Plant-Learning/" rel="noopener noreferrer"&gt;demo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>learning</category>
      <category>kids</category>
    </item>
    <item>
      <title>Fireworks from lines</title>
      <dc:creator>Joe Bou Khalil</dc:creator>
      <pubDate>Sun, 23 Nov 2025 12:47:42 +0000</pubDate>
      <link>https://dev.to/joe_boukhalil_a638efd870/fireworks-from-lines-1j2a</link>
      <guid>https://dev.to/joe_boukhalil_a638efd870/fireworks-from-lines-1j2a</guid>
      <description>&lt;p&gt;A simple 2 lines collision to form fireworks. &lt;/p&gt;

&lt;p&gt;Check out this Pen I made!&lt;/p&gt;

&lt;p&gt;

&lt;iframe height="600" src="https://codepen.io/JoeBouKhalil4/embed/jEqaexR?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;


&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>webdev</category>
      <category>fireworks</category>
      <category>ai</category>
    </item>
    <item>
      <title>Audio &amp; Voice Separator in Python (Built with AI Assistance)</title>
      <dc:creator>Joe Bou Khalil</dc:creator>
      <pubDate>Fri, 22 Aug 2025 15:21:09 +0000</pubDate>
      <link>https://dev.to/joe_boukhalil_a638efd870/audio-voice-separator-in-python-built-with-ai-assistance-5g10</link>
      <guid>https://dev.to/joe_boukhalil_a638efd870/audio-voice-separator-in-python-built-with-ai-assistance-5g10</guid>
      <description>&lt;p&gt;I’m excited to share one of my latest projects. an audio separator that can separate the components of music into vocals, drums, and instruments. Not just that, I also built a voice separator that focuses only on human speech.&lt;/p&gt;

&lt;p&gt;This project was created in Python, and I built it with the help of AI for guidance and troubleshooting. In other words, to facilitate the work. Which AI never fails to do. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is the project?
&lt;/h2&gt;

&lt;p&gt;The goal of this project is simple:&lt;/p&gt;

&lt;p&gt;Take an audio file (a song, a podcast, or any recording).&lt;/p&gt;

&lt;p&gt;Strip it into individual components like vocals, drums, guitar, etc. &lt;/p&gt;

&lt;p&gt;Or extract only the human voice, filtering out background sounds. This is simple, no fancy equipment, nothing, just some Python codes. &lt;/p&gt;

&lt;h2&gt;
  
  
  This is useful for:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Musicians who want instrumentals for practice.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Podcasters who need cleaner speech. without background noises or sounds that could make the audio unclear. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And even developers who are experimenting with audio processing can benefit from it. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So as you see, it's not just one field tool. It's for all. &lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;The project uses Python with libraries, which include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Spleeter: for splitting music into parts (vocals, drums, bass, etc.).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Librosa: for analyzing and processing audio. It's like the mind of the code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sound device &amp;amp; sound file: for recording audio and then saving it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scipy: for signal filtering.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;NumPy: for efficient mathematical operations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example: Music Separation
&lt;/h3&gt;

&lt;p&gt;Feed in a song, then get separate audio files for vocals, drums, bass, and more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example: voice separation
&lt;/h3&gt;

&lt;p&gt;Record speech if you don't have it ready or load an audio file. Extract only the spoken voice, and ignore the background sounds. &lt;/p&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;This project is licensed under the &lt;strong&gt;MIT License&lt;/strong&gt;, so you are free to use and modify it as you wish without any backlash. &lt;/p&gt;

&lt;h2&gt;
  
  
  AI's role
&lt;/h2&gt;

&lt;p&gt;This project was built with the help of AI assistance for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Writing separation scripts. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging dependency issues. Or make it more powerful, in other words. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Structuring the repository and documentation. to make it easier to scan. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was an exciting way to collaborate with AI to build this project. &lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Working on this project showed me how powerful open-source tools and AI collaboration can be with the right mindset and the willingness to help. If you’re interested in audio, Python, or machine learning, I’d love for you to check it out and share feedback!&lt;/p&gt;

&lt;p&gt;GitHub Repository: &lt;a href="https://github.com/Joeboukhalil/Audio-Splitter-Voice-Music-Separator.git" rel="noopener noreferrer"&gt;Audio Splitter Voice Music Separator&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>ai</category>
      <category>podcast</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Building a Communication Tool for People with Disabilities Using JavaScript and AI</title>
      <dc:creator>Joe Bou Khalil</dc:creator>
      <pubDate>Fri, 08 Aug 2025 09:05:53 +0000</pubDate>
      <link>https://dev.to/joe_boukhalil_a638efd870/building-a-communication-tool-for-people-with-disabilities-using-javascript-and-ai-13pl</link>
      <guid>https://dev.to/joe_boukhalil_a638efd870/building-a-communication-tool-for-people-with-disabilities-using-javascript-and-ai-13pl</guid>
      <description>&lt;p&gt;Communication is one of the basics of human needs, but for many people with disabilities, speaking can be a huge challenge. I wanted to create a simple tool that anyone can use and lets people communicate using just one finger, tapping directions (arrows) to form Morse code, then combining letters to make them into words spoken aloud.&lt;/p&gt;

&lt;p&gt;The best part. I built this entirely with basic web technologies (HTML, CSS, and JavaScript), with no fancy installs or complicated setups. With the help of AI, I was able to translate my Python-based idea into a mobile-friendly web app that works on phones and laptops alike.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Build This?
&lt;/h2&gt;

&lt;p&gt;This project is proof that anyone, even without deep coding expertise, can create helpful tools using freely available resources. It’s about giving people who struggle to communicate a way of expressing themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;The page uses 4 directions: left, right, up, and down, just like on a keyboard’s arrow keys:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Left arrow = Dot (.)&lt;/li&gt;
&lt;li&gt;Right arrow = Dash (-)&lt;/li&gt;
&lt;li&gt;Up arrow = End Letter (tap once) &lt;/li&gt;
&lt;li&gt;Down arrow = Speak the phrase aloud&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can input Morse code by tapping or pressing left/right arrows, end letters and words with up arrows, and speak your word with the down arrow. There's also a Delete button to erase the last dot or dash before completing a letter.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Code
&lt;/h2&gt;

&lt;p&gt;Here’s a breakdown of the foundational parts of the HTML/JS code powering the app:&lt;/p&gt;

&lt;h3&gt;
  
  
  Morse Code Dictionary
&lt;/h3&gt;

&lt;p&gt;Using simple object to map dot/dash sequences to letters and numbers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const morseDict = { ".-": "A", "-...": "B", "-.-.": "C", /* ... */, "----.": "9" }; 

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Variables to Track State
&lt;/h3&gt;

&lt;p&gt;Keeping track of:&lt;/p&gt;

&lt;p&gt;currentMorse: the dots and dashes for the current letter&lt;/p&gt;

&lt;p&gt;currentWord: the letters forming the current word&lt;/p&gt;

&lt;p&gt;phrase: the full phrase composed so far&lt;/p&gt;

&lt;p&gt;lastUpTime: to detect single vs double tap on the up arrow&lt;/p&gt;

&lt;h3&gt;
  
  
  Updating the Display
&lt;/h3&gt;

&lt;p&gt;Updating the UI to show the current Morse code, word, and phrase:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function updateDisplay() { morseCodeEl.textContent = currentMorse; currentWordEl.textContent = currentWord; fullPhraseEl.textContent = phrase; } 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Handling Input (Keyboard &amp;amp; Buttons)
&lt;/h3&gt;

&lt;p&gt;The app listens for arrow key presses and button clicks, translating them into Morse code signals:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;window.addEventListener("keydown", (event) =&amp;gt; { switch(event.key) { case "ArrowLeft": currentMorse += "."; break; case "ArrowRight": currentMorse += "-"; break; // ... handle Up, Down, Space keys } updateDisplay(); }); 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And for mobile or users who prefer tapping, the UI provides big buttons for each control with the same logic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Speaking the Phrase
&lt;/h3&gt;

&lt;p&gt;Using the browser's built-in SpeechSynthesis API, the app reads out the phrase aloud:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function speak(text) { if (!text) return; const utterance = new SpeechSynthesisUtterance(text); window.speechSynthesis.speak(utterance); } 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Try It Yourself!
&lt;/h2&gt;

&lt;p&gt;You can use this tool directly in any modern browser, no downloads required. It works on laptops, desktops, tablets, and smartphones.&lt;/p&gt;

&lt;p&gt;Here's the page if you are interested in seeing it live. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;We need tools like this because these tools help facilitate communication for people who have difficulty speaking or typing. By combining the two together (simple directional inputs with Morse code), users can form words, which then, in turn, the app could say out loud.&lt;/p&gt;

&lt;p&gt;Thanks to AI, I was able to build this web app, proving that technology can work to empower everyone.&lt;/p&gt;

&lt;p&gt;Here's the &lt;a href="https://joeboukhalil.github.io/Tap-to-Morse-Key/" rel="noopener noreferrer"&gt;page&lt;/a&gt; if you are interested in seeing it live. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>web</category>
      <category>web3</category>
    </item>
    <item>
      <title>Why You Should Learn Python Today</title>
      <dc:creator>Joe Bou Khalil</dc:creator>
      <pubDate>Fri, 01 Aug 2025 01:41:33 +0000</pubDate>
      <link>https://dev.to/joe_boukhalil_a638efd870/why-you-should-learn-python-today-aao</link>
      <guid>https://dev.to/joe_boukhalil_a638efd870/why-you-should-learn-python-today-aao</guid>
      <description>&lt;p&gt;In a world increasingly run by technology, learning to code is no longer just for specific people. It's a valuable skill for anyone who wants to better understand the world we live in. And if you're thinking of diving in, there's no better time to start especially with Python.&lt;/p&gt;

&lt;p&gt;Here’s why.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python Is Beginner-Friendly
&lt;/h2&gt;

&lt;p&gt;Python is often described from my point of view as "the father of programming”, and for good reason. It's one of the most approachable programming languages, especially for those new to coding.&lt;/p&gt;

&lt;p&gt;Take a look:&lt;/p&gt;

&lt;p&gt;`age = 18 &lt;/p&gt;

&lt;p&gt;if age &amp;gt;= 18:&lt;/p&gt;

&lt;p&gt;print("You can vote!") &lt;/p&gt;

&lt;p&gt;else:&lt;/p&gt;

&lt;p&gt;print("Sorry, you're too young.")` &lt;/p&gt;

&lt;p&gt;Nothing over the edge. Just simple logic.&lt;/p&gt;

&lt;p&gt;With just a few key concepts, anyone can start building programs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python Powers AI, the Tech of the Future
&lt;/h2&gt;

&lt;p&gt;Artificial Intelligence (AI) is rapidly transforming everything around us, from healthcare and education to transportation and finance. Behind many of these fields? Python.&lt;/p&gt;

&lt;p&gt;Libraries like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tensor&lt;/li&gt;
&lt;li&gt;Flow&lt;/li&gt;
&lt;li&gt;PyTorch&lt;/li&gt;
&lt;li&gt;Scikit-learn&lt;/li&gt;
&lt;li&gt;OpenCV&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Are written in Python and widely used by AI researchers. If you're curious about machine learning or natural language processing, learning Python is your way to see the potentials in these fields. &lt;/p&gt;

&lt;h2&gt;
  
  
  You Can Build Almost Anything with Python
&lt;/h2&gt;

&lt;p&gt;Python isn't just for AI; its potential makes it the go-to for programmers wanting to learn programming. With it, you can build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Robots: using platforms like Raspberry Pi or Arduino (with PyFirmata)&lt;/li&gt;
&lt;li&gt;Web apps: with frameworks like Django or Flask&lt;/li&gt;
&lt;li&gt;Mobile apps: with tools like Kivy or BeeWare&lt;/li&gt;
&lt;li&gt;Games: with Pygame&lt;/li&gt;
&lt;li&gt;Automation scripts: to simplify daily tasks&lt;/li&gt;
&lt;li&gt;APIs &amp;amp; bots: for social media, messaging, and more&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Everything Has Code Behind It
&lt;/h2&gt;

&lt;p&gt;Every technology, from smartphones and laptops to smartwatches and even your smart fridge, every digital device is powered by code. By learning how to code, you unlock the ability to influence the technologies shaping our world.&lt;/p&gt;

&lt;p&gt;Python helps bridge that gap by being a high-level language that connects real-world applications to beginner-friendly syntax.&lt;/p&gt;

&lt;p&gt;Coding isn't just for techies—it's for makers and problem-solvers. &lt;/p&gt;

&lt;h2&gt;
  
  
  Core Python Concepts to Get You Started
&lt;/h2&gt;

&lt;p&gt;When learning Python, you'll encounter essential building blocks like&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;if, else, and elif: for decision-making&lt;/li&gt;
&lt;li&gt;for and while loops: for repeating tasks&lt;/li&gt;
&lt;li&gt;def: to create your own functions&lt;/li&gt;
&lt;li&gt;Import: to use powerful libraries&lt;/li&gt;
&lt;li&gt;class: for building reusable components (OOP)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't just random keywords; they're the tools you'll use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts: Python Opens Doors
&lt;/h2&gt;

&lt;p&gt;Whether you're a student, a professional, or just someone curious about technology, learning Python can benefit both you and the community.&lt;/p&gt;

&lt;p&gt;It's more than just a language. It’s a way to create and solve.&lt;/p&gt;

&lt;p&gt;So if you've ever wanted to build something or understand how modern tech works, start with Python.&lt;/p&gt;

</description>
      <category>python</category>
      <category>learning</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
