Tuesday, October 19, 2010

jQuery & JSON to draw single-elimination tournament bracket

Often I see sites that present tournament brackets as an image (even on fairly technical sites, eg http://us.battle.net/sc2/en/blog/936927#blog). Purely out of curiosity, I decided to see what would be involved in merely providing the data from the server and letting an HTML UI build up on the fly using jQuery. To avoid needing to produce a server for this I simply hard-coded in JSON that might have been returned from a server with (very) basic information about the tournament:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us">
<head>
  <title>MyTournamentName</title>
 <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js' type='text/javascript'>
 </script>
 <script src='http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js' type='text/javascript'>
 </script>  
  <script type="text/javascript">  
    var matchInfo = {
      "rounds" : [
        { "name": "Round1",
          "matches" : [
            { "id" : 1, "p1" : "mTwDeMuslim", "p2" : "Luffy" },
            { "id" : 2, "p1" : "SeleCT", "p2" : "NEXGenius" },
            { "id" : 3, "p1" : "Fenix", "p2" : "SoftBall" },
            { "id" : 4, "p1" : "White-Ra", "p2" : "Ice" },
            { "id" : 5, "p1" : "HuK", "p2" : "RedArchon" },
            { "id" : 6, "p1" : "Capoch", "p2" : "Loner" },
            { "id" : 7, "p1" : "mTwDIMAGA", "p2" : "MakaPrime" },
            { "id" : 8, "p1" : "TLAF-Liquid`TLO", "p2" : "SEN" }
          ]
        },
        { "name": "Round2",
          "matches" : [
            { "id" : 9, "p1" : null, "p2" : null },
            { "id" : 10, "p1" : null, "p2" : null },
            { "id" : 11, "p1" : null, "p2" : null },
            { "id" : 12, "p1" : null, "p2" : null }
          ]
        },
        { "name": "Round3",
          "matches" : [
            { "id" : 13, "p1" : null, "p2" : null },
            { "id" : 14, "p1" : null, "p2" : null },
          ]
        },
        { "name": "Round4",
          "matches" : [
            { "id" : 15, "p1" : null, "p2" : null },
          ]
        }                
      ]
    };
  </script>
</head>
<body>
  <div>blah blah blah</div>
  <div id="writeHere" class="tournament"></div>
  <div>blah blah blah</div>
</body>
</html>
Next we need to write some jQuery code to fill in the div with id="writeHere" with our purely html-based tournament bracket. Easy enough to do (note that some rudimentary css has been slapped in to show us where which bits are):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us">
<head>
  <title>MyTournamentName</title>
 <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js' type='text/javascript'>
 </script>
 <script src='http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js' type='text/javascript'>
 </script>  
  <style type="text/css">
  .tournament {    
    background-color: #F0F0F0;
    border: dashed 1px solid;
    overflow: auto;
  }
  .tournament .bracket {
    background-color: #DFDFDF;
    min-width: 100px;    
    vertical-align: top;
    float: left;
  }
  
  .tournament .bracket .match {
    background-color: #D0D0D0;
    border-top: 1px solid;
    border-right: 1px solid;
    border-bottom: 1px solid;  
  }
  .tournament .bracket .match .p1 {    
    height: 20px;
  }
  .tournament .bracket .match .p2 {
    height: 20px;
  }    
  .tournament .bracket .match .spacer {
    background-color: #DFDFDF;
    height: 38px;
  }
  .tournament .bracket .spacer {
    height: 80px;
  }
  .tournament .bracket .half-spacer {
    height: 40px;
  }
  .tournament .bracket .small-spacer {
    height: 10px;
    background-color: #F1F1F1;
  }
  
  .left-line {
    border-left: 1px solid;
  }
  
  .tournament .cell {
    min-width: 100px;
    height: 20px;
    float: left;
    background-color: #DFDFDF;    
  }   
  .tournament .l2 {
    background-color: #D0D0D0;
  }     
  .tournament .lmax {
    width: 0px;
    clear: both;
  }    
  </style>
  <script type="text/javascript">
  
    var matchInfo = {
      "rounds" : [
        { "name": "Round1",
          "matches" : [
            { "id" : 1, "p1" : "mTwDeMuslim", "p2" : "Luffy" },
            { "id" : 2, "p1" : "SeleCT", "p2" : "NEXGenius" },
            { "id" : 3, "p1" : "Fenix", "p2" : "SoftBall" },
            { "id" : 4, "p1" : "White-Ra", "p2" : "Ice" },
            { "id" : 5, "p1" : "HuK", "p2" : "RedArchon" },
            { "id" : 6, "p1" : "Capoch", "p2" : "Loner" },
            { "id" : 7, "p1" : "mTwDIMAGA", "p2" : "MakaPrime" },
            { "id" : 8, "p1" : "TLAF-Liquid`TLO", "p2" : "SEN" }
          ]
        },
        { "name": "Round2",
          "matches" : [
            { "id" : 9, "p1" : null, "p2" : null },
            { "id" : 10, "p1" : null, "p2" : null },
            { "id" : 11, "p1" : null, "p2" : null },
            { "id" : 12, "p1" : null, "p2" : null }
          ]
        },
        { "name": "Round3",
          "matches" : [
            { "id" : 13, "p1" : null, "p2" : null },
            { "id" : 14, "p1" : null, "p2" : null },
          ]
        },
        { "name": "Round4",
          "matches" : [
            { "id" : 15, "p1" : null, "p2" : null },
          ]
        }                
      ]
    };
  
    $(document).ready(function($) {       
      var base = $('#writeHere');
      var numTeams = 16;
      var matchesByRound = setupMatchboxes(numTeams);
      
      for (var lvl=0; lvl<matchesByRound.length; lvl++) {                
        var matchBoxes = matchesByRound[lvl];        
        var bracket = checkedAppend('<div class="bracket"></div>', base);
        
        for (var i=0; i<matchBoxes.length; i++) {                     
          var match = matchInfo.rounds[lvl].matches[i];
          var matchHtml = '<div class="match" id="match' + match.id + '">'
            + '<div class="p1">' + fmtName(match.p1) + '</div>'
            + '<div class="spacer"></div>'
            + '<div class="p2">' + fmtName(match.p2) + '</div>';
          checkedAppend(matchHtml, bracket);  
        }
      }      
    });
    
    function fmtName(name) {
      return null != name ? name : '?';
    }
    
    function setupMatchboxes(numTeams) {
      var numLevels = Math.log(numTeams)/Math.LN2;
      var numMatchesForLevel = numTeams / 2;
      var matchBoxes = [];
      
      do {
        var matchesForLevel = [];        
        matchBoxes.push(matchesForLevel);
        
        for (var match=0; match<numMatchesForLevel; match++) {
          matchesForLevel.push(match);
        }
        
        numMatchesForLevel = numMatchesForLevel / 2;
      } while(numMatchesForLevel >= 1);
      return matchBoxes;
    }
    
    function checkedAppend(rawHtml, appendTo) {
      var html = $(rawHtml);
      if (0 == html.length) {
        throw "Built ourselves bad html : " + rawHtml;
      }
      html.appendTo(appendTo);      
      return html;
    }
  </script>
</head>
<body>
  <div>blah blah blah</div>
  <div id="writeHere" class="tournament"></div>
  <div>blah blah blah</div>
</body>
</html>
However, this doesn't line things up quite as nicely as one might hope (to say the least):

We have a couple of clear problems:

  1. We probably want a small vertical space between the first row of matches.
  2. For rows 2..N, a match needs to line up such that its top is at the center of one of the matches on the previous row and its bottom is at the center of another. The specific offset helpfully changes from row to row. It turns out to be a bit of a pain to write css for this so instead we'll just write jQuery code to manually size elements for our first pass. Eg we want something like this (note inconsistent sizing and positioning row to row):
Luckily jQuery provides convenient accessors for height and position so we can write code that literally says "make a vertical spacing div that is half the size of that div and make my div tall enough to stretch from there to there". The main thing that will need an update is that we'll need to keep references to the divs as we go along row by row. This will let us easily set things relative to other things similar to:
var newH = stretchTo.position().top + stretchTo.height()/2 - matchDiv.position().top;
This will ultimately yield the following javascript gibberish:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us">
<head>
  <title>MyTournamentName</title>
 <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js' type='text/javascript'>
 </script>
 <script src='http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js' type='text/javascript'>
 </script>  
  <style type="text/css">
  .tournament {    
    background-color: #F0F0F0;
    border: dashed 1px solid;
    overflow: auto;
  }
  .tournament .bracket {
    background-color: #DFDFDF;
    min-width: 100px;    
    vertical-align: top;
    float: left;
  }
  
  .tournament .bracket .match {
    background-color: #D0D0D0;
    border-top: 1px solid;
    border-right: 1px solid;
    border-bottom: 1px solid;  
  }
  .tournament .bracket .match .p1 {    
    height: 20px;
  }
  .tournament .bracket .match .p2 {
    height: 20px;
  }    
  .tournament .bracket .match .spacer {
    background-color: #DFDFDF;
    height: 38px;
  }
  .tournament .bracket .spacer {
    height: 80px;
  }
  .tournament .bracket .half-spacer {
    height: 40px;
  }
  .tournament .bracket .small-spacer {
    height: 10px;
    background-color: #F1F1F1;
  }
  
  .left-line {
    border-left: 1px solid;
  }
  
  .tournament .cell {
    min-width: 100px;
    height: 20px;
    float: left;
    background-color: #DFDFDF;    
  }   
  .tournament .l2 {
    background-color: #D0D0D0;
  }     
  .tournament .lmax {
    width: 0px;
    clear: both;
  }    
  </style>
  <script type="text/javascript">
  
    var matchInfo = {
      "rounds" : [
        { "name": "Round1",
          "matches" : [
            { "id" : 1, "p1" : "mTwDeMuslim", "p2" : "Luffy" },
            { "id" : 2, "p1" : "SeleCT", "p2" : "NEXGenius" },
            { "id" : 3, "p1" : "Fenix", "p2" : "SoftBall" },
            { "id" : 4, "p1" : "White-Ra", "p2" : "Ice" },
            { "id" : 5, "p1" : "HuK", "p2" : "RedArchon" },
            { "id" : 6, "p1" : "Capoch", "p2" : "Loner" },
            { "id" : 7, "p1" : "mTwDIMAGA", "p2" : "MakaPrime" },
            { "id" : 8, "p1" : "TLAF-Liquid`TLO", "p2" : "SEN" }
          ]
        },
        { "name": "Round2",
          "matches" : [
            { "id" : 9, "p1" : null, "p2" : null },
            { "id" : 10, "p1" : null, "p2" : null },
            { "id" : 11, "p1" : null, "p2" : null },
            { "id" : 12, "p1" : null, "p2" : null }
          ]
        },
        { "name": "Round3",
          "matches" : [
            { "id" : 13, "p1" : null, "p2" : null },
            { "id" : 14, "p1" : null, "p2" : null },
          ]
        },
        { "name": "Round4",
          "matches" : [
            { "id" : 15, "p1" : null, "p2" : null },
          ]
        }                
      ]
    };
  
    $(document).ready(function($) {       
      var base = $('#writeHere');
      var numTeams = 16;
      var matchesByRound = setupMatchboxes(numTeams);
      var matchDivsByRound = [];
      
      for (var lvl=0; lvl<matchesByRound.length; lvl++) {                
        var matchBoxes = matchesByRound[lvl];        
        var bracket = checkedAppend('<div class="bracket"></div>', base);
        var matchDivs = [];
        matchDivsByRound.push(matchDivs);
        
        for (var i=0; i<matchBoxes.length; i++) {                     
          var vOffset = checkedAppend('<div></div>', bracket);
        
          var match = matchInfo.rounds[lvl].matches[i];
          var matchHtml = '<div class="match" id="match' + match.id + '">'
            + '<div class="p1">' + fmtName(match.p1) + '</div>'
            + '<div class="spacer"></div>'
            + '<div class="p2">' + fmtName(match.p2) + '</div>';
          matchDiv = checkedAppend(matchHtml, bracket);
          matchDivs.push(matchDiv);
          
          if (lvl > 0) {
            //row 2+; line up with previous row
            var alignTo = matchDivsByRound[lvl-1][i*2];
            //offset to line up tops
            var desiredOffset = alignTo.position().top - matchDiv.position().top;
            
            //offset by half the previous match-height
            desiredOffset += alignTo.height() / 2;
            vOffset.height(desiredOffset);            
          } else {
            checkedAppend('<div class="small-spacer"></div>', bracket);
          }
          
          if (lvl > 0) {
            //tweak our size so we stretch to the middle of the appropriate element
            var stretchTo = matchDivsByRound[lvl-1][i*2+1];
            var newH = stretchTo.position().top + stretchTo.height()/2 - matchDiv.position().top;            
            var deltaH = newH - matchDiv.height();
            matchDiv.height(newH);
            var spacer = matchDiv.find('.spacer');
            spacer.height(spacer.height() + deltaH);
          }          
        }
      }      
    });
    
    function fmtName(name) {
      return null != name ? name : '?';
    }
    
    function setupMatchboxes(numTeams) {
      var numLevels = Math.log(numTeams)/Math.LN2;
      var numMatchesForLevel = numTeams / 2;
      var matchBoxes = [];
      
      do {
        var matchesForLevel = [];        
        matchBoxes.push(matchesForLevel);
        
        for (var match=0; match<numMatchesForLevel; match++) {
          matchesForLevel.push(match);
        }
        
        numMatchesForLevel = numMatchesForLevel / 2;
      } while(numMatchesForLevel >= 1);
      return matchBoxes;
    }
    
    function checkedAppend(rawHtml, appendTo) {
      var html = $(rawHtml);
      if (0 == html.length) {
        throw "Built ourselves bad html : " + rawHtml;
      }
      html.appendTo(appendTo);      
      return html;
    }
  </script>
</head>
<body>
  <div>blah blah blah</div>
  <div id="writeHere" class="tournament"></div>
  <div>blah blah blah</div>
</body>
</html>
On nice modern browsers this yields something like this:

Last of all lets clean up our javascript slightly, in particular making our code a little more directly based on the JSON and a little less on hard-coded test variables like numTeams. And lets add a spot for the final victor:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us">
<head>
  <title>MyTournamentName</title>
 <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js' type='text/javascript'>
 </script>
 <script src='http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js' type='text/javascript'>
 </script>  
  <style type="text/css">
  .tournament {    
    background-color: #F0F0F0;
    border: dashed 1px solid;
    overflow: auto;
  }
  .tournament .bracket {
    background-color: #DFDFDF;
    min-width: 100px;    
    vertical-align: top;
    float: left;
  }
  
  .tournament .bracket .match {
    background-color: #D0D0D0;
    border-top: 1px solid;
    border-right: 1px solid;
    border-bottom: 1px solid;  
  }
  .tournament .bracket .match .p1 {    
    height: 20px;
  }
  .tournament .bracket .match .p2 {
    height: 20px;
  }    
  .tournament .bracket .match .spacer {
    background-color: #DFDFDF;
    height: 38px;
  }
  .tournament .bracket .spacer {
    height: 80px;
  }
  .tournament .bracket .half-spacer {
    height: 40px;
  }
  .tournament .bracket .small-spacer {
    height: 10px;
    background-color: #F1F1F1;
  }
  .tournament .bracket .winner {
    border-bottom: 1px solid;
  }
  
  .left-line {
    border-left: 1px solid;
  }
  
  .tournament .cell {
    min-width: 100px;
    height: 20px;
    float: left;
    background-color: #DFDFDF;    
  }   
  .tournament .l2 {
    background-color: #D0D0D0;
  }     
  .tournament .lmax {
    width: 0px;
    clear: both;
  }    
  </style>
  <script type="text/javascript">
  
    var matchInfo = {
      "rounds" : [
        { "name": "Round1",
          "matches" : [
            { "id" : 1, "p1" : "mTwDeMuslim", "p2" : "Luffy" },
            { "id" : 2, "p1" : "SeleCT", "p2" : "NEXGenius" },
            { "id" : 3, "p1" : "Fenix", "p2" : "SoftBall" },
            { "id" : 4, "p1" : "White-Ra", "p2" : "Ice" },
            { "id" : 5, "p1" : "HuK", "p2" : "RedArchon" },
            { "id" : 6, "p1" : "Capoch", "p2" : "Loner" },
            { "id" : 7, "p1" : "mTwDIMAGA", "p2" : "MakaPrime" },
            { "id" : 8, "p1" : "TLAF-Liquid`TLO", "p2" : "SEN" }
          ]
        },
        { "name": "Round2",
          "matches" : [
            { "id" : 9, "p1" : null, "p2" : null },
            { "id" : 10, "p1" : null, "p2" : null },
            { "id" : 11, "p1" : null, "p2" : null },
            { "id" : 12, "p1" : null, "p2" : null }
          ]
        },
        { "name": "Round3",
          "matches" : [
            { "id" : 13, "p1" : null, "p2" : null },
            { "id" : 14, "p1" : null, "p2" : null },
          ]
        },
        { "name": "Round4",
          "matches" : [
            { "id" : 15, "p1" : null, "p2" : null },
          ]
        } 
      ]
    };
  
    $(document).ready(function($) {       
      var base = $('#writeHere');
      var matchDivsByRound = [];
      
      for (var roundIndex=0; roundIndex<matchInfo.rounds.length; roundIndex++) {    
        var round = matchInfo.rounds[roundIndex];
        var bracket = checkedAppend('<div class="bracket"></div>', base);
        var matchDivs = [];
        matchDivsByRound.push(matchDivs);
        
        //setup the match boxes round by round
        for (var i=0; i<round.matches.length; i++) {                     
          var vOffset = checkedAppend('<div></div>', bracket);
        
          var match = round.matches[i];
          var matchHtml = '<div class="match" id="match' + match.id + '">'
            + '<div class="p1">' + fmtName(match.p1) + '</div>'
            + '<div class="spacer"></div>'
            + '<div class="p2">' + fmtName(match.p2) + '</div>';
          matchDiv = checkedAppend(matchHtml, bracket);
          matchDivs.push(matchDiv);
          
          if (roundIndex > 0) {
            //row 2+; line up with previous row
            var alignTo = matchDivsByRound[roundIndex-1][i*2];
            //offset to line up tops
            var desiredOffset = alignTo.position().top - matchDiv.position().top;
            
            //offset by half the previous match-height
            desiredOffset += alignTo.height() / 2;
            vOffset.height(desiredOffset);            
          } else {
            checkedAppend('<div class="small-spacer"></div>', bracket);
          }
          
          if (roundIndex > 0) {
            //tweak our size so we stretch to the middle of the appropriate element
            var stretchTo = matchDivsByRound[roundIndex-1][i*2+1];
            var newH = stretchTo.position().top + stretchTo.height()/2 - matchDiv.position().top;            
            var deltaH = newH - matchDiv.height();
            matchDiv.height(newH);
            var spacer = matchDiv.find('.spacer');
            spacer.height(spacer.height() + deltaH);
          }          
        }                
      }
      //setup the final winners box; just a space for a name whose bottom is centrally aligned with the last match
      bracket = checkedAppend('<div class="bracket"></div>', base);
      var vOffset = checkedAppend('<div></div>', bracket);
      var alignTo = matchDivsByRound[matchInfo.rounds.length - 1][0]; //only 1 match in the last round
      var html = '<div class="winner">?</div>';
      var winnerDiv = checkedAppend(html, bracket);      
      vOffset.height(alignTo.position().top - winnerDiv.position().top + alignTo.height() / 2 - winnerDiv.height());
    });
    
    function fmtName(name) {
      return null != name ? name : '?';
    }
    
    function checkedAppend(rawHtml, appendTo) {
      var html = $(rawHtml);
      if (0 == html.length) {
        throw "Built ourselves bad html : " + rawHtml;
      }
      html.appendTo(appendTo);      
      return html;
    }
  </script>
</head>
<body>
  <div>blah blah blah</div>
  <div id="writeHere" class="tournament"></div>
  <div>blah blah blah</div>
</body>
</html>

Ugly, but sized and positioned the way we want, ready to actually talk to a server and/or get some dynamic elements (eg the ability to designate a winner and have them promote through the tournament).

Ultimately this will hopefully get rolled up into a practicum project involving tournament management.

405 comments:

«Oldest   ‹Older   201 – 400 of 405   Newer›   Newest»
Rashika said...

Good article! I found some useful educational information in your blog about Data Science, it was awesome to read, thanks for sharing this great content to my vision.
Java training in chennai | Java training in annanagar | Java training in omr | Java training in porur | Java training in tambaram | Java training in velachery

Abhishek said...

nice Post Mock Test Free

siva sreedhar said...

I like your post very much. It is very useful for my research. I hope you can share more info about this. Keep posting
Workday Integration training

Workday Studio training
Tableau online training
Tableau Server training
Tableau Advanced training
ETL Testing Training

hotsservices said...

thanks for Share nice post

freelance seo expert in noida

freelance seo expert in delhi

Janu said...

Keep up the good work; I read few posts on this website, including I consider that your blog is fascinating and has sets of the fantastic piece of information.



Dot Net Training in Chennai | Dot Net Training in anna nagar | Dot Net Training in omr | Dot Net Training in porur | Dot Net Training in tambaram | Dot Net Training in velachery


shakunthala said...

thanks for sharing this blog .
best training institute in bangalore
best software training institutes in bangalore

Full Stack Web Developer Training & Certification

full stack developer course

mean Stack Development Training

Ramya said...

thanks for this useful information.
full stack training in bangalore
Dot Net Training Institutes in Bangalore
best angular js training in bangalore

Node js training in Bangalore
React js training in Bangalore

mean Stack Development Training

Lucy Brown said...

https://28maoribattalion.org.nz/user/lucybrown39
https://www.domestika.org/en/lucybrown39
https://band.us/band/80299418/intro
https://leetcode.com/lucybrown39/
https://www.noteflight.com/profile/e24a5a6e3ab5bd1f01cb2a31900a4a9cf3397331
https://www.jigsawplanet.com/lucybrown39?viewas=3163b88b5b57
https://www.proequest.com/member/lucy-brown
http://www.seoinpractice.com/viewuser.html?userid=cb682929ae30c6fb
https://wdd.resellerclub.com/members/lucybrown39/profile/

Anonymous said...
This comment has been removed by the author.
shakunthala said...

thanks for sharing this.
best training institute in bangalore
best software training institutes in bangalore

Full Stack Web Developer Training & Certification
full stack developer course

mean Stack Development Training

developer said...

Thankyou for sharing this blog it is very informative and good.
Website Designing Company in Delhi
Website Designing Company in Delhi
Website Designing Services in Delhi
Best Website Designing Company in Delhi
Website Designing Company in South Delhi
Web Designing Delhi
Website Designing Company in Delhi NCR

m8itsolutions said...

Hi!!!
Thanks for this valuable Information Sharing with us your review is very nice.
Thanks once again for this Wonderful article.
Keep on posting!

Digital Marketing Agency in Coimbatore

snk social fame said...

Nice post.. Keep posting more useful article! I was looking for high quality USA Instagram Followers to gain followers and likes under cheap price.

outsourcingall@outlook.com said...

Smart Outsourcing Solutions is the leading web development, ecommerce solution, offshore outsourcing development and freelancing training company in Dhaka Bangladesh.
OUTSOURCING TRAINING IN BANGLADESH
OUTSOURCING TRAINING COURSES IN DHAKA
OUTSOURCING TRAINING CENTER

outsourcingall@outlook.com said...

Smart Outsourcing Solutions is the leading web development, ecommerce solution, offshore outsourcing development and freelancing training company in Dhaka Bangladesh.
OUTSOURCING TRAINING IN BANGLADESH
OUTSOURCING TRAINING COURSES IN DHAKA
OUTSOURCING TRAINING CENTER

outsourcingall@outlook.com said...

Smart Outsourcing Solutions is the leading web development, ecommerce solution, offshore outsourcing development and freelancing training company in Dhaka Bangladesh.
OUTSOURCING TRAINING IN BANGLADESH
OUTSOURCING TRAINING COURSES IN DHAKA
OUTSOURCING TRAINING CENTER

outsourcingall@outlook.com said...

Smart Outsourcing Solutions is the leading web development, ecommerce solution, offshore outsourcing development and freelancing training company in Dhaka Bangladesh.
OUTSOURCING TRAINING IN BANGLADESH
OUTSOURCING TRAINING COURSES IN DHAKA
OUTSOURCING TRAINING CENTER

shakunthala said...

thanks for sharing this jQuery & JSON to draw single-elimination tournament bracket content.
keep sharing
mean Stack Development Training

full stack developer course

Full Stack Web Developer Training & Certification
best software training institutes in bangalore

best training institute in bangalore

Saqib Mirza said...

Hey are you looking for an Video Agency We are working in USA, France, and, UK our rate are very competitive than the market

web arora said...

thnks for inspiring
for website developer and creating best designing website
check
website designing company in delhi
website designing company

Saqib Mirza said...

Hi!

Are you looking for an Digital Marketing Services in North Carolina in USA. We are offering services at low prices

Web Development
SEO services
Android Development

sudhan said...

thank you for given a such information.


Robotic Process Automation (RPA) Training in Chennai | Robotic Process Automation (RPA) Training in anna nagar | Robotic Process Automation (RPA) Training in omr | Robotic Process Automation (RPA) Training in porur | Robotic Process Automation (RPA) Training in tambaram | Robotic Process Automation (RPA) Training in velachery

harshni said...

Thanks for sharing an informative blog keep rocking bring more details.I like the helpful info you provide in your articles. I’ll bookmark your weblog and check again here regularly. I am quite sure I will learn much new stuff right here! Good luck for the next!
Artificial Intelligence Training in Chennai | Certification | ai training in chennai | Artificial Intelligence Course in Bangalore | Certification | ai training in bangalore | Artificial Intelligence Training in Hyderabad | Certification | ai training in hyderabad | Artificial Intelligence Online Training Course | Certification | ai Online Training | Blue Prism Training in Chennai | Certification | Blue Prism Online Training Course

surya said...

Thanks for your post. This is excellent information. The list of your blogs is very helpful for those who want to learn, It is amazing!!! You have been helping many application.

angular js training in chennai

angular training in chennai

angular js online training in chennai

angular js training in bangalore

angular js training in hyderabad

angular js training in coimbatore

angular js training

angular js online training

sathya said...

There are many things I agree with in this post. Enjoyed the simplicity. Thanks for the post. If you want to learn more about

selenium training in chennai

selenium training in chennai

selenium online training in chennai

selenium training in bangalore

selenium training in hyderabad

selenium training in coimbatore

selenium online training
selenium training in chennai

selenium training in chennai

selenium online training in chennai

selenium training in bangalore

selenium training in hyderabad

selenium training in coimbatore

selenium online training

lavanya said...


I will really appreciate the writer's choice for choosing this excellent article appropriate to my matter.Here is deep description about the article matter which helped me more.Java training in Chennai

Java Online training in Chennai

Java Course in Chennai

Best JAVA Training Institutes in Chennai

Java training in Bangalore

Java training in Hyderabad

Java Training in Coimbatore

Java Training

Java Online Training

Sonu Kabir said...


Thanks for sharing information awesome blog post Online Education Quiz website Gk in Hindi

ramesh said...


I am really enjoyed a lot when reading your well-written posts. It shows like you spend more effort and time to write this blog. I have saved it for my future reference. Keep it up the good work

Azure Training in Chennai

Azure Training in Bangalore

Azure Training in Hyderabad

Azure Training in Pune

Azure Training | microsoft azure certification | Azure Online Training Course

Azure Online Training

devi said...

Excellent Blog! I would Thanks for sharing this wonderful content.its very useful to us.This is incredible,I feel really happy to have seen your webpage.I gained many unknown information, the way you have clearly explained is really fantastic.
Data Science Training In Chennai

Data Science Online Training In Chennai

Data Science Training In Bangalore

Data Science Training In Hyderabad

Data Science Training In Coimbatore

Data Science Training

Data Science Online Training

Anonymous said...

python training in bangalore | python online Training
artificial intelligence training in bangalore | artificial intelligence online training
machine learning training in bangalore | machine learning online training
uipath-training-in-bangalore | uipath online training
blockchain training in bangalore | blockchain online training

prabhu said...

very nice blogs!!! i have to learning for lot of information for this sites...Sharing for wonderful information.Thanks for sharing this valuable information to our vision. You have posted a trust worthy blog keep sharing.
IELTS Coaching in chennai

German Classes in Chennai

GRE Coaching Classes in Chennai

TOEFL Coaching in Chennai

spoken english classes in chennai | Communication training


vivekvedha said...

thanks for sharing such a nice info.I hope you will share more information like this. please keep on sharing!
acte reviews

acte velachery reviews

acte tambaram reviews

acte anna nagar reviews

acte porur reviews

acte omr reviews

acte chennai reviews

acte student reviews

radhika said...

Thank you for taking the time and sharing this information with us. It was indeed very helpful and insightful while being straight forward and to the point...

AWS Course in Bangalore

AWS Course in Hyderabad

AWS Course in Coimbatore

AWS Course

AWS Certification Course

AWS Certification Training

AWS Online Training

AWS Training


Best laptops Under 30000 said...

Best 2 3 4 burner gas stove in india
laptops under 30000 with i7 processor
best-foldable-keyboards

Latest School News Nigeria Portal said...

Hi Thank you for sharing this wonderful article. Do well to visit Latest School News to apply for Jamb Registration Form. You can always check your Jamb Result and Neco Result Checker here.
Do well to check your Admission Status using Jamb Caps.

sindhuja cynixit said...

Thank you for the sharing the valuable information.
pega cssa certification course
pega cssa certification online course
pega cssa certification online training
pega cssa certification training
pega cssa online training
pega csa training
learn pega cssa
pega cssa course

Unknown said...

I just loved your article on the beginners guide to starting a blog.If somebody take this blog article seriously in their life, he/she can earn his living by doing blogging.thank you for thizs article. python online training , best python online training ,
top python online training

Unknown said...

I just loved your article on the beginners guide to starting a blog.If somebody take this blog article seriously in their life, he/she can earn his living by doing blogging.thank you for thizs article. python online training , best python online training ,
top python online training

Unknown said...

I just loved your article on the beginners guide to starting a blog.If somebody take this blog article seriously in their life, he/she can earn his living by doing blogging.thank you for thizs article. python online training , best python online training ,
top python online training

Unknown said...

I just loved your article on the beginners guide to starting a blog.If somebody take this blog article seriously in their life, he/she can earn his living by doing blogging.thank you for thizs article. python online training , best python online training ,
top python online training

Unknown said...

I just loved your article on the beginners guide to starting a blog.If somebody take this blog article seriously in their life, he/she can earn his living by doing blogging.thank you for thizs article. python online training , best python online training ,
top python online training

Unknown said...

I just loved your article on the beginners guide to starting a blog.If somebody take this blog article seriously in their life, he/she can earn his living by doing blogging.thank you for thizs article. python online training , best python online training ,
top python online training

Anurag Mohapatra said...

Very nice blog about json
Best python training in Bangalore BTM

Anurag Mohapatra said...

Very nice blog about json
Best python training in Bangalore

Digital Marketing said...

Best Training institute for AWS http://www.greenstechnologys.com/AWS-training-chennai.html

hussain d said...

Thanks for the marvelous posting! I genuinely enjooyed reading it, I want to
encourage that you continue your great writing, have a nice day!

UI Development Training in Bangalore
Python Training in Bangalore
AWS Training in Bangalore
Machine Learning With R Training in Bangalore
Machine Learning with Python Training in Bangalore
Hadoop Training in Bangalore

shakunthala said...

thanks for sharing this post with us.
keep sharing.
best training institute in bangalore
best software training institutes in bangalore

ICSS Bangalore said...

Nice Blog. Check this python classroom training in bangalore

hussain d said...

Thanks! For sharing your views regarding this topic. I really enjoyed your post.
Hadoop Training in Bangalore
Python Training in Bangalore
AWS Training in Bangalore
UI Development training in Bangalore
Machine Learning Training in Bangalore
Machine Learning Training with Python in Bangalore

Free fire Diamond said...

Modern Combat 5 mod apk latest
Nova legacy mod apk latest

Free fire Diamond said...

soul knight mod apk

my talking angela mod apk

nova legacy mod apk

modern combat 5 mod apk
shadow fight 3 mod apk

suresh said...

Really useful information. Thank you so much for sharing.It will help everyone.Keep Post.
DevOps Training in Chennai

DevOps Course in Chennai

richard bryan said...

great java tips At SynergisticIT we offer the best aws training

SUTAPA said...

affair|after marriage|ą¦…্ą¦Æাą¦°েą¦ž্ą¦œ ą¦®্ą¦Æাą¦°েą¦œ
Love Story|Sad Love Story
ą¦…ą¦¦্ą¦­ুą¦¤ ą¦­াą¦²োą¦¬াą¦øা | single mother
working woman|ą¦…ą¦øą¦®্ą¦Ŗą¦°্ą¦£
ą¦…ą¦øą¦®্ą¦Ŗą¦°্ą¦£ ą¦­াą¦²োą¦¬াą¦øা | ą¦­াą¦²োą¦¬াą¦øা | affair

Gift Cards 2021 said...

outstanding article written thanks Gift Cards 2021

Anurag Mohapatra said...

Python training in bangalore
Machine learning course in bangalore
Data Science Online Course in Bangalore

Learn Storage Automation (Using Python) in Bangalore BTM
Cloud Computing Training in Bangalore BTM

Anurag Mohapatra said...

Python training in bangalore
Machine learning course in bangalore
Data Science Online Course in Bangalore

Learn Storage Automation (Using Python) in Bangalore BTM
Cloud Computing Training in Bangalore BTM

shakunthala said...

thanks for sharing this information with us
job guaranteed courses in bangalore

full stack developer course

Prashant Baghel said...

Thank you for writing can I say something for those people who are looking for one of the best website to find details about latest update
Mobile And Computer Par Gmail Se Message Kaise Bhejte Hai

Afsana said...


Thanks for sharing your views about the concept which you know much better. Its easy to read and understand by the way you wrote the blog contents.

data science training in chennai
python institute in chennai
machine learning training in chennai

savas said...

I think this is among the most vital information for me. And i am glad reading your article.
Thanks!
visit my sites Please.

1) http://wildflowersea.co.kr/bbs/board.php?bo_table=0602&wr_id=344874
2) http://xn--6j1bj2g886a.com/www/bbs/board.php?bo_table=free&wr_id=4795
3) http://teraene.com/bbs/board.php?bo_table=0601&wr_id=52149
4) http://www.freeinfo.co.kr/bbs/board.php?bo_table=freeboard&wr_id=63055
5) http://www.powerline-g.com/bbs/board.php?bo_table=customer&wr_id=560153&page=0&sca=&sfl=&stx=&sst=&sod=&spt=0&page=0

