<?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: Obedi ndevu michael</title>
    <description>The latest articles on DEV Community by Obedi ndevu michael (@bedjoi).</description>
    <link>https://dev.to/bedjoi</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%2F992717%2F3c490606-8c8e-4583-8827-825f8f9484c8.jpeg</url>
      <title>DEV Community: Obedi ndevu michael</title>
      <link>https://dev.to/bedjoi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bedjoi"/>
    <language>en</language>
    <item>
      <title>le webRTC</title>
      <dc:creator>Obedi ndevu michael</dc:creator>
      <pubDate>Wed, 18 Jan 2023 13:36:37 +0000</pubDate>
      <link>https://dev.to/kadea-academy/le-webrtc-457d</link>
      <guid>https://dev.to/kadea-academy/le-webrtc-457d</guid>
      <description>&lt;p&gt;&lt;strong&gt;1. Comprendre le concept de WebRTC&lt;/strong&gt;&lt;br&gt;
     WebRTC (Real-Time Communications) est un ensemble d’API et de technologies qui permet aux applications web de fournir une communication audio et vidéo interactive en temps réel entre les utilisateurs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Explorer les fonctionnalités offertes par le WebRTC&lt;/strong&gt;&lt;br&gt;
      Le WebRTC offre une variété de fonctionnalités, notamment des codecs audio et vidéo, la transmission vidéo haute qualité, la voix sur IP (VoIP), la messagerie instantanée et d'autres mécanismes de communication en temps réel qui peuvent être utilisés dans des applications et des services web.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.Apprendre le fonctionnement de WebRTC&lt;/strong&gt;&lt;br&gt;
      Pour mieux comprendre le WebRTC, vous devez en apprendre un peu plus sur son fonctionnement. WebRTC utilise le protocole signaling (la communication entre les différentes connexions) pour établir des sessions audio et vidéo entre les utilisateurs. En plus de signaler, WebRTC utilise des serveurs de routage pour transmettre le streaming audio et vidéo entre les différentes connexions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Comprendre l’architecture de WebRTC&lt;/strong&gt;&lt;br&gt;
      WebRTC est conçu autour d’un environnement client-serveur où le client est généralement un navigateur web et le serveur une application WebRTC dédiée. Les clients utilisent le WebRTC API du navigateur pour interagir avec le serveur qui, à son tour, fournit les informations de session vidéo-audio et / ou de messagerie instantanée à l’utilisateur.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Explorer les utilisations courantes de WebRTC&lt;/strong&gt;&lt;br&gt;
       Les utilisations courantes de WebRTC incluent des services tels que la visioconférence, les appels VoIP, la diffusion en direct et les jeux d'interaction en temps réel. Les plateformes de streaming ​​et les services de messagerie instantanée à base de WebRTC sont également disponibles sur le marché.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&amp;lt;&amp;gt;Code&lt;/strong&gt;(&lt;a href="https://github.com/bedjoi/webrtcVd.git" rel="noopener noreferrer"&gt;https://github.com/bedjoi/webrtcVd.git&lt;/a&gt;)&lt;/p&gt;

</description>
      <category>learning</category>
      <category>discuss</category>
      <category>programming</category>
    </item>
    <item>
      <title>Pomodoro avec Html, CSS et Javascript.</title>
      <dc:creator>Obedi ndevu michael</dc:creator>
      <pubDate>Mon, 19 Dec 2022 09:49:23 +0000</pubDate>
      <link>https://dev.to/bedjoi/pomodoro-avec-html-css-et-javascript-3daa</link>
      <guid>https://dev.to/bedjoi/pomodoro-avec-html-css-et-javascript-3daa</guid>
      <description>&lt;p&gt;Dans l article,On va créer un compteur à rebours.&lt;br&gt;
