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.

421 comments:

1 – 200 of 421   Newer›   Newest»
Isaac Earl said...

This is awesome. mad props. I might try and work this into a project...

Unknown said...

Awesome, I am going to have a play with this...!

Jamie said...

I'm also using this, thanks for the code assist I had rough drafted out pretty much the same idea as your blog outlines and then I wondered.. I bet someone else has thought of this! Lo and behold, you save me from coding it :)

You can see it here, http://www.sjscomputing.com/dailies/dailies/brackets/?game=Starcraft2

Your JSON array was a pain in the ass to re-create serverside but I managed :P. As well, I promise to pretty the site up so don't worry about your work being used in a poor environment.

Thanks again.

Edward Rustan said...

This is a great approach and I have integrated it into a .Net 4.0 web site with good results. However, I'd like to expand it to support double elimination brackets -- does anyone have an idea on how to do that?

vertu said...

Hi, thanks for the codes.

How can I use this with php and mysql.

for example I have mysql tables like users, tournaments etc.. is there any idea?

Unknown said...

Fantastic! Flexible and scalable!

Anonymous said...

Awesome start to something great! Was able to modify it to fit my needs. Thanks again for sharing.

Unknown said...

Great !

How I play a tournament with 13 teams ?

Thanks

Unknown said...

Hooraay.. thanks for sharing.. :D

Volks said...

Excellent and very cool idea and the subject at the top of magnificence and I am happy to this post..Interesting post! Thanks for writing it.What's wrong with this kind of post exactly? Optocrypto

Unknown said...

Really Great effort. Thanks for your great explanation.

Java Training in Chennai | Java Course in Chennai

Unknown said...

I am really happy with your blog because your article is very unique and powerful for new reader.
Click here:
Selenium Training in Chennai | Selenium Training in Bangalore | Selenium Training in Pune | Selenium online Training

gowsalya said...

Really you have done great job,There are may person searching about that now they will find enough resources by your post
Best Devops Training in pune
advanced excel training in bangalore

SRI said...


This is most informative and also this post most user friendly and super navigation to all posts... Thank you so much for giving this information to me.. 

best rpa training in chennai |
rpa training in chennai | rpa online training |
rpa training in chennai |
rpa training in bangalore
rpa training in pune
rpa training in marathahalli
rpa training in btm

john brito said...

This is most informative and also this post most user friendly and super navigation to all posts... Thank you so much for giving this information to me
best rpa training in chennai
rpa training in chennai |
rpa online training
rpa course in bangalore
rpa training in pune
rpa training in marathahalli
rpa training in btm

Unknown said...

Inspiring writings and I greatly admired what you have to say , I hope you continue to provide new ideas for us all and greetings success always for you..Keep update more information.


rpa training in chennai |
best rpa training in chennai
rpa online training
rpa course in bangalore
rpa training in pune
rpa training in marathahalli
rpa training in btm

Mounika said...

After seeing your article I want to say that the presentation is very good and also a well-written article with some very good information which is very useful for the readers....thanks for sharing it and do share more posts like this.
python course in pune | python course in chennai | python course in Bangalore

sakthi said...


This is most informative and also this post most user friendly and super navigation to all posts... Thank you so much for giving this information to me.

best rpa training in chennai
rpa training in chennai |
rpa online training
rpa course in bangalore
rpa training in pune
rpa training in marathahalli
rpa training in btm

simbu said...

This is most informative and also this post most user friendly and super navigation to all posts... Thank you so much for giving this information to me.. 
Java training in Chennai | Java training in Tambaram | Java training in Chennai | Java training in Velachery

Java training in Chennai | Java training in Omr | Oracle training in Chennai

Unknown said...

I think you have a long story to share and i am glad after long time finally you cam and shared your experience.
Data Science Training in Chennai | Data Science Training institute in Chennai
Data Science course in anna nagar
Data Science course in chennai | Data Science Training institute in Chennai | Best Data Science Training in Chennai
Data science course in Bangalore | Data Science Training institute in Bangalore | Best Data Science Training in Bangalore
Data Science course in marathahalli | Data Science training in Bangalore

srinithya said...

Wonderful post. Thanks for taking time to share this information with us.
Python Training in Chennai
Python Training Institute in Chennai
RPA Training in Chennai
RPA courses in Chennai
Blue Prism Training in Chennai
UiPath Training in Chennai

Tony Stark said...