shakunthala said...

thanks for sharing this blog with us .
keep sharing .
job guaranteed courses in bangalore

shakunthala said...

mlcmv

Content Writing Services In Delhi said...

Boost engagement and generate leads with our high-quality Content Writing Services In Delhi! iWrite India uses fresh, SEO-friendly language to present your ideas to the world! Content Writing Services In India | Content Writing Agency

Jegadish kumar said...

Had read complete blog which was helpful for me career and i also check my blog if anyone interested on the books.

Top 10 phenomenal books to read before marriage 2021

Jegadish kumar said...

https://searchjegadishbooks.blogspot.com/2021/01/top-10-phenomenal-books-to-read-before_18.html

Jegadish kumar said...

Has I visited besent 3 Months ago I have learned digital Marketing Now Iam The best Blogger Thank you For The Best Training
Top 10 phenomenal books to read before marriage 2021

Jegadish kumar said...

Top10phenomenalbookstoreadbeforemarriage2021

Admim DS said...

The Best Result Driven Digital Marketing
Agency in Chennai https://techsv.in/

Durco Pump Parts said...

Real Goulds Pump Parts are obligatory to guarantee your pumps remain performing at top performance as well as maintain their service warranty standing. Goulds and also Durco Pump Parts have been particularly designed for your pump version. All Goulds Pump Parts as well as A-C Pump components have been made to the strictest requirements in an ISO accredited facility. Gorman Rupp Pump Parts