Le compteur est double en ce sens qu'il passe de la séance de travail à la séance de repos.&lt;br&gt;
Le période initiale de travail est de 25 minutes et celle de repos est de 5 minutes.Que l on peut personnaliser selon le desire.&lt;br&gt;
La partie gauche, contient le réglage de minuteur et la partie droite c est pour le réglage de la pause!! la pause est dans l intervalle de 5 à 15 minute et le minuteur d une minute à une heure ou 60 minutes!!&lt;/p&gt;

&lt;p&gt;Pour la realisation de ce pomodoro,On a utiliser 3 feuilles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Une feuille Html,&lt;/li&gt;
&lt;li&gt;   Une feuille de style et&lt;/li&gt;
&lt;li&gt;   Une feuille JavaScript&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;1.Feuille Html&lt;/strong&gt;&lt;br&gt;
     Cette feuille contient les balyses Html&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;link rel="preconnect" href="https://fonts.googleapis.com"&amp;gt;
    &amp;lt;link rel="preconnect" href="https://fonts.gstatic.com" crossorigin&amp;gt;
    &amp;lt;link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600&amp;amp;display=swap" rel="stylesheet"&amp;gt;
    &amp;lt;script src="https://kit.fontawesome.com/6f3103b13c.js" crossorigin="anonymous"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;link rel="stylesheet" href="./style.css"&amp;gt;


&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;section&amp;gt;


                &amp;lt;div class="setMin painel"&amp;gt;
                    &amp;lt;button class="btnPlus btn"&amp;gt;+&amp;lt;/button&amp;gt;
                    &amp;lt;p class="comptnumber"&amp;gt;25&amp;lt;/p&amp;gt;
                    &amp;lt;button class="btnMines btn"&amp;gt;-&amp;lt;/button&amp;gt;
                &amp;lt;/div&amp;gt;

        &amp;lt;div class="container"&amp;gt;

            &amp;lt;div class="painel"&amp;gt;
                &amp;lt;p id="work"&amp;gt;work&amp;lt;/p&amp;gt;
                &amp;lt;p id="break"&amp;gt;break&amp;lt;/p&amp;gt;
            &amp;lt;/div&amp;gt;

            &amp;lt;div class="timer"&amp;gt;
                &amp;lt;div class="circle"&amp;gt;
                    &amp;lt;div class="time"&amp;gt;
                        &amp;lt;p id="minutes"&amp;gt;&amp;lt;/p&amp;gt;
                        &amp;lt;p&amp;gt;:&amp;lt;/p&amp;gt;
                        &amp;lt;p id="seconds"&amp;gt;&amp;lt;/p&amp;gt;
                    &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;

            &amp;lt;div class="controls"&amp;gt;
                &amp;lt;div&amp;gt;
                    &amp;lt;button id="start" onclick="start()"&amp;gt;&amp;lt;i class="fa-solid fa-play"&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/button&amp;gt;

                &amp;lt;a id="reset"&amp;gt;&amp;lt;i class="fa-solid fa-arrow-rotate-left"&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;div&amp;gt;
                    &amp;lt;div class="pause"&amp;gt;
                    &amp;lt;button id="pausebtn" onclick="pause()"&amp;gt;&amp;lt;i class="fa-solid fa-pause"&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/button&amp;gt;


                    &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;span class="dots"&amp;gt;&amp;lt;/span&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class="setMin painel breakmn"&amp;gt;
            &amp;lt;button class="btnPlusB btn"&amp;gt;+&amp;lt;/button&amp;gt;
            &amp;lt;p class="comptnumberB"&amp;gt;5&amp;lt;/p&amp;gt;
            &amp;lt;button class="btnMinesB btn"&amp;gt;-&amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/section&amp;gt;
    &amp;lt;script src="./script.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;

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

&lt;/div&gt;