Mechanical Projects | Mechanical Projects in Chennai | Mechanical Project Centers in Chennai | Mechanical Project Centre in Chennai | Mechanical Final Year Project in Chennai | Final Year Projects Mechanical | Final Year Projects Mechanical in Chennai

dhivya said...

This information is impressive. I am inspired with your post writing style & how continuously you describe this topic. Eagerly waiting for your new blog keep doing more.
Ethical Hacking Training in Bangalore
Ethical Hacking Course in Bangalore
Java Certification in Bangalore
Java J2ee Training in Bangalore
Advanced Java Course in Bangalore

sathya shri said...

I really like your blog. You make it interesting to read and entertaining at the same time. I cant wait to read more from you.

angularjs Training in bangalore

angularjs Training in bangalore

angularjs online Training

angularjs Training in marathahalli

angularjs interview questions and answers

Vicky Ram said...

Useful Information, your blog is sharing unique information...Thanks for sharing!!!

Guest posting sites
Education

mercyroy said...

Nice Article,Great experience for me by reading this info.
thanks for sharing the information with us.keep updating your ideas.
Selenium training near me
Selenium Training in Chennai
Selenium training near me
Selenium Training in Chennai

sathyaramesh said...

thanks for sharing such a nice info.I hope you will share more information like this. please keep on sharing!
Java Training in Chennai
German Training Institute in Chennai
german language coaching centres in chennai
Java Training Institute in Chennai
Best Java Training Institute in Chennai
German Training Institutes in Chennai

Digital Marketing said...

hi, nice information is given in this blog. Thanks for sharing this type of information, it is so useful for me. nice work keep it up. best digital marketing company in delhi

Digital Marketing said...

Powerful Video Content Marketing Ideas for Your Business

LindaJasmine said...

I love your way of writing. The content shows your in-depth knowledge on the subject. Thanks for Sharing.
Node JS Training in Chennai
Node JS Course in Chennai
Node JS Advanced Training
Node JS Training Institute in chennai
Node JS Course
IELTS coaching in Chennai
IELTS Training in Chennai
SAS Training in Chennai
SAS Course in Chennai

Rithi Rawat said...

Very nice post here thanks for it .I always like and such a super contents of these post.Excellent and very cool idea and great content of different kinds of the valuable information's.

machine learning course fees in chennai
machine learning training center in chennai
top institutes for machine learning in chennai
Android training in chennai
PMP training in chennai


Madhu Bala said...

Impressive content, keep doing more

Best Hadoop Training in Chennai
hadoop training institute in chennai
Hadoop Training in Chennai
Big Data Training in Chennai
JAVA Training in Chennai
Selenium Training in Chennai
Android Training in Chennai

Kayal said...

Good Job, nice work and efforts. Your content is very interesting and i like that. I want a lot of info from your post....
Ethical Hacking Course in Chennai
Hacking Course in Chennai
Certified Ethical Hacking Course in Chennai
Ethical Hacking Training in Chennai

Unknown said...

Very nice post here and thanks for it .I always like and such a super contents of these post.Excellent and very cool idea and great content of different kinds of the valuable information's.
Java training in Chennai

Java training in Bangalore
Selenium training in Chennai

Selenium training in Bangalore

velraj said...

the article is very useful for me.thanks for this session.i got lot of things after i read this.nice
ccna Training institute in Chennai
ccna institute in Chennai
Python Classes in Chennai
Python Training Institute in Chennai
Data Analytics Courses in Chennai
Big Data Analytics Courses in Chennai

priya rajesh said...

Wonderful blog with lots of information, Keep up the good work and share more like this.
Spring Training in Chennai
Spring Hibernate Training in Chennai
Hibernate Training in Chennai
Spring and Hibernate Training in Chennai
Struts Training in Chennai
RPA Training in Chennai
AngularJS Training in Chennai
AWS Training in Chennai

Yogayogi said...

Thanks for the informative article. This is one of the best resources I have found in quite some time. Nicely written and great info. I really cannot thank you enough for sharing.
python Training institute in Pune
python Training institute in Chennai
python Training institute in Bangalore

Kayal said...

Interesting blog! I got huge of info to your post and thanks for sharing. Please keeping and give more details.
Best Spoken English Class in Chennai
English Coaching Classes in Chennai
Best Spoken English Institute in Chennai
Spoken English Course in Chennai
English Speaking Course in Chennai

vijaykumar said...

its such a wonderful arcticle.the above article is very helpful to study the technology thanks for that.
Python Training in OMR
Python Training in Porur
ccna Training in Chennai
ccna course in Chennai
R Training in Chennai
R Programming Training in Chennai