Arefa Akter said...

Whatsapp Number Call us Now! 01537587949
please visit us: Graphic Design Training
sex video: Dropped phone repair Erie
pone video usa: mobile phone repair in West Des Moines
pone video usa: Social Bookmarking Sites List 2021

Best Training Institute said...

Nice Blog. We are making the Best Software training in bangalore.
J2ee training in bangalore
learn J2ee in bangalore

Jyothi Matha said...

i really liked your blog it was so informative. i recently started writing blogs please do visit my website cibus point

Ruger LCP Laser said...

Ruger LCP 2 : Seeking one of the most efficient Ruger LC9S Accessories? Ruger Laser, the leader in Ruger LCP Laser at Affordable Cost. All the Devices provided by us are taken a look at as well as likewise inspected by our extremely enlightened experts so pertaining to guarantee you with secure along with safe and likewise safe and also protected driving. Ruger LCP

shakunthala said...

thanks for sharing blog with us
job guaranteed courses in bangalore
full stack developer course

Daniel said...

Very useful content. I will have look completely later on.

View my blog: Java training center in chennai

Kevinlincy said...
This comment has been removed by the author.
Kevinlincy said...
This comment has been removed by the author.
Linkfeeder said...

The content on your blog was really helpful and informative. Thakyou. # BOOST Your GOOGLE RANKING.It’s Your Time To Be On #1st Page
Our Motive is not just to create links but to get them indexed as will
Increase Domain Authority (DA).We’re on a mission to increase DA PA of your domain
High Quality Backlink Building Service
1000 Backlink at cheapest
50 High Quality Backlinks for just 50 INR
2000 Backlink at cheapest
5000 Backlink at cheapest