&lt;p&gt;Dans cette feuille, on a utiliser les liens CDN pour les fonts, et icons.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;link rel="preconnect" href="https://fonts.googleapis.com"&amp;gt;&lt;br&gt;
    &amp;lt;link rel="preconnect" href="https://fonts.gstatic.com" crossorigin&amp;gt;&lt;br&gt;
    &amp;lt;link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600&amp;amp;display=swap" rel="stylesheet"&amp;gt;&lt;br&gt;
    &amp;lt;script src="https://kit.fontawesome.com/6f3103b13c.js" crossorigin="anonymous"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.Feuille de style CSS&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:root {
    font-size: 62.5%; /* 1rem = 10px */

    --color-primary: hsla(115, 19%, 87%, 0.87);
    --color-secondary: hsl(253, 77%, 47%);
    --color-font: hsl(0, 0%, 0%);

    --color-shadow: hsl(240, 6%, 20%);
}

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

html, body {
    height: 100%;
    background-image: url("https://cdn.pixabay.com/photo/2019/05/19/23/47/clouds-4215608_960_720.jpg");
    background-position: center;
  background-size:cover;
    font-size: 1.6rem;
    font-family: 'Open sans', sans-serif;
}

p,
i,
h1 {
    color: var(--color-font);
}

i {
    font-size: 3.2rem;
}

h1 {
    font-size: 3.2rem;
}

/* ==== CONTENT ==== */

section {
    display: flex;
    align-items: center;
    height: 100%;
    width: 95vw;
}

.container {
    width: min(42.5rem, 100%);
    margin-inline: auto;
    padding-inline: 2rem;
    display: flex;
    justify-content: center;
    align-items: center;
    flex-direction: column;
}

.painel {
    display: grid;
    grid-template-columns: 1fr 1fr;
    text-align: center;
    width: 20rem;
    margin-block: 5rem;
    padding: 1rem;
    border-radius: 10rem;
    box-shadow: 0px 0px 15px 10px var(--color-shadow);
}

.painel p {
    opacity: 1;
    transition: 1s ease-in;
}

.painel p.active {
    opacity: 1;
    color: var(--color-secondary);
}

.timer {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 30rem;
    height: 30rem;
    border-radius: 50%;
    -webkit-box-shadow: 0px 0px 15px 10px var(--color-shadow); 
    box-shadow: 0px 0px 15px 10px var(--color-shadow);
}

.circle {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 26rem;
    height: 26rem;
    border-radius: 50%;
    background-color: var(--color-secondary);
    position: relative;
}

.circle::before {
    content: '';
    position: absolute;
    width: 95%;
    height: 95%;
    border-radius: 50%;
    background-color: var(--color-primary);
}

.time {
    position: relative;
    display: flex;
    flex-direction: row;
}

.time p {
    font-size: 5.6rem;
}

.time p:nth-of-type(2) {
    position: relative;
    top: -.5rem;
    margin-inline: 1rem;
}

.controls {
    margin-top: 3rem;
    display: flex;
    gap: 30rem;
}

.controls button {
    border: none;
    background-color: transparent;
    cursor: pointer;
}

.controls #reset {
    display: none;
}
.setMin{
    display: grid;
    justify-content: center;
    grid-template-columns: 1fr 1fr 1fr;
    text-align: center;
    position: relative;
    left: 3rem;
    bottom: 13rem;
    gap: 5px;
}
.breakmn{
    position: relative;
    left: -6rem;


}
.btn{


    width: 2rem;
}

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3.Feuille JavaScript&lt;/strong&gt;&lt;br&gt;
    Dans cette feuille nous va contenir les Scripts;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&amp;gt; let minutes=document.getElementById('minutes');
let secondes=document.getElementById('seconds');
let btnPlus= document.querySelector('.btnPlus');
let btnMines= document.querySelector('.btnMines');
let btnPlusB= document.querySelector('.btnPlusB');
let btnMinesB= document.querySelector('.btnMinesB');
let comptnumber= document.querySelector('.comptnumber');
let comptnumberB= document.querySelector('.comptnumberB');
let pausebtn= document.querySelector('#pausebtn');
let reset=document.getElementById('reset')
let interval;
console.log(btnPlus);
console.log(btnMines);
console.log(comptnumber);