priya said...

Pleasant Tips..Thanks for Sharing….We keep up hands on approach at work and in the workplace, keeping our business pragmatic, which recommends we can help you with your tree clearing and pruning in an invaluable and fit way.
Data Science training in rajaji nagar
Data Science with Python training in chennai
Data Science training in electronic city
Data Science training in USA
Data science training in pune

jvimala said...

Thanks for the info! Much appreciated.
Regards,
Data Science Course In Chennai

ragul ragul said...

Good Post! Thank you so much for sharing this pretty post, it was so good to read and useful to improve my knowledge as updated one, keep blogging.
Best Devops Training in pune
Devops Training in Bangalore
Microsoft azure training in Bangalore
Power bi training in Chennai

jefrin said...

Good post i love to read this post
Best R programming training in chennai

jefrin said...

keep on posting new article
Best power BI training course in chennai

luckys said...

indian whatsapp group links

viji said...


Thanks for providing wonderful information with us. Thank you so much.
Data Science Course in Chennai
Data Science With R Training
Python Training in Chennai
Machine Learning in Chennai
SAS Training in Chennai

viji said...

Thank you for taking time to provide us some of the useful and exclusive information with us.
r programming training in chennai | r training in chennai
r language training in chennai | r programming training institute in chennai
Best r training in chennai

service care said...

I have gone through your blog, it was very much useful for me and because of your blog, and also I gained many unknown information, the way you have clearly explained is really fantastic. Kindly post more like this, Thank You.
mobile service center chennai
mobile service centre near me
mobile service centre chennai
best mobile service center in chennai

siva said...

Great Article… I love to read your articles because your writing style is too good,
its is very very helpful for all of us and I never get bored while reading your article because,
they are becomes a more and more interesting from the starting lines until the end.
python online training

Anonymous said...

You are doing a great job. I would like to appreciate your work for good accuracy
Regards,
best selenium training institute in chennai | selenium course in chennai

Ankit Varma said...

Amazing post. you have provided some really good infojava training in patna

Raji said...

It is really a great work and the way in which u r sharing the knowledge is excellent.Thanks for helping me to understand basic concepts.
R Training Institute in Chennai | R Programming Training in Chennai

meenati said...

IT's very informative blog and useful article thank you for sharing with us , keep posting learn more

Tableau online Training

Android Training

Data Science Course

Dot net Course

iOS development course

jefrin said...

And indeed, I’m just always astounded concerning the remarkable things served by you. Some four facts on this page are undeniably the most effective I’ve had.
Data science Course Training in Chennai | No.1 Data Science Training in Chennai
RPA Course Training in Chennai | No.1 RPA Training in Chennai

Sharon Wood said...

HP Printer Telephone Support
Brother Printers Tech Support
Canon Printer Help Number
Malwarebytes Customer Service Phone Number

UNKNOWN said...

lucky patcher
gb whatsapp
fm whatsapp
nova launcher prime apk

Gowri said...

It’s interesting content and Great work. Definitely, it will be helpful for others. I would like to follow your blog. Keep post

Check out:
best hadoop training in omr
hadoop training in sholinganallur
best institute for big data in chennai
big data hadoop course in chennai with placement

LindaJasmine said...

Awesome Blog. It shows your in-depth knowledge on the subject. Thanks for Posting.

Informatica Training in Chennai
Informatica Training Center Chennai
Informatica course in Chennai
Informatica Training center in Chennai
Informatica Training chennai
Informatica Training institutes in Chennai
Informatica Training in OMR
Informatica Training in Porur

Online Training said...

Very informative blog and useful article thank you for sharing with us, keep posting learn more about aws with cloud computing

AWS Online Training

AWS Certification

Artificial Intelligence Online Course

AI Online Course

AI Training

Google AI Course

Annonymous said...

we recently shared lucky patcher app download link on our blog

siddy said...


ultra omega burn
Bioleptin
Grs ultra
Panalean
hydralyft

Diya shree said...
This comment has been removed by the author.
Priyanka said...

Attend The Python Training in Bangalore From ExcelR. Practical Python Training in Bangalore Sessions With Assured Placement Support From Experienced Faculty. ExcelR Offers The Python Training in Bangalore.

saurav said...

Nice post
Top 10 cars under 5 lakhs
Top 10 cars under 6 lakhs
top 5 light weight scooty
best suv under 10 lakhs