Taj Kaif said...

I want you to thank for your time of this wonderful read!!!
I definately enjoy every little bit of it and I have you bookmarked to check out new stuff of your blog a must read blog!
you can visite my website.

ą¤øą¤°ाą¤œą¤ø्ą¤„ाą¤Ø ą¤­ाą¤®ाą¤¶ाą¤¹ ą¤•ाą¤°्ą¤” ą¤Æोą¤œą¤Øा

Taj Kaif said...

want you to thank for your time of this wonderful read!!!
I definately enjoy every little bit of it and I have you bookmarked to check out new stuff of your blog a must read blog!
you can visite my website.

ą¤øą¤°ाą¤œą¤ø्ą¤„ाą¤Ø ą¤­ाą¤®ाą¤¶ाą¤¹ ą¤•ाą¤°्ą¤” ą¤Æोą¤œą¤Øा

Unknown said...

I will have a look on the complete blog later on. Which is useful for me and i bookmarked it. Keep post more blog. Football blog

Aishwariya said...

Awesome post. Thanks for Sharing.
AWS Training in Chennai

salome said...

really useful and interesting

best-angular-training in chennai |

angular-Course in Chennai

https://www.credosystemz.com/training-in-chennai/best-angularjs-training-in-chennai//">

Janardhan said...