let workTittle = document.getElementById('work');
let breakTittle = document.getElementById('break');
let setMunit=parseInt(comptnumber.innerHTML);
let setbreak=parseInt(comptnumberB.innerHTML);

console.log(setbreak)

let workTime = 25;
let breakTime = 2;

let seconds = "00"


// display
window.onload = () =&amp;gt; {
    minutes.innerHTML = workTime;
    secondes.innerHTML = seconds;

    workTittle.classList.add('active');
}

// start timer
let start = ()=&amp;gt;{

    // change button
    document.getElementById('start').style.display = "none";
    document.getElementById('reset').style.display = "block";

    // change the time
    seconds = 59;

    let workMinutes = workTime - 1;
    let breakMinutes = breakTime - 1;

    breakCount = 0;

    // countdown
    let timerFunction = () =&amp;gt; {
        //change the display
        minutes.innerHTML = workMinutes;
        secondes.innerHTML = seconds;

        // start
        seconds = seconds - 1;

        if(seconds === 0) {
            workMinutes = workMinutes - 1;
            if(workMinutes === -1 ){
                if(breakCount % 2 === 0) {
                    // start break
                    workMinutes = breakMinutes;
                    breakCount++

                    // change the painel
                    workTittle.classList.remove('active');
                    breakTittle.classList.add('active');
                }else {
                    // continue work
                    workMinutes = workTime -1;
                    breakCount++

                    // change the painel
                    breakTittle.classList.remove('active');
                    workTittle.classList.add('active');
                }
            }
            seconds = 59;
        }
    }

    // start countdown
    interval= setInterval(timerFunction, 1000); // 1000 = 1s

}
const pause=()=&amp;gt;{

    document.getElementById('start').style.display = "block";
    document.getElementById('reset').style.display = "none";
    clearInterval(interval);

}
const resetbtn=()=&amp;gt;{

    document.getElementById('start').style.display = "block";
    document.getElementById('reset').style.display = "none";
    minutes.innerHTML = workTime;
    secondes.innerHTML = '00';

    workTittle.classList.add('active');
    clearInterval(interval);

}
reset.addEventListener('click',()=&amp;gt;{
    resetbtn();
})
pausebtn.addEventListener('click', ()=&amp;gt;{
    pause();
});

btnPlus.addEventListener('click', () =&amp;gt;{
    comptnumber.innerHTML =parseInt(comptnumber.innerHTML)+1;
    setMunit=comptnumber.innerHTML;
    minutes.innerHTML=comptnumber.innerHTML
    workTime=setMunit
    if(comptnumber.innerHTML==61){

        comptnumber.innerHTML=60
    }

});
btnMines.addEventListener('click', () =&amp;gt;{
    comptnumber.innerHTML =parseInt(comptnumber.innerHTML)-1;
    setMunit=comptnumber.innerHTML;
    minutes.innerHTML=comptnumber.innerHTML
    workTime=setMunit;
    if(comptnumber.innerHTML==-1){

        comptnumber.innerHTML=0;
        minutes.innerHTML=0;
    }
})
btnPlusB.addEventListener('click', () =&amp;gt;{
    comptnumberB.innerHTML =parseInt(comptnumberB.innerHTML)+1;
    setbreak=comptnumberB.innerHTML;
    breakTime=setbreak
    console.log(setbreak)
    if(comptnumberB.innerHTML==11){

        comptnumberB.innerHTML=10
    }

});
btnMinesB.addEventListener('click', () =&amp;gt;{
    comptnumberB.innerHTML =parseInt(comptnumberB.innerHTML)-1;
    setbreak=comptnumberB.innerHTML;
    breakTime=setbreak
    console.log(setbreak)
    if(comptnumberB.innerHTML==4){

        comptnumberB.innerHTML=5
    }



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

&lt;/div&gt;



&lt;p&gt;Merci de votre Attention!! et merci de vous abonner pour recevoir plus des notifications.&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
  </channel>
</rss>