Anonymous said...

This blog seems interesting. very useful content for readers. Thanks for sharing this information.
https://www.webdesigningcourse.in/web-design-training-in-chennai.html
https://www.zuaneducation.com/web-designing-training-courses
https://www.zuaneducation.com/php-training-courses
https://www.zuaneducation.com/magento-training-courses
https://www.webdesigningcourse.in/magento-training-in-chennai.html
https://www.webdesigningcourse.in/php-training-in-chennai.html
http://www.seojobtraining.in/web-designing-training-in-chennai.php

Anonymous said...

Thanks for this blog... Good article!!!
https://www.zuaneducation.com/web-designing-training-courses
https://www.digitalmarketingcourses.in/web-designing-training-in-chennai.php

Chris Hemsworth said...

The article is more informative. This is more helpful for our software testing training online selenium online training in chennai. software testing training online Thanks for sharing

Admin said...

hanuman chalisa official english lyrics
bigg boss official voting

Unknown said...

Nyatanya hal tersebut hanyalah sebuah omong kosong dalam permainan poker apa lagi poker uang asli.
asikqq
http://dewaqqq.club/
http://sumoqq.today/
interqq
pionpoker
bandar ceme
freebet tanpa deposit
paito warna terlengkap
syair sgp

jvimala said...

Hey, would you mind if I share your blog with my twitter group? There’s a lot of folks that I think would enjoy your content. Please let me know. Thank you. Data Science Training in chennai | Python training in chennai | machine learning Training in Chennai

Saurabh Jindal said...

hanks for the Valuable information.Really useful information. Thank you so much for sharing.It will help everyone.Keep Post. Find Some Indian Memes.

Entertainment News

Sadhana Rathore said...

Thanks for taking the time to discuss this, I feel happy about it and love to learn more on this topic.
ui ux design course in Chennai
ux design course in chennai
ui ux course in chennai
Web Designing Course in chennai
web designing training in chennai
Angular 6 Training in Chennai
ui ux design course in Velachery
ui ux design course in T Nagar
ui ux design course in OMR

Admin said...

click here to vote now

Anonymous said...

hibernate interview questions
ansible interview questions
ajax interview questions
pega interview questions
ospf interview questions

Anonymous said...

Python Training in Bangalore
AWS Training in Bangalore
Artificial Intelligence Training in Bangalore
Data Science Training in Bangalore
Machine Learning
Big Data and Hadoop Training in Bangalore

Aruna Ram said...

Superb!!! The blog was very informative and I was impressed your great post. I appreciate to you and continue blogging...
Oracle DBA Training in Chennai
oracle dba training institutes in chennai
Job Openings in Chennai
Linux Training in Chennai
Power BI Training in Chennai
Oracle Training in Chennai
Unix Training in Chennai
Social Media Marketing Courses in Chennai
Tableau Training in Chennai
Oracle DBA Training in Tambaram

Anonymous said...

Thanks for sharing an informative blog keep rocking bring more details
mobile application development training online
mobile app development course
mobile application development training
mobile app development course online
mobile application development course
online mobile application development
learn mobile application development

Gopal singh said...

Magic Tricks in Hindi

Math tricks in hindi
Rakshabandhan Status in hindi

daizy mathew said...

Thanks for sharing this useful information
https://www.zuaneducation.com/python-training-chennai

Printer Setup said...

It's an interesting article..!! Thanks for sharing. For Router Queries, Check in to our site..!!

Router Support , Connect to my Router , Router Settings , Wired router setup, wireless router setup, wifi router setup

Kiruthiprabha said...

Thanks for sharing this informative blog, It is really useful for me, through this blog I got a clear view about jQuery concept.
MSBI Online Training

jose said...

Really nice post. Thank you for sharing amazing information.
Java Training in Chennai/Java Training in Chennai with Placements/Java Training in Velachery/Java Training in OMR/Java Training Institute in Chennai/Java Training Center in Chennai/Java Training in Chennai fees/Best Java Training in Chennai/Best Java Training in Chennai with Placements/Best Java Training Institute in Chennai/Best Java Training Institute near me/Best Java Training in Velachery/Best Java Training in OMR/Best Java Training in India/Best Online Java Training in India/Best Java Training with Placement in Chennai



Anonymous said...

nice blog.
python training in bangalore

Anonymous said...

Machine learning Training

Anonymous said...

Nice blog.
python training bangalore
aws training in bangalore

Anonymous said...

Intersting article thanks for sharing