Best Java Youtube Channel for beginners & Professionals : Are you looking for the best Youtube channel for Learning java programming? Or the one who is looking for a Top rated Java youtube channel that can help you to learn basic to advanced java? Or the one who is casually looking for List of Best & Highest subscribed java youtube channels ? Are you looking for the same? If your answer is yes ! then you have come to the right place.

Alexis Gipson said...

Thanks for the interesting content. I like your post and your blog is amazing.
If you are interested in Video Downloader apps you can check my blog site. It is new and really informative.

VidMate 2014 old download

Alexis Gipson said...

Thanks for the interesting content. I like your post and your blog is amazing.
If you are interested in Video Downloader apps you can check my blog site. It is new and really informative.

VidMate 2014 old download

Village Talkies said...

Informative blog! it was very useful for me.Thanks for sharing. Do share more ideas regularly.
Village Talkies a top-quality professional corporate video production company in Bangalore and also best explainer video company in Bangalore & animation video makers in Bangalore, Chennai, India & Maryland, Baltimore, USA provides Corporate & Brand films, Promotional, Marketing videos & Training videos, Product demo videos, Employee videos, Product video explainers, eLearning videos, 2d Animation, 3d Animation, Motion Graphics, Whiteboard Explainer videos Client Testimonial Videos, Video Presentation and more for all start-ups, industries, and corporate companies. From scripting to corporate video production services, explainer & 3d, 2d animation video production , our solutions are customized to your budget, timeline, and to meet the company goals and objectives.
As a best video production company in Bangalore, we produce quality and creative videos to our clients.

