What is Liubo(六博)?
One of the oldest recorded board games, Liubo, 六博, literally "six sticks" in Chinese, has a mysterious origin and even more mysterious disappearance. Emerging early in Chinese history, it was the most played game during the Han Dynasty and remained so until the emergence of Go, 围棋, in ancient China. In spite of its abundant preservation in the archeological record, and numerous historical writings describing the game, the exact rules of the game remain unknown to this very day.
Liubo: Resurrection
Fortunately, we need not leave this game in perpetual obscurity. Jean-Louis Cazaux, an author of many books on the history of chess and ancient board games, has done an extensive study of the historical and archeological record and posited a reconstruction of the rules. Furthermore, he has subjected these rules to extensive playtesting to discover a game that is quite entertaining to play.
After some exchanges with the author I've been able to implement the game he envisioned on the web with both multiplayer and AI capability.
To play the game, you first sign in using an OpenID such as Google or Yahoo. Then you press "Play" and you will be placed into the game queue for another opponent. If you wish, you may press "Skip to AI" and play the AI instead. Then you will randomly play as either white or black, white goes first as in chess. Two sets of yin-yang sticks are then thrown automatically on the right side of the screen, one mark for yin and two marks for yang. Total the yang plus one for each set of three sticks, and you have your move number, for instance 3-2. This means you move 3 the first move, then 2 the second. To move, you may either enter a stone onto the board at the move number, or if the piece has not moved this turn, you may advance the stone. Advancements go counter-clockwise around the board; press the Moves button to see the move order. At two special positions, numbers 6 and 11, you may move inward towards the center and across the board. If you land directly on the center, your piece is promoted to an "owl" if you don't have one already. This owl can then capture other pieces and put them into your prison; for regular stones, captures only return the piece to the other player. You may have only one owl at a time. Capture all the opponent stones and you win; capture the opponent owl if you have no owl and you also win; have five stones on the board and no owl while your opponent has an owl and you also win; let the other side run out of the 10 minute move clock and you also win. After each game, your elo rank and that of your opponent (including the AI, "SiliconDragon") is adjusted. You may see the top rated players with the Ratings button. You can find the game here:
HTML5 Multiplayer Design
When starting the design, I first did a static layout of the board in HTML and CSS. I wanted a design that would scale to different screen sizes so I could use it on iPad as well as various desktop sizes. Also I wanted it to work on various browsers including IE8, so I focused on using CSS drawing techniques with borders and screen percentages and tested it on various platforms. Using gradients and fallback CSS I was able to make the board, throwing sticks and pieces without using any images at all.
Once the layout was done, there remained the huge effort of programming. There are many options in creating an interactive HTML5 app today, from WebSockets, to Flash compilation to Canvas, to game-specific libraries such as Impact.js. For speed and compatibility, I chose to use div-based HTML5 javascript with jQuery. Although node.js shows promise, I prefer the established ease of use of Google AppEngine and its python backend, so I went with that. Linking the client and server is the newly released Google Channel API.
Implementing a Google Channel API Client
The trickiest part of the whole project was getting the Channel API to work properly. My first mental reset was realizing it is a unidirectional, not bidirectional, API. That is, the Channel API requires that the server give a channel token to a client and then the client connect to the server, however only the server is allowed to send messages to the client. The client is not allowed to send messages to the server over the channel. Instead, the client must use normal HTTP requests to the server which then must be matched to a client token whereby the server can send a response over the channel.
Illustrating this procedure, first here is a python snippet initiated by client request for a new channel. It runs on the appengine and creates a new channel, stores it to the datastore, and then returns the channel token along with other user data in a JSON:
def put_channel(self, user, profile): profile.channeltoken = channel.create_channel(make_channel_id(user.federated_identity())) profile.channeldate = datetime.now() profile.put() profile_json = { 'screenname': profile.screenname, 'character': profile.character, 'rating': profile.rating, 'rank': compute_rank(profile.rating), 'numgames': profile.numgames, 'dateadded': profile.date_added.strftime('%Y-%m-%d'), 'logoutURL': users.create_logout_url('/'), 'channeltoken': profile.channeltoken } self.response.out.write(simplejson.dumps(profile_json))
On the javascript side, we receive this channeltoken, set our channel id to this token, and then create a new channel. We then open a socket and setup socket handlers. The socket open handler requests a new game to join. The socket message handler processes each message sent from the server, such as starting a multiplayer game and receiving moves from an opponent.
self.channel = new goog.appengine.Channel(self.channelid); self.socket = self.channel.open(); self.socket.onopen = self.socketOnOpened; self.socketOnOpened = function() { // give it a chance to startup setTimeout(game.requestJoin, 5000); }; self.socketOnMessage = function(message) { // console.log('received message data:'+message.data); var messageArray = $.parseJSON(message.data); if (!messageArray) { alert('invalid message received: ' + message.data); return; } for (var i=0; i<messageArray.length; i++) { var messageline = messageArray[i]; var command = messageline.shift(); var data = messageline; self.commandProcessor.processCommand(command, data); } };
Going again back to the server-side python code, we create a simple function for sending messages to the client via the channel. When creating a game, we first create a unique gamekey, then send it to the channel. Another important point to note about the Channel API is illustrated here: the server must have a different unique channel to each client it wishes to connect to. There are no broadcast channels or multiple subscribers; it is strictly one-to-one. So the server has created two channel ids, one for the white side and one for the black side, upon client connect. Then as the game progresses, messages are sent from the server to each client via its own respective channel. A unique gamekey, sent by each client during a request, allows the server to connect a request to a particular game, and thus provide a link between two clients in a multiplayer game:
def send_message(self, channelid, json): logging.info('sending message to:%s payload:%s', channelid, simplejson.dumps(json)) channel.send_message(channelid, simplejson.dumps(json)) def create_game(self): self.create_gamekey() game = Game(parent=gamezero) game.gamestatus = 'WJ' # waiting for join game.gamecreated = datetime.now() game.gamekey = newline_encode(self.gamekey) game.gamestatus = 'GS' # game started game.gamestarted = datetime.now() game.put() self.send_message(self.black_channelid, [['PB'], ['OP',game.white_playername],['GS',self.gamekey]]) # game started, white's move self.send_message(self.white_channelid, [['PW'], ['OP',game.black_playername],['GS',self.gamekey],['WM']])
Again returning to the client javascript side, we receive the new gamekey and begin the game. Each time after the client player moves, an HTTP POST request is sent to the server. This request contains the gamekey and the moves for this turn. We don't wait for any reply from the server to our request; instead, our previously established socket listener waits for any commands to be received via the channel API, namely, the other players moves. This methodology is how the Channel API is meant to be used in interactive applications.
self.startGame = function(data){ $('#gamejoinstatus').html('Starting game...'); clearTimeout(self.joinTimeout); game.gamekey = data[0]; game.startGame(); } self.sendMoves = function(moves) { var params = { gamekey: self.gamekey, moves: $.JSON.encode(moves) }; // console.log('POST moves to server:'+params.moves); $.post('/games', params) .error(function(){ $('#throwturn').html('Unable to send move'); }); }
Returning to the python server side, we find our move processor. After receiving the HTTP POST request from the client with the game key and validating moves, we simply relay the move to the other player via the other player's channel id. In addition, we check for a validated game over condition:
def post(self): self.user = users.get_current_user() self.request.get('gamekey'), self.request.get('moves')) self.gamekey = self.request.get('gamekey') if not self.user or not self.gamekey: self.error(403) elif self.request.get('moves'): self.moves = simplejson.loads(self.request.get('moves')) if self.decode_gamekey(): self.process_moves() else: self.error(403) def process_moves(self): # just relay moves to the other side self.send_message(self.other_channelid(), self.moves); for move in self.moves: command = move[0] if command == 'GO': # gameover status = move[1] winner = move[2] reason = move[3] self.process_gameover(status, winner, reason) break
Lastly, let's see how we actually process moves on the client side. I've adopted a simple json-based symmetrical send/receive protocol, so all messages back and forth are sent as json-encoded lists. Each item in the list is itself a list, consisting of a two-character string command code and zero or more data items. The heart of this is the client command processor that receives each different command type from the server and then dispatches it to the appropriate handler:
self.processCommand = function(command, data) { // console.log('Command and data received: '+command+' '+data); switch (command) { case 'WJ': self.waitForJoin(); break; case 'OP': self.setOtherPlayer(data); break; case 'PW': self.setPlayer('white'); break; case 'PB': self.setPlayer('black'); break; case 'GS': self.startGame(data); break; case 'GO': self.gameOver(data); break; case 'WT': self.receiveThrow('white', data); break; case 'BT': self.receiveThrow('black', data); break; case 'WM': self.takeTurn('white'); break; case 'BM': self.takeTurn('black'); break; case 'WS': self.moveStone('white', data); break; case 'BS': self.moveStone('black', data); break; case 'WP': self.promotionMove('white', data); break; case 'BP': self.promotionMove('black', data); break; case 'WB': self.receiveBonusThrow('white'); break; case 'BB': self.receiveBonusThrow('black'); break; case 'NR': self.newRating(data); break; default: } };
That pretty much covers how to use the Google Channel API in a multiplayer game. The good thing is I found it worked across all the platforms I tested, and at lower volumes it's completely free to use on the Google AppEngine. So you can get something up and running without spending any cash, only if it takes off do you need to front up some mulah. There are many other aspects to the game which I could elaborate if readers desire, but this has provided a good introduction to using the Channel API in your own game. Try it out:
PS: I recommend the site HTML5Games to see the latest in HTML Indie Gaming.
Hey Arley
ReplyDeleteThanks so much bro
ReplyDeleteGreat Article
ReplyDeleteJavaScript Training in Chennai | JavaScript Course | Javascript Online Course | Angularjs Training in Chennai | Backbone.JS Training in Chennai | Bootstrap Training in Chennai | Node.js Training in Chennai
Great Article
Online Java Training | Java Training in Chennai | Java Training Institutes in Chennai | Java EE course | Java Course in Chennai | J2EE Training in Chennai | java j2ee training institutes in chennai | Java 360
Great Article
.net training online | C# Online Training | Dot Net Training in Chennai | .Net Training in Chennai | ASP.NET Training | ASP.NET MVC Training | Dot Net Interview Questions | Dot Net Training Institutes in Chennai
Wonderful article, very useful and well explanation. Your post is extremely incredible. I will refer this to my candidates
ReplyDeleteSAP Training in Chennai
Thank you for sharing such a nice article here. And please keep update like this information here.
ReplyDeleteSAP MM Training in Chennai
The programming was very easily understand and more important coding are provided on this post and this is very valuable in my studies,all coding easily understand and develop more skills,thanks for sharing this post.
ReplyDeletedigital marketing training in chennai
Excellent post, some great resources with the execution models. Styling your blog the right way is key. This information is impressive..I am inspired with your post writing style & how continuously you describe this topic. After reading your post,thanks for taking the time to discuss this, I feel happy about and I am eager to learn more about this topic.
ReplyDeletedigital marketing training Chennai
About the python information really very excellent and i find more new information,i like that kind of information,not only i like that post all peoples like that post.
ReplyDeleteOracle SQL Training in Chennai
In each game shows your name and a small capture what awaits you when you enter it.
ReplyDeleteUnblocked Games at School
Unblocked Games circle
ReplyDeleteGreat and useful article. Creating content regularly is very tough. Your points are motivated me to move on.
Truly a very good article on how to handle the future technology. After reading your post,thanks for taking the time to discuss this, I feel happy about and I love learning more about this topic.
SEO Company in Chennai
Wow post.. Thank you sharing this kind of interesting and amazing post which will provide more information
ReplyDeleteSMO Services Chennai
your app report is really awesome and it is very much interesting i like the features and it is very well to get about the clear concept.
ReplyDeleteOnline Reputation Management
ReplyDeleteAll are saying the same thing repeatedly, but in your blog I had a chance to get some useful and unique information, I love your writing style very much, I would like to suggest your blog in my dude circle, so keep on updates.
Online Reputation Management
thank you for sharing such a nice and interesting blog with us. hope it might be much useful for us. keep on updating...
ReplyDeleteSEO Company In Chennai
Really a very well information here. And actually Python is a easiest language that can support at all platform than Java. I am interested to know more about this.
ReplyDeleteEmail Marketing Chennai
ReplyDeleteWhat an awesome post, I just read it from start to end. Learned something new after a long time.
Informatica Training in Chennai
Your procedure and way of idea is really good and thus it is very much interesting, i came too know more information about your blog.
ReplyDeleteAndroid Training in Chennai
wow great,nowadays this type of blog id more important and informative technology,it was more impressive to read ,which helps to design more in effective ways
ReplyDeleteJava J2ee training in chennai
Thanks for sharing article like this. The way you have stated everything above is quite awesome. Keep blogging like this. Thanks a lot.
ReplyDeleteBest Dot Net Training Institutes in Chennai
very useful information provided in this blog. concepts were explained in a detailed manner. Keep giving these types of information.
ReplyDeleteSEO Training in Chennai
your blog is really awesome and you have clearly explained many more topics and it is really good thus it is very much interesting and really nice too.
ReplyDeleteBest Informatica Training Institute in Chennai
A very nice guide. I will definitely follow these tips. Thank you for sharing such detailed article. I am learning a lot from you.
ReplyDeleteBest Dental Clinic In Vellore
Best Dental Clinic In OMR
Very nice post here thanks for it I always like and search such topics and everything connected to them.Excellent and very cool idea and the subject at the top of magnificence and I am happy to comment on this topic through which we address the idea of positive re like this.
ReplyDeleteCar Wash Services in Mumbai
That is very interesting; you are a very skilled blogger. I have shared your website in my social networks..!
ReplyDeletePayday loans in Alabama
Title loans in South Carolina
AS python is important for the calculating purpose in th similar way SQl and Plsql are very basic and very needy languages for Data base management.
ReplyDeleteOracle SQL Frequently Asked Questions
Great post! I am see the great contents and step by step read really nice information.I am gather this concepts and more information. It's helpful for me my friend. Also great blog here with all of the valuable information you have.
ReplyDeleteWeblogic Training in Chennai
Excellent goods from you, man. I’ve understand your stuff previous to and you’re just too excellent. I actually like what you’ve acquired here, certainly like what you are stating and the way in which you say it. You make it enjoyable and you still take care of to keep it sensible. I can not wait to read far more from you. This is actually a tremendous site..
ReplyDeleteArchitectural Firms in Chennai
Architects in Chennai
Its a wonderful post and very helpful, thanks for all this information. You are including better information regarding this topic in an effective way.Thank you so much
ReplyDeletecloud computing training in chennai
i really like this blog.And i got more information's from this blog.thanks for sharing!!!!Web Development Company in India
ReplyDeleteIt's a nice blog keep on creating a blog like this..
ReplyDeleteDigital Marketing Training in Chennai
Java Training in Chennai
Web Designing Training in Chennai
Microsoft Azure Training in Chennai
There are lots of information about latest technology and how to get trained in them, like this have spread around the web, but this is a unique one according to me. The strategy you have updated here will make me to get trained in future technologies. By the way you are running a great blog. Thanks for sharing this.
ReplyDeleteDigital Marketing Training in Chennai
Thank you for sharing such a nice and interesting blog with us. I have seen that all will say the same thing repeatedly. But in your blog, I had a chance to get some useful and unique information. I would like to suggest your blog in my dude circle.
ReplyDeleteInformatica Training in Chennai
This comment has been removed by the author.
ReplyDeleteThank you for sharing such a nice and interesting blog with us. I have seen that all will say the same thing repeatedly. But in your blog, I had a chance to get some useful and unique information. I would like to suggest your blog in my dude circle.
ReplyDeleteWeb development Company in India
Just read your website. Good one. I liked it. Keep going. you are a best writer your site is very useful and informative thanks for sharing!
ReplyDeleteHerbal Shampoo
Really i like this blog and i got lot of information's from your blog.And thanks for sharing!!!!
ReplyDeleteCorporate Office Interiors in Chennai
This comment has been removed by the author.
ReplyDeleteYour blog is very unique and interesting. It makes reader to come back and visit again.
ReplyDeleteSelenium Training in Chennai
Great.Nice information.It is more useful and knowledgeable. Thanks for sharing keep going on..
ReplyDeleteSEO company in India
Digital Marketing Company in Chennai
This blog is having the general information. Got a creative work and this is very different one.We have to develop our creativity mind.This blog helps for this. Thank you for this blog. This is very interesting and useful.
ReplyDeleteSelenium Training in Chennai
Thanks for sharing this valuable information.I have read your blog and i got a very useful and knowledgeable information from your blog.You have done a great job.
ReplyDeleteseo company
Its really very useful topic. Thanks for sharing this information.
ReplyDeleteSAP SD Training in Chennai
very informative blog and very useful for readers. making us to learn more from your blog...
ReplyDeleteBest sap basis training in chennai
It is very useful to everyone. Nice blog. Keep on sharing like this information...
ReplyDeleteSAP MM Training in Chennai
Its really an Excellent post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog. Thanks for sharing
ReplyDeleteSAP Training in Chennai
SAP ABAP Training in Chennai
Really nice information you had posted. Its very informative and definitely it will be useful for many people
ReplyDeleteBest Dental Clinic in Mylapore
Dental Implants in Chennai
Pediatric Dentist in Chennai
Orthodontic Treatment
ReplyDeleteIt is really very excellent,I find all articles was amazing.Awesome way to get exert tips from everyone,not only i like that post all peoples like that post.Because of all given information was wonderful and it's very helpful for me.
Hadoop Training in Chennai
Data Warehousing Training in Chennai
Informatica Training in Chennai
SAS Training in Chennai
This is a very interesting web page and I have enjoyed reading many of the articles and posts contained on the website, keep up the good work and hope to read some more interesting content in the future.
ReplyDeleteResearch Paper Publication
Science Journal
IEEE Projects
Journal Impact Factor
Highest Impact Factor Journal
Accountants Hove
ReplyDeletenice blog !! this is really nice and interested to read.
Were a gaggle of volunteers as well as starting off a brand new gumption within a community. Your blog furnished us precious details to be effective on. You've got completed any amazing work!
ReplyDeleteClick here:
python training in chennai
Click here:
python training in tambaram
Thanks for the good words! Really appreciated. Great post. I’ve been commenting a lot on a few blogs recently, but I hadn’t thought about my approach until you brought it up.
ReplyDeleteBlueprism online training
Blue Prism Training in Pune
Blueprism training in tambaram
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..
ReplyDeleteDevops Training in Chennai
Devops Training in Bangalore
ReplyDeleteAwesome article. It is so detailed and well formatted that i enjoyed reading it as well as get some new information too. provides you with a state of the art software which combines modern GPU technology (Graphic Processing Units) with the best practices in today’s Big Data platforms, providing up to 100x faster insights from data.
Bigdata Training in Chennai OMR
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? It follows your previous guideline for post length as well as clarity..
ReplyDeleteCRM Software in india
CRM Software in Chennai
http://ibdpartnership.blogspot.com/SQream Technologies provides you with a state of the art software which combines modern GPU technology (Graphic Processing Units) with the best practices in today’s Big Data platforms, providing up to 100x faster insights from data.
ReplyDeleteBigdata Training in Chennai OMR
A universal message I suppose, not giving up is the formula for success I think. Some things take longer than others to accomplish, so people must understand that they should have their eyes on the goal, and that should keep them motivated to see it out til the end.
ReplyDeleteData Science training in kalyan nagar | Data Science training in OMR
Data Science training in chennai | Data science training in velachery
Data science training in tambaram | Data science training in jaya nagar
I appreciate your efforts because it conveys the message of what you are trying to say. It's a great skill to make even the person who doesn't know about the subject could able to understand the subject . Your blogs are understandable and also elaborately described. I hope to read more and more interesting articles from your blog. All the best.
ReplyDeletejava training in tambaram | java training in velachery
java training in omr | oracle training in chennai
Really nice experience you have. Thank you for sharing. It will surely be an experience to someone.
ReplyDeleteangularjs Training in marathahalli
angularjs interview questions and answers
angularjs Training in bangalore
angularjs Training in bangalore
angularjs Training in chennai
Does your blog have a contact page? I’m having problems locating it but, I’d like to shoot you an email. I’ve got some recommendations for your blog you might be interested in hearing.
ReplyDeleteAWS Training in Velachery | Best AWS Course in Velachery,Chennai
Best AWS Training in Chennai | AWS Training Institutes |Chennai,Velachery
Amazon Web Services Training in Anna Nagar, Chennai |Best AWS Training in Anna Nagar, Chennai
Amazon Web Services Training in OMR , Chennai | Best AWS Training in OMR,Chennai
Amazon Web Services Training in Tambaram, Chennai|Best AWS Training in Tambaram, Chennai
AWS Training in Chennai | AWS Training Institute in Chennai Velachery, Tambaram, OMR
Its quite impressive post please continue posting like this and find the links to be updated relevant to best interior designs if interested from:
ReplyDeleteBest Architects in India
Turnkey Interior Contractors in Chennai
Architecture Firms in Chennai
Warehouse Architect
Factory Architect Chennai
Office Interiors in Chennai
Rainwater Harvesting chennai
Your good knowledge and kindness in playing with all the pieces were very useful. I don’t know what I would have done if I had not encountered such a step like this.
ReplyDeleteJava interview questions and answers
Java training in Chennai | Java training institute in Chennai | Java course in Chennai
This looks absolutely perfect. All these tiny details are made with lot of background knowledge. I like it a lot.
ReplyDeletepython interview questions and answers
python tutorials
python course institute in electronic city
Nice post. By reading your blog, i get inspired and this provides some useful information. Thank you for posting this exclusive post for our vision.
ReplyDeleteangularjs Training in bangalore
angularjs Training in bangalore
angularjs online Training
angularjs Training in marathahalli
angularjs interview questions and answers
I found your blog while searching for the updates, I am happy to be here. Very useful content and also easily understandable providing.. Believe me I did wrote an post about tutorials for beginners with reference of your blog.
ReplyDeleterpa training in chennai
rpa training in bangalore
rpa course in bangalore
best rpa training in bangalore
rpa online training
This comment has been removed by the author.
ReplyDeleteNice blog..! I really loved reading through this article. Thanks for sharing such an amazing post with us and keep blogging...Well written article Thank You for Sharing with Us project management courses in chennai |pmp training class in chennai | pmp training near me | pmp training courses online | <a
ReplyDeleteI do trust all of the concepts you’ve presented on your post. They’re really convincing and will definitely work. Still, the posts are too brief for newbies. May you please extend them a little from subsequent time?Also, I’ve shared your website in my social networks.
ReplyDeleteMobile App Development Company In Chennai
Android App Development Company In Chennai
Android Application Development Company In Chennai
Custom Web Application Development Company In Chennai
Fantastic work! This is the type of information that should follow collective approximately the web. Embarrassment captivating position Google for not positioning this transmit higher! Enlarge taking place greater than and visit my web situate
ReplyDeleteJava training in Bangalore | Java training in Indira nagar
Java training in Bangalore | Java training in Rajaji nagar
Java training in Bangalore | Java training in Marathahalli
Java training in Bangalore | Java training in Btm layout
Nice post..
ReplyDeletedata science training in BTM
best data science courses in BTM
data science institute in BTM
data science certification BTM
data analytics training in BTM
data science training institute in BTM
Shipping in Riyadh*Insect control in Jizan*Water leak detection in Taif*Moving furniture in Taif*Important tips when isolating process*Ceramic flooring types and wood flooring*Examination Villas in Riyadh*Steam cleaning in Taif*Ways to get rid of chaos at home*An insect control in Taif
ReplyDeleteAs per my thought Ancient games reviving is a good thing. It is really a upgraded one and also rectify the disadvantages and add new thing when compared to old versions.
ReplyDeleteDot net Course Fees
Dot net Training Institute in Velachery
Dot net Training Institute in Chennai
Dot net Training in Chennai
Full Stack Developer Training Online
Full Stack web Developer Training
Full Stack Developer Training
Full Stack Developer Course
Ancient games are very interesting to play. I request you to make games based on strategy and intelligence. Now a days games are very rudely. It is not good for children's mentality. I encourage to make games like puzzle, racing etc..
ReplyDeleteAzure Training | Microsoft Azure Training | Azure Course | Microsoft Azure Course | Azure Training in Chennai | Microsoft Azure Training in Chennai
UX Designer Training | UI Designer Training | UX Designer Training in Chennai | UI Designer Training in Chennai
Your content is very effectively! Thanks to your depth explanation and good job. Keep update on some more details.
ReplyDeletePHP Course in Bangalore
PHP Training Institute in Bangalore
PHP Course in Anna Nagar
PHP Course in Mogappair
PHP Course in Tnagar
PHP Training in Saidapet
PHP Course in Omr
PHP Training in Kandanchavadi
Hello! This is my first visit to your blog! We are a team of volunteers and starting a new initiative in a community in the same niche. Your blog provided us useful information to work on. You have done an outstanding job.
DeleteNo.1 AWS Training in Chennai | Amazon Web Services Training Institute in Chennai
Best AWS Training Institute in Bangalore | Amazon Web Services AWS Training in Bangalore
AWS Online Training | Online AWS Certification Training Course
It's interesting that many of the bloggers to helped clarify a few things for me as well as giving.Most of ideas can be nice content.The people to give them a good shake to get your point and across the command
ReplyDeletebest rpa training in bangalore
rpa training in pune | rpa course in bangalore
RPA training in bangalore
rpa training in chennai
Superb. I really enjoyed very much with this article here. Really it is an amazing article I had ever read. I hope it will help a lot for all. Thank you so much for this amazing posts and please keep update like this excellent article. thank you for sharing such a great blog with us.
ReplyDeletebest rpa training in bangalore
rpa training in pune | rpa course in bangalore
RPA training in bangalore
rpa training in chennai
This comment has been removed by the author.
ReplyDeleteThanks you for sharing this unique useful information content with us. Really awesome work. keep on blogging
ReplyDeleteBest Devops Training in pune
Microsoft azure training in Bangalore
Power bi training in Chennai
This blog is the general information for the feature. You got a good work for these blog.We have a developing our creative content of this mind.Thank you for this blog. This for very interesting and useful.
ReplyDeletepython interview questions and answers
python tutorials
python course institute in electronic city
Thanks for this blog. It is more informative for us...
ReplyDeleteCCNA Course in Coimbatore
CCNA Course in Coimbatore With Placement
CCNA Course in Madurai
Best CCNA Institute in Madurai
Java Training in Bangalore
Python Training in Bangalore
IELTS Coaching in Madurai
IELTS Coaching in Coimbatore
Java Training in Coimbatore
best post thanks for sharing
ReplyDeletesalesforce training in chennai
This is a very informative blog and I just loved to read this. You have put things lucidly and clearly.
ReplyDeleteBest Dental Hospital in Chennai | Best Dental Implant in Chennai | Best Rhinoplasty Surgeon in India | Cosmetic Dentistry | Root Canal Treatment in Chennai
Very Clear Explanation. Thank you to share this
ReplyDeleteCCNA Training Institute Training in Chennai
ReplyDeleteIt’s amazing in support of me to truly have a web site that is valuable meant for my knowledge.
visit our web
ReplyDeleteIt’s amazing in support of me to truly have a web site that is valuable meant for my knowledge.
site...
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.
ReplyDeleteangularjs online training
apache spark online training
informatica mdm online training
devops online training
aws online training
Nice
ReplyDeleteThank you
Corporate Training in Nigeria
Truly a very good article on how to handle the future technology. After reading your post,thanks for taking the time to discuss this, I feel happy about and I love learning more about this topic.
ReplyDelete- Mumbai Web, Crocus Web
Java Training | Java Training Institute | Java Training in Chennai | Java Training Institute in Chennai
ReplyDeletePhp Training | Php Training in Chennai | Php Training Institute in Chennai | Php Training Institute
Best work you have done, this online website is cool with great facts and looks. I have stopped at this blog after viewing the excellent content. I will be back for more qualitative work. Lexis Poker
ReplyDeleteThank you so much for sharing this informative blog with us, this was really amazing and I’m really thankful to you.
ReplyDeleteInvisible Teeth Braces
Dental Implants
Laser Root Canal Treatment
Laser Gum Treatment
Book An Appointment
colier bluetooth card gsm de copiat camera pentru copiat ceas pdf copiat handsfree pentru copiat ceas pentru copiat cu bluetooth de copiat pix bluetooth baterie sony 337 casca copiat raspuns automat
ReplyDeletecasti de copiat
thanks for sharing this information
ReplyDeletetableau training in bangalore
tableau training in bangalore jayanagar
tableau training in bangalore marathahalli
tableau training in bangalore btm
best tableau training institutes in bangalore
tableau classroom training in bangalore
python training in bangalore
best python training institute in bangalore
ReplyDeleteI saw your all post, I truly loved! I want more info relating to this and thanks a lot about this discussing...
Embedded System Course Chennai
Embedded System Courses in Chennai
Excel Training in Chennai
Corporate Training in Chennai
Tableau Training in Chennai
Oracle DBA Training in Chennai
Unix Training in Chennai
Placement Training in Chennai
Embedded Training in Vadapalani
Embedded Training in Porur
ReplyDeleteI sharing All Crak For hacking Seo Trafic with smursh this easy tool and u gona like it :
dewa poker 88
luxury138
bromopoker
panenpoker
ReplyDeleteI sharing All Crak For hacking Seo Trafic with smursh this easy tool and u gona like it :
dewa poker 88
luxury138
bromopoker
panenpoker
Nice article,Thanks for sharing the post
ReplyDeletecorporate training institute in delhi
corporate training institute in noida
Thank you for valuable information.I am privilaged to read this post.aws training in bangalore
ReplyDeletethanks for sharing this informative post.
ReplyDeletems office course in noida
ms office course in delhi
thanks for this post.
ReplyDeleteRevit MEP course in Delhi
Revit MEP course in Noida
very informative post.
ReplyDelete3d max course in Delhi
3d max course in Noida
Congratulations! This is the great things. Thanks to giving the time to share such a nice information.best Mulesoft training in bangalore
ReplyDeletethankyou for posting this.
ReplyDeletems office course in Delhi
ms office course in Noida
very nice post.
ReplyDeletems office course in Delhi
ms office course in Noida
excellent post.
ReplyDeletesolidworks course in Delhi
solidworks course in Noida
excellent post.
ReplyDeletesolidworks course in Delhi
solidworks course in Noida
thanks for posting this.
ReplyDeletems office course in Delhi
ms office course in Noida
It is amazing and wonderful to visit your site.Thanks for sharing this information,this is useful .web designing training in bangalore
ReplyDeletethanks for this post.
ReplyDelete3d max course in Delhi
3d max course in Noida
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.
ReplyDeleteapex course
such an interesting post shared by you
ReplyDeletetally training institute in Noida
tally training institute in delhi
Really i appreciate the effort you made to share the knowledge. The topic here i found was really effective...
ReplyDeleteSoftgen Infotech is the Best Oracle Training institute located in BTM Layout, Bangalore providing quality training with Realtime Trainers and 100% Job Assistance.
Such a great word which you use in your article and article is amazing knowledge. thank you for sharing it.
ReplyDeleteeTechno Soft Solutions offers the industry recognized Job Oriented Training in Bangalore that combines corporate training, online training, and classroom training effectively to fulfill the educational demands of the students worldwide.
Great Blog and very useful, thanks for sharing...!!
ReplyDeleteDental clinic in Chrompet
Best dental clinic in chromepet
Best root canal specialist in chrompet
Dentists in Chrompet
You have made some good points there. I looked on the net for additional information about the issue and found most individuals will go along with your views on this site.
ReplyDeleteTech geek
ReplyDeleteI am inspired with your post writing style & how continuously you describe this topic. After reading your post, thanks for taking the time to discuss this, I feel happy about it and I love learning more about this topic..
aws training bangalore
aws training
Thanks for sharing the post!
ReplyDeleteGame development Company | Game development tools
Thanks for sharing such a great information..Its really nice and informative...
ReplyDeleteoracle erp training online
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. azure training
ReplyDeletePixalive
ReplyDeleteonline Social Media App
Social Media App online
online chat
Play free online games
free online games
online games
Kids Games Online
Free Kids Games
popular social media
most popular social media
best social media sites
best social networking apps
social media web app
ReplyDeleteI am very happy when read this blog post because blog post written in good manner and write on good topic. Thanks for sharing valuable information.
Java training in chennai | Java training in annanagar | Java training in omr | Java training in porur | Java training in tambaram | Java training in velachery
try this
ReplyDeleteB Best Hair Oil
kunkumadi face Oil
Wheat Grass Powder
Balu Herbals
UB-Slim caps
B-Care Dia Powder
Noni
python training in bangalore | python online training
ReplyDeleteAWS training in Bangalore | aws online training
artificial intelligence training in bangalore | artificial intelligence online training
machine learning training in bangalore | machine learning online training
data science training in bangalore | data science online training
Божественно волшебныеи еще удивительно точнейшие интернет гадания для познания нашего ближайшего будущего - это то, что вы увидите на нашем сайте. Правдивое гадание онлайн на отношение мужчины является действенным доступным и простым инструментом для извлечения жизненных информаций из эфирного поля планеты Земля.
ReplyDeleteThank you so much for sharing this informative blog with us, this was really amazing and I’m really thankful to you.
ReplyDeleteAWS training in Chennai
AWS Online Training in Chennai
AWS training in Bangalore
AWS training in Hyderabad
AWS training in Coimbatore
AWS training
ReplyDeleteI am reading your post from the beginning, it was so interesting to read & I feel thanks to you for posting such a good blog, keep updates regularly.I want to share about weblogic administration .
ReplyDeleteI am reading your post from the beginning, it was so interesting to read & I feel thanks to you for posting such a good blog, keep updates regularly. I want to share about weblogic administration .
Предсказание будущего дает предположить, что вас подстерегает в ближайшее время. Любой порывается предугадать свое грядущее и видит определенные типы гадания гораздо больше эффективными. Гадание онлайн на отношения - попытка увидеть будущие события непрерывно манил человека.
ReplyDeletethanks for sharing valuable information
ReplyDeleteКерамогранит fabresa vermont jasmine cream днр получают только лишь из натуральных материалов. Экологически безвредный материал, полностью безопасен для человека. Керамику возможно ложить в залах заведений общепита, в школах и дошкольных учебных заведениях.
ReplyDeleteExcellent blog and I really glad to visit your post. Keep continuing...
ReplyDeleteinternship meaning | internship meaning in tamil | internship work from home | internship certificate format | internship for students | internship letter | Internship completion certificate | internship program | internship certificate online | internship graphic design
Konya
ReplyDeleteKayseri
Malatya
Elazığ
Tokat
TC47K
Antalya
ReplyDeleteKonya
Adana
Ankara
Van
80OUZO
Great Post.Keep up with your writing.
ReplyDeletePython training in Nagpur
Malatya
ReplyDeleteKırıkkale
Aksaray
Bitlis
Manisa
FYRP40
Afyon
ReplyDeleteAntalya
Erzurum
Mersin
izmir
CGM
elazığ
ReplyDeletegümüşhane
kilis
siirt
sakarya
İX7H
https://titandijital.com.tr/
ReplyDeletemersin parça eşya taşıma
osmaniye parça eşya taşıma
kırklareli parça eşya taşıma
tokat parça eşya taşıma
7SY
great post , learn things from your blog thanks for this information. Are you intresting in code developer then checkout python training in satara
ReplyDelete9CE10
ReplyDeleteSakarya Evden Eve Nakliyat
İstanbul Evden Eve Nakliyat
Karabük Lojistik
Bingöl Parça Eşya Taşıma
Afyon Evden Eve Nakliyat
Nice article,it was very interesting to read.
ReplyDeletealso, check Python classes in Pune
D59BA
ReplyDeleteKilis Şehirler Arası Nakliyat
Isparta Şehir İçi Nakliyat
Kütahya Şehir İçi Nakliyat
Adıyaman Şehir İçi Nakliyat
Niğde Parça Eşya Taşıma
Karaman Parça Eşya Taşıma
Mersin Şehir İçi Nakliyat
Erzurum Lojistik
Kırşehir Parça Eşya Taşıma
AF09D
ReplyDeleteKocaeli Parça Eşya Taşıma
Kilis Şehir İçi Nakliyat
Muğla Lojistik
Çerkezköy Çilingir
Ünye Oto Elektrik
Bilecik Lojistik
Hakkari Evden Eve Nakliyat
Manisa Evden Eve Nakliyat
Uşak Parça Eşya Taşıma
E6730
ReplyDeleteMuğla Şehir İçi Nakliyat
Çerkezköy Mutfak Dolabı
Edirne Lojistik
Çerkezköy Asma Tavan
Konya Evden Eve Nakliyat
Erzincan Lojistik
Diyarbakır Lojistik
Ankara Fayans Ustası
Adıyaman Parça Eşya Taşıma
44084
ReplyDeleteEdirne Lojistik
Sinop Evden Eve Nakliyat
Kırşehir Şehirler Arası Nakliyat
Adıyaman Şehirler Arası Nakliyat
Sivas Şehirler Arası Nakliyat
Ünye Petek Temizleme
Sincan Boya Ustası
Ordu Evden Eve Nakliyat
Burdur Şehir İçi Nakliyat
6D52C
ReplyDeleteerzurum canlı sohbet siteleri ücretsiz
en iyi ücretsiz görüntülü sohbet siteleri
ordu görüntülü sohbet ücretsiz
canlı ücretsiz sohbet
en iyi sesli sohbet uygulamaları
Bolu Kadınlarla Ücretsiz Sohbet
sakarya kadınlarla sohbet
ısparta Sesli Sohbet
malatya yabancı canlı sohbet
1835F
ReplyDeleteKars En İyi Görüntülü Sohbet Uygulaması
sohbet uygulamaları
Artvin En İyi Sesli Sohbet Uygulamaları
çanakkale mobil sesli sohbet
Adıyaman Telefonda Kızlarla Sohbet
çanakkale görüntülü sohbet kadınlarla
urfa yabancı canlı sohbet
ığdır Bedava Sohbet
siirt telefonda kızlarla sohbet
9DF8F
ReplyDeletetrabzon parasız sohbet siteleri
yabancı sohbet
rastgele görüntülü sohbet uygulaması
sesli sohbet siteleri
mobil sesli sohbet
kırşehir görüntülü sohbet uygulama
Denizli Sesli Sohbet
kars canlı görüntülü sohbet
çorum parasız görüntülü sohbet uygulamaları
05F55
ReplyDeletedappradar
quickswap
thorchain
phantom wallet
spookyswap
pancakeswap
yearn finance
poocoin
trezor suite
836C7
ReplyDeleteuniswap
dexview
quickswap
dappradar
phantom wallet
shapeshift
spookyswap
satoshivm
pancakeswap
Hi,
ReplyDeleteThank you for sharing this good blog with us. I think this is an informative post and it is very useful and knowledgeable. Therefore, I would like to thank you for your efforts in writing this article. Thanks for sharing the best article post
Here is sharing PTC Windchill Admin related stuff that may be helpful to you.
PTC Windchill Admin Training
fgdgvdfgrtgretgryg
ReplyDeleteشركة مكافحة حشرات
FBGF
ReplyDeleteشركة تسليك مجاري