data science training in bangalore
machine learning training in bangalore

Tech Guy said...

Best AWS training in bangalore.
AWS training in bangalore

Tech Guy said...

Python training in bangalore
Python training in bangalore

Tech Guy said...

best AWS training in Bangalore!
AWS training in bangalore

Tech Guy said...

Nice article>
For data science training in bangalore,visit:
Data science training in bangalore

hubSpot said...

nice video.
want to become python developer

Tech Guy said...

Looking for Blockchain training in bangalore? Visit:
Blockchain training in bangalore

Tech Guy said...

For Data Science training in bangalore, visit:
Data Science training in bangalore

Tech News said...


nice blog
devops training in bangalore
hadoop training in bangalore
iot training in bangalore
machine learning training in bangalore
uipath training in bangalore

hubSpot said...

nice blog. important questions.
java interview questions

hubSpot said...

important interview questions.
java interview questions
angularjs interview questions
python interview questions

hubSpot said...

interview questions for MVC.mvc interview questions

hubSpot said...

nice blog.
sql query interview questions

hubSpot said...

top interview questions frequently asked.
tableau interview questions

hubSpot said...

best 25 angular interview questions.
angular interview questions

hubSpot said...

best 20 interview questions for java.
java interview questions

Tech News said...

BESTdevops training in bangalore

Tech News said...

Best Big data and hadoop training in bangalore

Benish said...

Nice blog....Thanks for sharing useful information...
Python training in Chennai/Python training in OMR/Python training in Velachery/Python certification training in Chennai/Python training fees in Chennai/Python training with placement in Chennai/Python training in Chennai with Placement/Python course in Chennai/Python Certification course in Chennai/Python online training in Chennai/Python training in Chennai Quora/Best Python Training in Chennai/Best Python training in OMR/Best Python training in Velachery/Best Python course in Chennai/<a

Tech News said...

IOT TRAINING IN BANGALORE

Tech News said...

Visit Here => DEVOPS TRAINING IN BANGALORE

Airtel Customer Care said...

The stores additionally contact involve a drugstore and bank. Other than staple, one can look for home enhancement and stylistic layout things, attire and design embellishments customer support check this

Anonymous said...

Oh, great information. Never forget to admire again.
꽁머니

Tech Guy said...

Nice blog
For Data Science training in bangalore, Visit:
Data Science training in bangalore

hubSpot said...

visit here to watch video-->tableau interview questions
angular js interview questions.
sql query interview questions
artificial intelligence career path
best software courses
best python courses

hubSpot said...

visit here==>python interview questions

hubSpot said...

click here to see video-->
best software courses
best python courses

hubSpot said...

interview questions.visit here to know more detail-->tableau interview questions
angular js interview questions.
sql query interview questions

Tech Guy said...

For Data Science training in Bangalore, Visit:
Data Science training in Bangalore

Tech Guy said...

For Python training in bangalore, Visit:
Python training in Bangalore

Printer Setup and Support said...


Thank you for sharing this good article. visit our website.
123.hp.com || 123.hp.com/setup || 123HP Setup || hp.com/setup || hp.com/123 || 123.hp.com setup || 123 HP Setup || 123 HP Printer Support || 123 HP Setup and Install || 123hpcom || 123 HP Printer Install || 123hpcomsetup || 123HPPrinterWirelessSetup || 123HP Install || hpcom/123 || 123 HP || 123 HP Printer || 123 HP Smart App || 123.hp.com Printer Setup || HP 123 Setup

Tech Guy said...

For AWS training in Bangalore, Visit:
AWS training in Bangalore

Tech News said...

Click here to find the Best Big Data And Hadoop Training in Bangalore

Tech Guy said...

Nice Content.
For Data Science training in Bangalore, Visit:
Data Science training in Bangalore

divi 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.web design company in velachery

Anonymous said...

Nice Post
For Python training in Bangalore, Visit:
Python training in Bangalore

zuan said...

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!

"web designing classes in chennai | Web Designing courses in Chennai "
Web Designing Training and Placement | Best Institute for Web Designing
Web Designing and Development Course | Web Designing Training in Chennai

Tech Guy said...

Nice Blog
For AWS training in Bangalore, Visit:
AWS training in Bangalore

Anonymous said...

Visit here for know more about Hadoop training in Bangalore

Anonymous said...

Visit for Python training in Bangalore:
Python training in Bangalore

gautham said...

very interesting post to learn on azure training in hyderabad

Anonymous said...