Victoria Secret Gift Card Balance said...

Victoria's Secret’s customer service phone number, or visit PINK by Victoria's Secret’s website to check the balance on your PINK by Victoria's Secret gift card.

Victoria Secret Card Balance,
Check Victoria's Secret Gift Card Balance,

shakunthala said...

thanks for providing information
job guaranteed courses in bangalore
full stack developer course

shakunthala said...

thanks for sharing this post.
job guaranteed courses in bangalore
full stack developer course

Highondigitally said...

Its a nice article which helped me to develop my first blog. please keep post new blog everyday. Top 10 High Fiber Rich Foods and its Benefits

savas said...

ģ¢‹ģ€ ģ •ė³“, ź°€ģ¹˜ ģžˆź³  ķ›Œė„­ķ•œ ė””ģžģø, ģ¢‹ģ€ ģ•„ģ“ė””ģ–“ģ™€ ź°œė…, ė§Žģ€ ķ›Œė„­ķ•œ ģ •ė³“ģ™€ ģ˜ź°ģœ¼ė”œ ģ¢‹ģ€ ź²ƒģ„ ź³µģœ ķ•˜ģ‹­ģ‹œģ˜¤. ģ—¬źø°ģ— ģœ ģš©ķ•œ ģ •ė³“ė„¼ ģ œź³µķ•“ ģ£¼ģ…”ģ„œ ź°ģ‚¬ķ•©ė‹ˆė‹¤.
ė‚“ ģ‚¬ģ“ķŠøė„ ė°©ė¬øķ•˜ģ‹­ģ‹œģ˜¤.ģŠ¬ė”ÆėØøģ‹ ģ‚¬ģ“ķŠø
ė§Žģ€ ģ •ė³“ė„¼ ģ–»ģ„ ģˆ˜ ģžˆģŠµė‹ˆė‹¤.

Python said...

Thanks for sharing.
Python Online Training

Vandana said...

Great i Love the article most
Nagaland State Lottery Result Live Today 11.55 AM, 4.00 PM, 8.00 PM,
Florida Lottery winning numbers Result Live Today
Sikkim State Lottery Result Live Today
Ludhiana Jobs Today
Bodoland Lottery Result Today {Live} 12 PM, 3 PM, 7 PM

designingcourses said...

https://designingcourses.in/
Very Informative and useful... Keep it up the great work. I really appreciate your post.

https://designingcourses.in/graphic-designing-courses-in-bangalore/
https://designingcourses.in/web-designing-course-in-bangalore/
https://designingcourses.in/graphic-design-services/

Aishwariya said...

This an wonderful and fantastic blog it is really very informative and valuable blog.
Reactjs Training in Chennai |
Best Reactjs Training Institute in Chennai |
Reactjs course in Chennai

Diyalabs said...

https://www.zoominfo.com/c/sla-group-of-companies/345704563

kishor said...

thanku so much nices infomation valueable infomation
click here
kishorsasemahal

shakunthala said...

thanks for valueable information.
digital marketing course in bangalore

vivek said...

Best online Certification Course in Hyderabad
AWS Training
DevOps Training
Azure DevOps Training
Alteryx Training
MERN Stack Training

MEAN Stack training

kishor said...

NICES INFORMATION THANKU SO MUCH
kishorsasemahal
paidboom-hosting-review
backlinks-strategies

Anonymous said...

Check the New Algorithm Factors…

8 Important Google Algorithms for Best SEO practices

HOME1 said...

Coimbatore House For Sale , Land For Sale - Buy, Sell, Rent Properties In Coimbatore
Search, buy, rent, lease, Residential and Commercial real estate properties in Coimbatore Tamil Nadu.
best-villa-projects-in-coimbatore
Home1chennai

Highondigitally said...

Nice blog, i will have a look completely later on. Keep post more blogs which will help us. Learn to play with books

Adnan said...

Keypad Door Lock For Bedroom

For Download Subway Surfers Mod Apk

Software Training Institute said...

Aimore Tech is the best Python training institute in Chennai with 6+ years of experience. We are offering online and classroom training. Python Training in Chennai

Juliana petar said...

Login Your au-usd Account. Read In Depth au-usd
au-usd Now You Can Login Your Blackpearlfx E-Account Through Your au-usd Account Login.

Juliana petar said...

Login Yourau-usd Account To Read The Latest News About The Platform.

Tamil novels said...

Very useful blog. Thanks for sharing with us.
Tamil novels pdf
Ramanichandran novels PDF
srikala novels PDF
Mallika manivannan novels PDF
muthulakshmi raghavan novels PDF
Infaa Alocious Novels PDF
N Seethalakshmi Novels PDF
Sashi Murali Tamil Novels

sindokht said...

Ų§Ł†ŁˆŲ§Ų¹ Ų±Ś˜ Ł„ŲØ Ł…Ų§ŪŒŲ¹ Ų±Ų§ Ł…ŪŒ ŲŖŁˆŲ§Ł†ŪŒŲÆ ŲØŲ§ ŲØŁ‡ŲŖŲ±ŪŒŁ† Ł‚ŪŒŁ…ŲŖ Ų²Ų§ Ų³ŪŒŁ†ŲÆŲ®ŲŖ ŲØŲ®Ų±ŪŒŲÆ.

shakunthala said...

thanks for sharing this
full stack developer course

printerrstart said...

I appreciate your efforts. New updates continue to post with us. It is really a wonderful post. Good blog Very interesting and useful information on your website. Thanks to the blog to share and it certainly does provide information to help us out.