Visit for the best AI training in Bangalore:- Artificial Intelligence training in Bangalore

Anonymous said...

Nice Post
For Data Science training in Bangalore,
Visit: Data Science training in Bangalore

jayaka said...

amazing post and written in very simple and impressive language. Thanks for sharing
harry potter wifi names

gauri said...

Nice Post. You have done a great job. Please Keep Posting and Keep Sharing. Emotional Quotes

Shallu said...

Technical Bagle Helpful artical visit more info
32 bit 64 bit processor kya hota hai

zuan 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!

"web designing course in chennai | web designing classes in chennai "
"web designing training in chennai | web designing institute in chennai "
"web designing and development course | web designing training and placement "

Rajesh said...

Nice information, want to know about Selenium Training In Chennai
Selenium Training In Chennai
Selenium Training
Data Science Training In Chennai
Protractor Training in Chennai
jmeter training in chennai
Rpa Training Chennai
Rpa Course Chennai
Selenium Training institute In Chennai
Python Training In Chennai

Unknown said...

Thank you for this great article i learn a lot from your article keep it up.

Unknown said...

The strncmp() function in C++ is used for comparing two string and checking if they are equal or not. strcmp() function compares two strings character by character from the first character until the end of one of the string occurs then it returns the result.

binarabdmc said...

chinese school in Dubai

ramya said...

Appreciating the persistence you put into your blog and detailed information you provide.Great blog Sir
Aws training chennai | AWS course in chennai
Rpa training in chennai | RPA training course chennai
oracle training chennai | oracle training in chennai
php training in chennai | php course in chennai

jefrin said...

Great blog Sir Really helpful for me
Aws training chennai | AWS course in chennai

ramya said...

Great post very useful info thanks for this post ....
Aws training chennai | AWS course in chennai

ramya said...

Great post very useful info thanks for this post ....
Aws training chennai | AWS course in chennai



nowfirstviral said...

thanks for share this amazing article 먹튀 검증사이트

Training for IT and Software Courses said...

Very interesting blog Thank you for sharing such a nice and interesting blog and really very helpful article.python training in bangalore

Abhishek said...

Nice Information

Abhishek said...

Nice Information

svrtechnologies said...

thanks for sharing such an informative stuff...

amazon web services tutorial for beginners

Vijayakash said...

DevOps Training in Chennai .
I am glad that I have visited this blog. Really helpful, eagerly waiting for more updates.

Durai Moorthy said...

Thanks for your blog. The information which you have shared is really useful for us.
aws Training in Bangalore
python Training in Bangalore
hadoop Training in Bangalore
angular js Training in Bangalore
bigdata analytics Training in Bangalore

vijay said...

Thanks for sharing this useful information
aws Training in Bangalore
python Training in Bangalore
hadoop Training in Bangalore
angular js Training in Bangalore
bigdata analytics Training in Bangalore

nowfirstviral said...

thank you very much for share this wonderful article 토토사이트

svrtechnologies said...

really thanks for posting such an informative stuff...

oracle training

Bangalore Training Academy said...

Thank you so much for the great and very beneficial stuff that you have shared with the world.

Upgrade your career Learn AWS Training from industry experts get Complete hands-on Training, Interview preparation, and Job Assistance at Bangalore Training Academy Located in BTM Layout.

Jack sparrow said...

This post is really nice and informative. The explanation given is really comprehensive and informative . Thanks for sharing such a great information..Its really nice and informative . Hope more artcles from you. I want to share about the best java tutorial videos for beginners with free bundle videos provided and java training .

Softgen Infotech said...

Such a great information for blogger i am a professional blogger thanks…

Softgen Infotech is the Best HADOOP Training located in BTM Layout, Bangalore providing quality training with Realtime Trainers and 100% Job Assistance.

Maneesha said...

Excellent Blog! I would like to thank for the efforts you have made in writing this post. I am hoping the same best work from you in the future as well. I wanted to thank you for this websites! Thanks for sharing. Great websites!
data analytics courses online

Durai Moorthy said...

Thanks for sharing an informative blog keep rocking bring more details
aws Training in Bangalore
python Training in Bangalore
hadoop Training in Bangalore
angular js Training in Bangalore
bigdata analytics Training in Bangalore
python Training in Bangalore
aws Training in Bangalore

Johan said...

Thank you for sharing .The data that you provided in the blog is informative and effective.

web designing training in bangalore

web designing courses in bangalore

web designing classes in bangalore