Please read also this I just follow the same printer for my use and the Canon printer is best for daily use if you want to read more please share this link - ij.start.cannon.

How To HuB said...

Ammaiya Offers Best Sitecore Development, Development Services, such as Sitecore Consultation, Migration Web Development Company

How To HuB said...

Apply Online RTI With RTI Guru Web Portal. File Online RTI For State Government & Central, in 2 Min, File RTI Online And Check The Application Status. Apply RTI Online

Peter Schiff said...

That Is Very Interesting, You Are An Excessively Skilled Blogger. Stay In Control Of Your Online Trades With AximTrade Review Login, A Cloud-based Online Trading Platform.

Elena James said...

XM REVIEW If You Are A Beginner, Check Out Our Guide On How To Open An Account With XM. They Offer Copy Trading Where You Can Copy The Trades Of Successful Traders.

Juliana petar said...

Read More About The Latest AVATRADE REVIEW Review In This Article. Learn How The Broker Operates And If You Should Avoid Trading With It Or Not.

shakunthala said...

thanks for sharing this blog post with us
best training institute in bangalore

mobito.ir said...

ŲØŲ±Ų§ŪŒ ŲÆŲ§Ų“ŲŖŁ† ŲŖŲØŁ„ŪŒŲŗŲ§ŲŖ Ł…Ų­ŪŒŲ·ŪŒ ŲŖŲ§Ų«ŪŒŲ±ŚÆŲ°Ų§Ų± ŲØŲ§ŪŒŲÆ Ų§Ų² ŲØŁ†Ų± ŲŖŲØŁ„ŪŒŲŗŲ§ŲŖŪŒ Ų¬Ų°Ų§ŲØŪŒ Ų§Ų³ŲŖŁŲ§ŲÆŁ‡ Ś©Ł†ŪŒŲÆ.

BK-25 said...
This comment has been removed by the author.
BK-25 said...

Best Informatica Training institute in Chennai
power bi training in chennai
msbi training in chennai
Docker Training in Chennai
android training in chennai
ios training in chennai
Xamarin Training in Chennai

How To HuB said...

Apply rti online Bihar Steps to file RTI online bihar, File RTI - You can easily file RTI Online in bihar

RTI Online Bihar

Unknown said...


Nice blog thank you .For your Sharing It's a pleasure to read your post.It's full of information I'm looking for and I'd like to express that "The content of your post is awesome"

Aimore Tech is the Best Software training institute in chennai with 6+ years of experience. We are offering online and classroom training.
Oracle DBA Training in Chennai
ASP.NET Training in Chennai
C#.NET Training In Chennai

INFYCLE TECHNOLOGIES said...

Excellent Big Data Hadoop Training in Chennai, from Infycle Technologies, the best software training institute, and Placement center in Chennai. And also Providing technical courses like Oracle, Java, Data Science, Big data, AWS, Python, etc., with the excellence of training and friendly trainers for freshers, experienced, and Tech professionals. And the students will be sent for placement interviews in the core MNC's. For more details call 7504633633.

Oliver said...

Find the list of Top 10 Forex Broker USA Based On Independent Ratings, Reviews, And Online Presence. Find Out Which Broker You Should Choose.

Steven Cohen said...

At Rank In Forex . our SEO process will make sure your business or website is easily found by new potential customers. Let us help you harness the power of search engine optimization.

Oliver said...

Our Search engine marketing services can cover the entire process of increasing your site's visibility. Visit " Forex Ranking List " To Rank Your Website.

Unknown said...

The Broker Forex Net Is A Perfect Place To Discover The News Of Great Brokers In The Industry. Along With Our Review Of Popular Broker Sites, You Can Also Find Useful Articles That Will Help You Learn More About Trading And Try Out Some Strategies On Your Own. Many Informative Video Tutorials Are Also Included.

Maria Yang said...

Tradingzy Is The Best And Most Reliable Seo Company And Offers A Wide Variety Of Forex Broker Keyword Analysis , Including An Affordable Monthly Subscription Service, One-time Links, And Blog Comments. With Any Of These Services, You Can Be Assured That Your Site Will Rank Higher In The Search Engine Results Page And Receive An Influx Of Targeted Traffic.

Aarya Sharma said...

Thanks for sharing this amazing content. I learn new information from your article, I am really happy to say it’s an amazing post to read. you are doing a great job. Keep it up.

Hire Dedicated Python Developer

Oliver said...

Iforexs Was Created To Help Forex Traders Make An Informed Decision About Their Choice Of Broker. Here You Can Compare Hundreds Of Forex Brokers Based On Services Offered, Spreads, Types Of Accounts And More. Use Our Review And Ratings To Find The Best Forex Broker That Works For You.

Maria Yang said...

The most comprehensive guide to Forex Brokers and White Label Forex Broker Cost , showing you what you can save or earn by choosing the best broker for your needs – from Highest to Lowest Charges. Useful for both beginner and seasoned trader.

Unknown said...

White Label Forex Course is the next step in our Forex Trading Education products. The course was designed to be modern and easy to use so that it can be learned by anyone, at any computer, while still allowing your customers to interact with you remotely.

Unknown said...

White Label Partnership Forex will enable you to get all the benefits of the MetaTrader 4 automated trading platform and MetaQuotes language with even more exciting functionalities for your own brand

Unknown said...


Nice blog thank you .For your Sharing It's a pleasure to read your post.It's full of information I'm looking for and I'd like to express that "The content of your post is awesome"

Aimore Tech is the Best Software training institute in chennai with 6+ years of experience. We are offering online and classroom

Dotnet Training in Chennai
Core java Training in Chennai
Web design Training in Chennai

Unknown said...

Forex Seo will enable you to get all the benefits of the MetaTrader 4 automated trading platform and MetaQuotes language with even more exciting functionalities for your own brand

careful Bolger said...

Whatsapp Number Call us Now! 01537587949
outsourcing in Bangladesh
USA pone web iphone repair USA
USA SEX WEB careful
bd sex video B tex
bd sex video sex video
bd sex video freelancing course

Joseph Vijay said...

Thank you for sharing this valuable information with us.
Fold n fly | Classic dart paper airplane | how to make a paper airplane that flies far and straight step by step | windfin | stable paper airplane | nakamura paper airplane | paper airplane templates for distance

Akshay Thakur said...

Thank you for keeping us updated with latest information of it...
Japanese AC Brands Online
Japanese AC Brands
Find out the Bluestar vs Daikin Reviews :
Bluestar Vs Daikin

Unknown said...

Would You Like To Access Your Top Forex Brokers In Malaysia Account And Manage Your Trades? This Is The Place For You. Here You Can Easily Manage Your Investments, Deposit Or Withdraw Funds. Read More Here.

Unknown said...

Checking out the Latest Forex Broker In Malaysia List will help you make a much more informed decision regarding your choice.

Cari said...

You should take help from professionals who have immense experience on Microsoft Business Central. They will help you with Solutions easily. Read: business central erp

Mrbk30 said...

Thank you for sharing an informative blog. Keep sharing.

Best software training institute in Chennai with most trending Software courses.
Core Java Training in Chennai
Java Class in Chennai
Manual Testing Course in Chennai

Softlogicseo said...

Thanks for sharing an informative blog keep rocking bring more details.
Blue Prism Training in Chennai | Blue Prism Course in Chennai

affordable interior designer said...