web designing training institute in bangalore

web designing course syllabus

best web designing training

web designing training centers

nowfirstviral said...

your website is very good 파워볼사이트

dhishageetha said...


I wish to say that this post is amazing, nice written and include approximately all important infos. I would like to see more posts like this
Regards,
Python Training in Chennai | Python Programming Classes | Python Classes in Chennai

Viral said...

very nice article 토토사이트

Rajesh Anbu said...

Wonderful blog with lots of information, Keep up the good work and share more like this.
aws Training in Bangalore
python Training in Bangalore
hadoop Training in Bangalore
angular js Training in Bangalore
bigdata analytics Training in Bangalore
python Training in Bangalore
aws Training in Bangalore

Adam Jon said...

Office installation is a well-known name in the pc world. Whether you are a professional working in the corporate world, or even a college student Or anybody who's working on a computer system have to set up Office installation for Creating your task easier. So search Office.com/set up in your browser and receive the Most useful software package on your system.
Office.com/setup

Gurvinder sir said...

Thanks for this informative blog
how can i download ccc exam admit card

cctvdubaishop said...

Dubai video surveillance and surveillance system

The best provider of CCTV installation services in Dubai
We offer services at your doorstep. If you need a video surveillance camera, we will help you. We are dubai cctv installation , our engineers are certified by the dubai administration,
Our security experts can provide all the details, we also offer video surveillance if you need bulk goods. We also offer office and home services.


Rahul said...

Very Useful Information..I really loved it..Thanks a lot

DevOps Training in Chennai
DevOps Training in Chennai with placement
DevOps Training in Chennai omr
DevOps Training in Velachery
DevOps Training in Chennai Tambaram
DevOps Institutes in Chennai
DevOps Certification in Chennai

Admin said...

check result website

Chris Hemsworth said...


I have been reading for the past two days about your blogs and topics, still on fetching! Wondering about your words on each line was massively effective. Techno-based information has been fetched in each of your topics. Sure it will enhance and fill the queries of the public needs. Feeling so glad about your article. Thanks…!
best software testing training in chennai
best software testing training institute in chennai with placement
software testing training
courses

software testing training and placement
software testing training online
software testing class
software testing classes in chennai
best software testing courses in chennai
automation testing courses in chennai

Shyam said...

Good Blog on Json and Jquery..Amazing code that u given..this is really helpful and i am sure the coders would enjoy reading it.

Python Training in Chennai
Python Training in Chennai tamilnadu
Python course fees in chennai quora
Python Scripting Training
Python Programming Classes near me
Python training centre in chrompet
Python training in chennai omr
Python training in chennai velachery

All Customer Service Number said...

You can learn from the help of our blog on What the Acquisition of Skype May Mean for Microsoft. Click on the following link to read more about "Acquisition of Skype May Mean for Microsoft
"

svrtechnologies said...

I just loved your article on the beginners guide to starting a blog. Thank you for this article. AI Training with highly experienced facutly.

Elan said...

Nice Blog..I am impressed with your writing skill..

Best Data Science Training in Chennai
Top 5 Data Science Training in Chennai
Data Science training Course Content
Data Science Training in Velachery
Data Science Training in omr
Data Science Training in vadapalani
Data Science Training in Chennai
Data Science Courses in Chennai
Data Science Training Institute in Chennai
Data Science online course
Data Science with python training in chennai
Data Science with R training in chennai

Tony Chew said...

Karena peluang menang pada permainan tertentu sangat penting bagi semua penjudi, Microgaming menyediakan laporan pembayaran reguler di situsnya pokerpelangi
98toto

devasuresh121@gmail.com said...

Thanks for this blog is unique information step by step. I here by attached my site would you see this blog

7 tips to start a career in digital marketing

“Digital marketing is the marketing of product or service using digital technologies, mainly on the Internet, but also including mobile phones, display advertising, and any other digital medium”. This is the definition that you would get when you search for the term “Digital marketing” in google. Let’s give out a simpler explanation by saying, “the form of marketing, using the internet and technologies like phones, computer etc”.

we have offered to the advanced syllabus course digital marketing for available join now

more details click the link now

https://www.webdschool.com/digital-marketing-course-in-chennai.html

devasuresh121@gmail.com said...

Amazing this blog

Web designing trends in 2020

When we look into the trends, everything which is ruling today’s world was once a start up and slowly begun getting into. But Now they have literally transformed our lives on a tremendous note. To name a few, Facebook, Whats App, Twitter can be a promising proof for such a transformation and have a true impact on the digital world.


we have offered to the advanced syllabus course web design and development for available join now

more details click the link now

https://www.webdschool.com/web-development-course-in-chennai.html

svrtechnologies said...

Thanks for sharing such a great information..Its really nice and informative.. data science training

Admin said...

asianet bigg boss malayalam season 2 voting

star vijay bigg boss tamil season 4 votingstar maa bigg boss telugu season 4 voting

colors bigg boss hindi voting

svrtechnologies said...

Pretty article! I found some useful information in your blog, it was awesome to read, thanks for sharing this great content to my vision, keep sharing.... hadoop online training

StoneCold said...

Good blog post. I like this.
Watch american rodeo 2020 Live Stream
If you are a sport lover, then check this out.

StoneCold said...

Amazing article. It is very Helpful for me.
Watch cheltenham festival 2020 Live Stream
Thanks.

Jones Brianna said...

You have done a good job in writing a useful content. I am glad to see this post. I just stumble upon your blog and found it very useful for me. Thanks a lot for sharing.
Esports Tournament App Development

mod apk said...

bygy

svrtechnologies said...

This is so elegant and logical and clearly explained. Brilliantly goes through what could be a complex process and makes it obvious.

oracle erp training

StoneCold said...

Amazing article. It is very helpful for me.
World Masters Athletes Championship 2020
Thanks.

Rahul said...

Thanks for the article ..beautifully presented content...worth reading it...

AI Training in Chennai
Artificial Intelligence course in chennai
AI Courses in Chennai
Artificial Intelligence course in chennai with placement
Azure Training in chennai
Azure Training Center in chennai
Azure Training Institute in chennai
Azure DevOps Training in Chennai
Azure Training in Chennai OMR
Azure Training in Chennai Velachery
Azure Training Institute in Chennai
Azure DevOps Training in Chennai
DevOps Training in Chennai

nowfirstviral said...

very nice and great It shows like you spend more effort and time to write this blog. I have saved it for my future reference 구글상위노출.

technicalganu said...

REALLY VERY NICE INFORMATION

technicalganu

Jaswal Gupta said...

Having read this I thought it was extremely informative. I appreciate you finding the time and energy to put this article together. I once again find myself personally spending a lot of time both reading and leaving comments. But so what, it was still worth it! KBC Head Office Contact Number

nowfirstviral said...

very nice and great website very great 더나인카지노

Anonymous said...

fairygodboss

Anonymous said...

From:Aptoide Apk Download
Thank you for excellent article.I enjoyed reading your blog!!

nowfirstviral said...

Thank you for sharing this good article. visit our website 바카라사이트

Arvind Kumar said...
This comment has been removed by the author.
Arvind Kumar said...
This comment has been removed by the author.
Arvind Kumar said...

Such a very useful articles. i would like to thank you for your efforts you had made for writing this awesome blogs.
For Machine learning Course in Bangalore visit:
Machine Learning Online training course in Bangalore

Arvind Kumar said...
This comment has been removed by the author.
Arvind Kumar said...
This comment has been removed by the author.
Arvind Kumar said...

Such a very useful articles. i would like to thank you for your efforts you had made for writing this awesome blogs.
For Machine learning Course in Bangalore visit:
Machine Learning Online Training In Bangalore
Machine Learning Online Training In India
Machine Learning Online Training course
Machine Learning Online course

Unknown said...

Tamilyogi 2020 Movies

TamilRockers New Link May 2020

free download latest bollywood & hollywood movies

khatrimaza Download Latest Movies


MovieRulz Hindi Download Latest Movies 2020

tamilrockers 2020

online net marketing

bavisthra said...

Study ExcelR Data Analytics Course in Bangalore where you get a great experience and better knowledge.
Data Analytics Course in Bangalore

Joyal said...

Effective blog with a lot of information. I just Shared you the link below for Courses .They really provide good level of training and Placement,I just Had Data Science Classes in this institute , Just Check This Link You can get it more information about the Data Science course.


Java training in chennai | Java training in annanagar | Java training in omr | Java training in porur | Java training in tambaram | Java training in velachery

Nilesh Bambhaniya said...

Thanks For Provide This Code

Kisi Ko Bhi Java Shikhana Hai To Ye Article Jarur Padhiye
Java Kya Hai Or Kaise Shikhe Full Janakri

«Oldest ‹Older   1 – 200 of 421   Newer› Newest»

Post a Comment