https://interiordesignergurgaon21.blogspot.com/2022/08/interior-decorating-ideas-for-home.html
https://interiordesignergurgaon21.blogspot.com/2022/08/the-benefits-of-textured-walls-for.html
https://interiordesignergurgaon21.blogspot.com/2022/08/tips-for-decorating-studio-apartment-in.html
https://interiordesignergurgaon21.blogspot.com/2022/08/bathroom-interior-design-ideas.html
https://interiordesignergurgaon21.blogspot.com/2022/08/3-bedroom-interior-design-ideas-design.html
https://interiordesignergurgaon21.blogspot.com/2022/08/innovative-interior-design-concepts-for.html
https://interiordesignergurgaon21.blogspot.com/2022/08/how-to-use-color-in-interior-design-and.html
https://lookobeauty.com/best-interior-designer-in-gurgaon/

affordable interior designer said...

nice content
https://lookobeauty.com/best-interior-designer-in-gurgaon/

INSTAGRAM BIO said...


I think I fond of your site
I like to scroll your site
you can also Visit our site Instagram Bio

affordable interior designer said...

Nice Content
Makeup Artist Institute - Makeup Artist Course In Gurgaon
lookobeauty

Apollo Computer Software Training Institute Krishnagiri said...

Best Blog to read. Thanks for sharing

Software Training Institute
Software Testing Training Near me
Python Training Near Me
Web Designing Training Near Me
Angular JS Training Near Me
Aws Training Near Me
Digital Marketing Training Near Me

Makeup Artist Course in Gurgaon | Makeup Artist Institute in Gurgaon | Best Makeup Artist Course in Gurgaon | Best Makeup Artist Institute in Gurgaon | Makeup Artist Course | Makeup Artist Institute said...

Lookobeauty
https://lookobeauty.com/makeup-artist-institute-makeup-artist-course-in-gurgaon/
Nice Content

affordable interior designer said...

Lookobeauty
https://lookobeauty.com/makeup-artist-institute-makeup-artist-course-in-gurgaon/
Looking For Best Makeup Artist Course In Gurgaon. Best Makeup Artist Institute With Affordable Fees, Best Placement Record By Top Makeup Teachers In Gurgaon.

harleyson said...

I believe there are many more pleasurable opportunities ahead for
individuals that looked at your site.
selenium training in chennai

Geetha said...

Nice Blog

das said...

mast artical instagram par fallowers badhane wala app

Software Training Blogs said...

I would like to thank everyone who is involved in creating this blog which contains much information with unique content.

Programas y mas said...

gracias por compartir el conocimiento

ACTE Customer Reviews & References said...

I would like to thank you for this wonderful article. This blog contains many new technical words which will help many people. Thank you

iteducationcentre said...

Very innovative and useful Post...Thanks for posting...
Data science classes in Pune

Mingle Swipe said...

Hi Friends,
I have a account in dating site like bubble.. Can you tell me the Bumble is Waste of Time or Really good to know with time spending on Bubble..

shis said...

Excellent!! It was such a good post to read and learn.
AWS training in Chennai
Software training testing in Chennai
Selenium training in Chennai
Python training in Chennai

iteducationcentre said...

great Post.Thanks for sharing.
Spoken English classes in Pune

pratikshaK said...

Nice blog,
ReactJS Classes in Pune

pratikshaK said...

Nice blog
Angular Classes in Pun

pratikshaK said...

Nice blog.
Angular Classes in Pune

Ravi said...

Since its establishment on 2023 perfume world it has ploneered as a diversified tapping into the necessities of internet market in India
visit: http://perfumeworld.42web.io/

jojenni said...

we provide service for your home appliance at reasonable price within one day we will repair your appliance at your place or else we pick up the item and do in our own place like, fridge, washing machine, television, Air conditioner, micro oven .please do visit my website for more information Home appliance service center near me

Pets Duniya said...

Pets Duniya since 2012 We are not only about selling pet products and supplies, but we are also focused to empower our customers with all the information related to pet products, pet care tips, diseases and symptoms, treatment and medications.
visit:https:pet shop near me

beauty products said...

Skin care includes a variety of procedures that maintain the integrity of the skin, improve its appearance, and treat skin diseases. These might involve good nutrition, avoiding too much sun, and using emollients in the right amounts.
beauty products for women

Master Thaniga said...

Nice Information , want to know about digital marketing course in chennai Digital Marketing
Digital Marketing Training
CMS
Software Development
Software Testing
Mobile Application
Designing

Carsonwesley said...

Thanks for the blog.
Technology development services
Technology consulting services

Akash said...

It’s a great blog post, Thanks for sharing. keep posing such content.
Python Course in Bangalore

Needintech Software Training said...

No.1 Software Training Institute in Chennai

Python Training in Chennai

Datascience Training in Chenani

Java Training in Chennai

bepractical said...

Thank you so much for the great and very beneficial stuff that you have shared with the world.I am glad that I have visited this blog. Really helpful, eagerly waiting for more updates.

bepractical

bepractical said...

bepractical

nik said...

Thanks for sharing this valuable information
beauty tips

Akanksha Gaur said...

Superb post! Your observations are insightful and clearly stated. I appreciate you offering such thought-provoking material. Continue your fantastic effort! If interested look into SAP Analytics Cloud Training

Sanjeev kumar said...

Some useful article for mechanical engineer......
Types of Pipe Joints
Air Conditioning System
Air Brake System
Electrostatic Precipitator
Types of Welding Joints
Cotter Joint

Kishore Raju Satha said...

You will learn all the essential ideas, resources, capabilities, and required subjects that a Java developer usually needs to know when creating a web application here. The first module of the course covers Java and includes lessons on multi-threading, Lambdas, collections debugging, and GIT. You will then go to JSP and Servlets. After finishing up with JSP and Servlets, you will begin investigating Hibernate. JSP and Hibernate will both be used in the development of an application.


https://teksacademy.com/

TRAINING institute in Bangalore said...

Thanks for sharing this bog with us. best training institute in bangalore

digital marketing said...

thanks for sharing this informative blog. digital marketing company

Programming Edu said...

Informative, engaging, and always up-to-date, this blog is a valuable resource for both beginners and tech enthusiasts. The author's clear writing style and commitment to fostering community engagement make it a must-read for anyone in the IT field. Check out IT Certification Course by SkillUp Online.

Albert said...

Thank you for sharing your expertise through your blog posts.
oracle courses in bangalore

HyperTest said...

Amazing article. It is very helpful for me.

API Testing

Sathya said...
This comment has been removed by the author.
Sathya said...

Thank you for the informative content. i would request you to keep share content with us. For more latest digital marketing blogs, follow digital marketing courses in bangalore

TRAINING institute in Bangalore said...

Thanks for sharing this blog with us. best training institute in bangalore

Robert said...
This comment has been removed by the author.
Baiju said...

Great post! Your insights are spot-on. I appreciate how you break down intricate subjects, making them accessible and understandable.
Best Software Training Institute In Electronic City Bangalore

IT Education said...

Thanks for sharing valuable information .
Python Course in Pune

it training said...

love this blog
full stack developer course in chennai

full stack training in chennai
web development in chennai

sky way said...

Thanks for sharing this blog with us.
provident east lalbagh

adarsh welkin park

sky way said...

Thanks for sharing this blog with us .
provident east lalbagh
adarsh welkin park
manadale

sky way said...

thanks for the blog.
manadale

adarsh welkin park

provident east lalbagh

IT TRAINING said...

thanks for sharing this information

<a

A TRAVEL DAIRY said...

"Best Logistics course in kochi" rel=https://www.smeclabs.com/logistics-courses/">

A TRAVEL DAIRY said...

Best Logistis course i kochi Best Logistis course i kochi

technical courses in chennai said...

Cloud computing training in chennai

HMS Sethurayar Media said...
This comment has been removed by the author.
technical courses in chennai said...

Thanks for share this blog , this blog is very useful to all. I just share you the link below for courses.


cloud computing course in chennai, cloud computing training in chennai
ui/ux design course in chennai
Seo training in chennai
Devops training in chennai, Devops Course in chennai
java training in chennai, node js training in chennai

«Oldest ‹Older   201 – 400 of 405   Newer› Newest»

Post a Comment