Taking JavaScript Seriously in Grails (AngularJS and CoffeeScript)

  Whenever I write JavaScript I throw all software craftsmanship discipline out the window. There are no unit tests and very little structure to the code. It's just me and the browser refresh button until we get it right. If you are lucky you may have jQuery to provide a nice CSS selector based api that somewhat shields you from browser quirks. Maybe you even kept your project from devolving to the point where every page is basically its own JavaScript app with no hope of reuse between them. Even then JavaScript is still likely a second class language in your project. Surprisingly, this state of affairs is normal. I want to take my client side scripting just as seriously as any other code in my Grails web app. I want tests, structure, and less boilerplate, and I am going to use AngularJS and CoffeeScript to do that.
  I started with a new Grails 2.1 app and implemented the excellent AngularJS tutorial on top of it. Once I got it working I turned all the JavaScript code into CoffeeScript. Overall these technologies work very nicely together. Of course there were a few tricks I learned along the way and I will point those out. Grails and AngularJS are both MVC web frameworks that make heavy use of dependency injection and have great support for testing. There is some overlap that I will discuss later, but for the most part Grails stays on the server side and AngularJS stays on the client side. AngularJS actually feels like a more Grailsy way to handle the view layer than what Grails provides out of the box.

Grails
  The Grails side of this is pretty standard. I've used the handy resources plugin to manage my client side static resources like images, js, and css files. It allows you to define dependencies between these resources and then bring the required ones into a page just by specifying the top level of the hierarchy. There is a Grails Controller (shown below) with two kinds of actions. There are pass through actions (list and show) that defer to AngularJS, and end points for restful calls (query). PhoneService is a Grails service that handles the actual data. In a real application it would be backed by a proper data store, but here I hardcoded the actual JSON from the AngularJS tutorial.

AngularJS
  Though there is an AngularJS plugin for Grails, I didn't see any reason to use it. The Grails resources plugin makes using AngularJS so simple, and I like having direct control over which version of AngularJS I use and where the files are put.
  Much like Grails, AngularJS has its own set of controllers (for page manipulation), services (for general purpose tasks), and dependency injection to tie everything together. The DI feels a lot like Groovy with the way that injection takes place by name automatically. If you look deeper it starts to look a lot like Guice. Below are the Angular controllers used in this application to get JSON data and binding it to the page via $scope.

CoffeeScript
  There is much more to say about AngularJS, but before I do I'd like to mention that the AngularJS code that I am showing has been converted to CoffeeScript. I find CoffeeScript to be much more pleasant to use that JavaScript (and more Groovy like). The conversion was relatively straight forward, but there were a few gotchas around scoping of variables due to CoffeeScript's lexical scopes and implicit function safety wrapper. As you can see in the above example it is necessary to prefix controllers with an @ to elevate their scope. Also my AngularJS service test shown below uses a 'setup' variable to give the tests access to objects created in the 'beforeEach' section.
  I used the Grails CoffeScript plugin for this, but it was an older version that I found useful. There is a handy way that one can configure arbitrary CoffeeScript files to be converted to JavaScript. I liked this approach because I was content to let the same mechanism convert my CoffeeScript tests that is converting the rest of my CoffeeScript code. The newer version of the plugin doesn't seem capable of this. Being new to CoffeeScript, I also appreciated seeing the generated JavaScript.

Grails and AngularJS Together
  There are limitless ways that you could combine Grails and AngularJS. By posting this I hope to gain some new insights. I favor Grails quite a bit here just because I am more comfortable with Groovy. Think of this example as a Grails app which delegates to an AngularJS sidecar specializing in putting the final touches on the view layer.

Grails vs AngularJS responsibilities
GrailsAngularJS
URL mapping for full page transitionsclient side data binding and dom manipulation (single page changes)
provides RESTful servicesmakes the AJAX calls
application concerns (overall file layout, server and client side dependencies, building and packaging, control center for all commands)JavaScript organization and separation of concerns
server side DI with Springclient side AngularJS DI
server side unit, integration and overall functional tests with SpockJavaScript unit testing with Jasmine

  Rather than use AngularJS routing, I let Grails handle it (mostly because I am more familiar with Grails). You can see in PhoneController above that the pass through actions act very much like AngularJS routes. They map a url to a template (by Grails convention) and an AngularJS controller (by passing an explicit value to the template). In this case the template is a Grails .gsp.
  Grails and AngularJS share the templates which in this case are .gsp files. There are two passes to transform these files now. First Grails compiles the .gsp on the server and applies tag libraries, then AngularJS applies it's bindings and directives on the client. This is where AngularJS shines and I let it do most of the work. One thing to remember is that since Grails encodes the output of tag libraries, you can't use the AngularJS binding inside them. For example...

  Getting Grails and AngularJS to communicate effectively is simple once you realize that Grails params and AngularJS $scope are both the state that the respective controllers care about. So I found a way to stamp the Grails controller's params onto the AngularJS controller's $scope using ng-init. The main.gsp is a layout that I apply to all my Grails .gsp files. It is basically a place to put common elements that will appear on every page. You can see how I am taking this opportunity to always set the ng-controller (which was specified by name in the Grails controller) and pass the Grails params into it with ng-init.

  AngularJS provides resources for making rest calls. This is a great way to communicate with the Grails backend. To remove a lot of boilerplate code I created a service that constructs resources based on Grails URL conventions. You can see in the AngularJS controllers above where I make use of the service named 'Grails' to get phone data. The code for this service is below. It simply substitutes Grails controller, action and id values for their placeholder in the url. It will default to values found in $scope (which were copied from the Grails params if you remember).

Unit Tests
  Grails itself offers great support for writing tests, especially with the 2.0+ enhancements that allow better Spock integration. I must say that testing my code with Spock is bliss with its concise syntax, built in mocking, and intuitive assertions.
  The thing about AngularJS that really got my attention is the promise that I can be in a similarly happy place when writing JavaScript tests. And it delivers! This is no doubt because there are test gurus behind AngularJS. Jasmine allows my unit tests to have a familiar structure coming from Spock. The DI that is core to AngularJS allows me to isolate my logic and mock what I need to. The tests are run by js-test-driver which needs to connect to a browser. Your web app doesn't have to be running, js-test-driver just uses the browser as an engine to execute the javascript (and you can execute in multiple browsers in parallel). There is an IntelliJ plugin for js-test-driver that lets me run my tests as if they are JUnit. There is even JUnit output that I can use in Jenkins. And surprisingly code coverage for JavaScript (but I lost this when I converted to CoffeeScript). It was trivial to create a unit test for my AngularJS service described above that makes rest calls to Grails. I merely instantiate the service, mock the backend, and assert that the right calls would be made based on the scope and overrides.

Functional Tests
  Functional tests run against your app externally, usually through some type of browser automation. AngularJS provides end-to-end testing to accomplish this. These tests are described with Jasmine just like AngularJS unit tests. They are executed in the browser and are blazingly fast. AngularJS e2e tests are awesome, but I used a Grails based solution instead.
   Geb is a Groovy way to automate a browser and it works well with Spock to write Grails functional tests. It's basically a Groovy DSL on top of Selenium/WebDriver. Even though it is not as fast as AngularJS e2e tests, I am more familiar with these tools and I like the page object pattern that Geb uses to separate browser automation in the test from the specific markup of the page.


Above you can see the definition of a page. Most of the CSS selectors that address page elements can go here. Aside from avoiding repetition of these selectors, it makes the tests less brittle. When there are changes to the markup you just make a corresponding change to your page definition and all your tests still pass. There's no need to change the test itself unless the behavior of your test conceptually changes.
  Below you can see the related test. The setup method navigates to the specific page and the tests use the page object definitions to manipulate and make assertions about the page. Note how I am able to pass 'phoneThumb' an index so that I can click arbitrary thumbnail images. I think this makes for very readable and robust tests. Converting the AngularJS e2e tests from the tutorial to Geb was very intuitive.


  Running the Geb tests was not so straight forward. There is a Geb plugin for Grails that does some basic setup of Geb inside of Grails, and there is tighter integration to be had by following this tip from the Geb author. The plugin allows you to run the tests from the Grails command line, but I had to resort to a bit of a hack to run the tests from my IDE. Basically I needed a way to configure Geb outside of the Grails app.
  Speaking of Geb configuration, I have a few observations about my choice of driver. I tried HtmlUnitDriver, FirefoxDriver and ChromeDriver. HtmlUnitDriver just didn't work for my tests. FirefoxDriver worked out of the box, but was slow. ChromeDriver was fast (much closer to AngularJS e2e speeds) but there is a minimal amount of setup to be done on your machine first.

Benefits
  AngularJS brings a lot of the same good things to my client code that Grails brings to my server side code (structure, DI, tests). CoffeeScript makes my client code look and feel more like Groovy (less boilerplate, many common idioms). Overall my client side scripting is now a first class citizen and sits right beside the rest of my code (literally and figuratively).

Code
  All the code is on Gtihub. Feel free to use this as a starting point and send pull requests when you figure out improvements.

Todo

  • Run in jenkins build on headless server and capture test failures (bonus points for code coverage)
  • Use Testacular rather than js-test-driver to run unit tests.
  • Replace CSS and HTML with Less and Jade respectively.
  • Full CRUD with RESTful Grails endpoints.

363 comments:

  1. Nice post!

    My only doubt is the mixing gsp with Angular templating - a bit of meta-programming In Angular scaffolding plugin Rod Fletcher separated pure html Angular templates, what do you think of that? On the other side - in your model eg. Spring Security tags can be used...

    ReplyDelete
  2. Same feedback as pjagielski on the mixing of template solutions. I went with Angular routing and reduced Grails to only talking JSON - complete separation of concerns.

    ReplyDelete
  3. same comment, for html5-mobile-scaffolding plugin, i'm planning to integrate Angular, but no GSP.

    ReplyDelete
  4. Genius post! Very insightful and well paced. Thanks!

    ReplyDelete
  5. Clay,

    Thanks for the post. It will be awesome if you can add some action to post content to Grails from AngularJS. I am also wondering, how is security handled? In case we use spring security for our grails app.

    ReplyDelete
  6. Its really good to know about that, some facts and other points given here are quite considerable and to the point as well also the complete procedure given is also of most importance, would be better to knew about more of them.

    Hvac Service Management Software

    ReplyDelete
  7. Nice article. I feel CoffeeScript is the language du jour for client MVC.

    I think most devs can relate to the 'throwing all standards out the window' with Javascript, but a framework doesn't fix that problem for you - all your JavaScript should be unit testable and cleanly separated regardless. Angular just provides some conventions to teach this to people.

    ReplyDelete
  8. hi Clay thank's for this article,
    I'm currently writing https://github.com/ranska/rang https://github.com/ranska/aether who is a little lib focus on coffee script class layer for angular. I try to find people who can tell me if there is thing's they like, want to be add or remove from it.
    Could you please give me your point of view on it.

    ReplyDelete
  9. I am extremely impressed with your writing skills and also with the layout on your blog
    Angularjs Training In Hyderabad

    ReplyDelete
  10. This is the best way to upgrade our skill set thankyou.....
    Angularjs online Training

    ReplyDelete
  11. This technical post helps me to improve my skills set, thanks for this wonder article I expect your upcoming blog, so keep sharing...
    Regards,
    Angularjs training in chennai|Node JS training|Angularjs training center in Chennai

    ReplyDelete
  12. Great work.Angular supports event driven programming. Angular makes web browser smarter. It decouples DOM manipulation from application logic. This improves the testability of the code.

    AngularJS Training
    AngularJS Training in Chennai
    AngularJS Course in Chennai
    AngularJS Course
    Online AngularJs Training

    ReplyDelete
  13. There are tutorials that is specially designed to help you learn AngularJS as quickly and efficiently as possible.
    AngularJS

    ReplyDelete
  14. Angularjs is a structural framework for developing the dynamic web applications. Angular's data binding and dependecy injection is capable of eliminating much of the code.
    angularjs training in chennai |
    angularjs training chennai

    ReplyDelete

  15. Nodejs is an open source and cross platform environment for developing the server side web application. The main advantage of using nodejs is because of its fastness, single threaded and highly scalable.
    Node JS training in chennai | Node JS training institute in chennai

    ReplyDelete
  16. This comment has been removed by the author.

    ReplyDelete
  17. This comment has been removed by the author.

    ReplyDelete
  18. Jayati Tools Private Limited is a trusted company which is Manufacturer and Supplier of scaffolding tools all over the world. We are manufactur the Scaffolding Accessories, Scaffolding tools, scaffolding socket, Tuff Scaffolding Machine and all types of Scaffolding equipments, System Scaffmarking machine. http://www.scaffoldingmachines.com/

    ReplyDelete
  19. Thanks a lot for sharing this amazing knowledge with us. This site is fantastic. I always find great knowledge from it.
    Hire Angular JS Developer

    ReplyDelete
  20. This comment has been removed by the author.

    ReplyDelete
  21. Thanks for sharing this valuable information to our vision. You have posted a trustworthy blog keep sharing.Nice article I was really impressed by seeing this article

    Asp .net Training In Bangalore

    ReplyDelete
  22. Webtrackker technology is the best IT training institute in NCR. Webtrackker provide training on all latest technology such as AngularJS training. Webtrackker is not only training institute but also it also provide best IT solution to his client. Webtrackker provide training by experienced and working in the industry on same technology.Webtrackker Technology C-67 Sector-63 Noida 8802820025

    AngularJS Training Institute In indirapuram


    AngularJS Training Institute In Noida


    AngularJS Training Institute In Ghaziabad


    AngularJS Training Institute In Vaishali


    AngularJS Training Institute In Vasundhara


    AngularJS Training Institute In Delhi South Ex

    ReplyDelete
  23. AngularJS is a toolset for building the framework most suited to your application development. It is fully extensible and works well with other libraries. Every feature can be modified or replaced to suit your unique development workflow and feature needs. Read on to find out how.

    AngularJS Training in Chennai
    AngularJS Training Institute in Chennai

    AngularJS Certification Training in Chennai

    AngularJS Corporate Training
    AngularJS Online Training

    ReplyDelete
  24. Very Nice Post really expalined good information and Please keep updating us..... Thanks

    ReplyDelete

  25. Very Nice Post really expalined good information and Please keep updating us..... Thanks

    ReplyDelete
  26. Absolutely. Thank you so much. I read your blog completely. This is very nice and beautiful. you should put some crispy information.


    Angularjs Online Training

    ReplyDelete


  27. I Visited lot of blogs and Web sites But in this AngularJS Blog Information is Very usefulthanks for sharing it........

    ReplyDelete
  28. very nice blogs!!! i have to learning for lot of information for this sites...Sharing for wonderful information about the web design and web development.Thanks for sharing this valuable information to our vision. You have posted a trust worthy blog keep sharing.
    Hire Angularjs Developer

    ReplyDelete
  29. Hello
    It's very nice blog thanks for sharing info about AngularJS Training
    Just keep on sharing

    ReplyDelete
  30. Hello, Clay Nice explanation about the javascript I like your explanation about the set of activities and formation of different entities. As I have done my PMP Training in Chennai I like to go for AngularJS also which will help me in my career point of view It not only gives me the ability to handle the project but makes my knowledge grow in all the factors.

    ReplyDelete
  31. Hi thanks for the angular.js training. I always found your blog interesting and useful.

    ReplyDelete

  32. It is natural to make mistake while developing your application as a developer. Keep updating more knowledge on Software testing. Selenium is the best automation testing tool to test any application.

    Selenium Training in chennai |
    Selenium Courses in Chennai

    ReplyDelete
  33. It's very nice blog. I'm so happy to gain some knowledge from here. Thank you for valuable
    information on AngularJS Training in
    Chennai
    .
    Hoping to get more info...

    ReplyDelete
  34. Very nice post here and thanks for it .I always like and such a super contents of these post. Also great blog about Angularjs with all of the valuable information you have. Well done,its a great knowledge.

    Angularjs Training in Chennai
    Angularjs Online Training in Chennai
    Best Angularjs Training in Chennai

    ReplyDelete
  35. The blog you wrote is the sign of a good writer. I am highly impressed with this blog, due to which the good information here seems very beneficial to me.You are a very good writer and I am excited to read your new blog..https://goo.gl/LkRozB

    ReplyDelete
  36. Nice explanation in this posts with code details..
    btelinks

    Police Result

    ReplyDelete
  37. Appreciate your work, very informative blog on Angular JS. I just wanted to share information about Angular JS Training. Hope it helps community here.

    ReplyDelete
  38. I really impressed for your blog Thanks for sharing informative content on Angularjs Online Training

    ReplyDelete
  39. Great post! I am actually getting ready to across this information, It's very helpful for this blog.Also great with all of the valuable information you have Keep up the good work you are doing well.
    hire angularjs developer

    ReplyDelete
  40. The blog was absolutely fantastic! Lot of great information which can be helpful in some or the other way. Keep updating the blog, looking forward for more contents...Great job, keep it up..
    Hire angularjs developers

    ReplyDelete
  41. Nice explanation in this posts with code details..Angularjs Online Training

    ReplyDelete
  42. Australia Best Tutor is one of the best Online Assignment Help providers at an affordable price. Here All Learners or Students are getting best quality assignment help with reference and styles formatting.

    Visit us for more Information

    Australia Best Tutor
    Sydney, NSW, Australia
    Call @ +61-730-407-305
    Live Chat @ https://www.australiabesttutor.com




    Our Services

    Online assignment help Australia
    my assignment help Australia
    assignment help
    help with assignment
    Online instant assignment help
    Online Assignment help Services

    ReplyDelete
  43. Thanks for sharing the important program for Angular JS Training

    ReplyDelete
  44. Amazing article! I was confused about AngularJS Training in Chennai, but now got a clear view of the definition. Appreciate your hard work!

    ReplyDelete

  45. Thanks, Learned a lot of new things from your post! Good creation and HATS OFF to the creativity of your mind.
    Very interesting and useful blog!
    javascript Training in Gurgaon


    ReplyDelete
  46. Incredible post! I am really preparing to over this data, It's exceptionally useful for this blog.Also awesome with the greater part of the profitable data you have Keep up the great work you are doing admirably
    Education | English Labs | MBA Talks | Technology

    ReplyDelete
  47. It's A Great Pleasure reading your Article Bala Guntipalli Thanks for posting.

    ReplyDelete
  48. I think the content covered in the blog is quite impressive and brilliantly conveyed. Good job and great efforts. Keep it up.
    Angularjs developer

    ReplyDelete
  49. Thanks for sharing this Informative content. Well explained.
    JavaScript Training in Delhi

    ReplyDelete
  50. Great efforts put it to find the list of articles. thanks for taking the time to discuss this, I feel happy about it and I love learning more about this topic.
    Angular JS Training in Chennai | Angular JS Training in Velachery

    ReplyDelete
  51. Thanks for sharing most valuable information with us.
    Node JS Online Training

    ReplyDelete
  52. Blogger Hope Vignesh said...
    Very nice post here and thanks for it .I always like and such a super contents of these post. Also great blog about Angularjs with all of the valuable information you have. Well done,its a great knowledge.


    Angular 6 Training in Chennai | Blue Prism Training in Chennai

    ReplyDelete
  53. Nice post. It is very informative. Thanks for sharing and keep updating...
    Angular js online training

    ReplyDelete
  54. Excellent website. Lots of useful information here, thanks in your effort! . For more information please visit


    AngularJS Online Training

    AngularJS Online Training Hyderabad

    AngularJS Online Course

    AngularJS Online course Hyderabad

    ReplyDelete
  55. Excellent article. Very interesting to read. I really love to read such a nice article.
    AngularJS5 Online Training Bangalore

    ReplyDelete
  56. Each department of CAD have specific programmes which, while completed could provide you with a recognisable qualification that could assist you get a job in anything design enterprise which you would really like.

    AutoCAD training in Noida

    AutoCAD training institute in Noida


    Best AutoCAD training institute in Noida

    ReplyDelete
  57. It is nice blog Thank you provide important information and I am searching for the same information to save my time AngularJS Online Course Hyderabad

    ReplyDelete
  58. The blog you presented was very nice and interesting which helped me to get update on the recent technologies.
    angularjs training in chennai

    devops training in chennai

    ReplyDelete
  59. This blog is really awesome Thanks for sharing the most valuable information with us.
    MEAN Stack Training in Hyderabad

    ReplyDelete
  60. 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.

    Data Science with Python training in chenni
    Data Science training in chennai
    Data science training in velachery
    Data science training in tambaram
    Data Science training in OMR
    Data Science training in anna nagar
    Data Science training in chennai
    Data science training in Bangalore

    ReplyDelete
  61. Wow it is really wonderful and awesome thus it is very much useful for me to understand many concepts and helped me a lot. it is really explainable very well and i got more information from your blog.


    rpa training in Chennai | rpa training in velachery

    rpa training in tambaram | rpa training in sholinganallur

    rpa training in Chennai | rpa training in pune

    rpa online training | rpa training in bangalore

    ReplyDelete
  62. Your blog is very useful for me, Thanks for your sharing.

    ReplyDelete
  63. 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.
    Devops Training in pune|Devops training in tambaram|Devops training in velachery|Devops training in annanagar
    DevOps online Training

    ReplyDelete
  64. Thank you. Well it was the nice to post and very helpful information on
    AngularJS Online Course

    ReplyDelete
  65. 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 | rpa training in pune

    rpa training in tambaram | rpa training in sholinganallur

    rpa training in Chennai | rpa training in velachery

    rpa online training | rpa training in bangalore

    ReplyDelete
  66. It was really a nice post and I was really impressed by reading this
    AngularJS Online Course Hyderabad

    ReplyDelete
  67. This is a 2 good post. This post gives truly quality information.



    ReplyDelete
  68. Excellant post!!!. The strategy you have posted on this technology helped me to get into the next level and had lot of information in it.
    python training in annanagar
    python training in chennai
    python training in chennai
    python training in Bangalore

    ReplyDelete
  69. interesting blog, here a lot of valuable information is available, it is very useful information. we offer this DevOps online training at low caste and with real-time trainers. please visit our site for more details Devops training

    ReplyDelete
  70. Interesting blog, here a lot of valuable information is available, it is very useful information. we offer this Java classroom and online training at low caste and with real-time trainers. please visit our site for more details Java training

    ReplyDelete
  71. Very helpful blog!!! Thank you for providing information...

    Java training institute in Pune

    ReplyDelete
  72. Thanks a lot very much for the high quality and results-oriented help. I won’t think twice to
    endorse your blog post to anybody who wants and needs support about this area. We are providing AngularJS training in Velachery.

    For more details: AngularJs training in velachery

    ReplyDelete
  73. This post is much helpful for us. This is really very massive value to all the readers and it will be the only reason for the post to get popular with great authority.
    Angularjs Training in Chennai
    Angularjs Training Chennai
    Angularjs courses in Chennai
    Angular Training in Chennai
    Best Angularjs training in chennai
    Angular 6 training in Chennai

    ReplyDelete
  74. Marvelous and fascinating article. Incredible things you've generally imparted to us. Much obliged. Simply keep making this kind out of the post.

    angularjs training in chennai

    ReplyDelete
  75. Hi, nice blog, I found this post very interesting and worth reading. Keep up the good work.. thanks for sharing!!
    DevOps Online Training

    ReplyDelete
  76. Excellent tutorial buddy. Directly I saw your blog and way of teaching was perfect, Waiting for your next tutorial.
    rpa training in chennai | rpa training in velachery | rpa training in chennai omr

    ReplyDelete
  77. This blog really very help full for all developers and students thank you for writing this blog and now Angularjs training development language more job opportunities available all development company's thank once.

    Angularjs training in chennai | Angularjs training in velachery

    ReplyDelete
  78. It's really a nice experience to read your post. Thank you for sharing this useful information. If you are looking for more about R Programming institutes in Chennai | R Programming Training in Chennai

    ReplyDelete
  79. Whatever we gathered information from the blogs, we should implement that in practically then only we can understand that exact thing clearly, but it’s no need to do it, because you have explained the concepts very well. It was crystal clear, keep sharing..
    RPA Training in Chennai
    Selenium Training in Chennai Robotic Process Automation Courses
    learn Robotic Process Automation
    Best selenium training in chennai
    Best selenium Training Institute in Chennai

    ReplyDelete
  80. Really great work. Your article was very helpful.Thanks for sharing valuable points.Keep sharing.Thank You
    rpa training in chennai | rpa training in velachery | trending technologies list 2018


    ReplyDelete

  81. I think things like this are really interesting. I absolutely love to find unique places like this. It really looks super creepy though!!big data training in Velachery | Hadoop Training in Chennai | big data Hadoop training and certification in Chennai | Big data course fees

    ReplyDelete
  82. Needed to compose you a very little word to thank you yet again regarding the nice suggestions you’ve contributed here. we are providing AngularJs training in velachery.
    for more details: AngularJs training in velachery

    ReplyDelete
  83. Thanks for sharing this post.Keep sharing more like this.

    Education
    Technology

    ReplyDelete
  84. I am obliged to you for sharing this piece of information here and updating us with your resourceful guidance. Hope this might benefit many learners. Keep sharing this gainful articles and continue updating us.
    RPA Training in Chennai
    Robotics Process Automation Training in Chennai
    Robotic Process Automation Courses
    learn Robotic Process Automation
    RPA Training Course

    ReplyDelete
  85. I am really enjoying reading your well written articles.
    It looks like you spend a lot of effort and time on your blog.
    I have bookmarked it and I am looking forward to reading new articles. Keep up the good work..
    Java Certification Course in Bangalore
    Best Java Classes in Bangalore
    Best Java Training Center in Bangalore
    Best Java Coaching Centers in Bangalore
    Java Coaching Classes in Bangalore

    ReplyDelete
  86. Your blog is so inspiring for the young generations.thanks for sharing your information with us and please update more new ideas.
    Selenium Training in Ashok Nagar
    Selenium Training in Nungambakkam
    Selenium Training in Navalur
    Selenium Training in Karapakkam

    ReplyDelete
  87. Hey Nice Blog!! Thanks For Sharing!!!Wonderful blog & good post.Its really helpful for me, waiting for a more new post. Keep Blogging!
    Android training in coimbatore
    Angular training in coimbatore

    ReplyDelete
  88. Nice Article,Great experience for me by reading this info.
    thanks for sharing the information with us.keep updating your ideas.
    Android Training Institutes in OMR
    Android Training in Guindy
    Android Training in Ambattur
    android app development classes in bangalore

    ReplyDelete
  89. This article is very much helpful and i hope this will be an useful information for the needed one.Keep on updating these kinds of informative things...


    Embedded System training in Chennai | Embedded system training institute in chennai | PLC Training institute in chennai | IEEE final year projects in chennai | VLSI training institute in chennai

    ReplyDelete
  90. Goyal packers and movers in Panchkula is highly known for their professional and genuine packing and moving services. We are top leading and certified relocation services providers in Chandigarh deals all over India. To get more information, call us.

    Packers and movers in Chandigarh
    Packers and movers in Panchkula
    Packers and movers in Mohali
    Packers and movers in Panchkula
    Packers and movers in Chandigarh

    ReplyDelete
  91. Wonderful post. Thanks for taking time to share this information with us.

    bluecross
    Guest posting sites

    ReplyDelete
  92. This comment has been removed by the author.

    ReplyDelete
  93. Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic.
    Java training in Chennai

    Java training in Bangalore

    ReplyDelete
  94. Thanks for sharing the useful blog post about Grails, your Web App. It is interesting and nicely explained.

    Custom Web Application Development Company in Coimbatore

    ReplyDelete
  95. Thank u for this information
    http://www.mistltd.com

    ReplyDelete
  96. Thanks for sharing content and such nice information for me. I hope you will share some more content about. angularjs and coffeescript Please keeps sharing!

    AngularJs

    ReplyDelete
  97. i'm Here to Get Great Info, Thanks For Sharing
    DevOps Training
    DevOps Training in Ameerpet
    DevOps Training institute in Hyderabad
    https://www.visualpath.in/devops-online-training contact Us: 9704455959

    ReplyDelete
  98. This is best one article so far I have read online, I would like to appreciate you for making it very simple and easy
    Regards,
    Data Science Certification Course

    ReplyDelete
  99. Worthful Angular js tutorial. Appreciate a lot for taking up the pain to write such a quality content on Angularjs tutorial. Just now I watched this similar Html tutorial and I think this will enhance the knowledge of other visitors for sureAngular Js online training

    ReplyDelete
  100. This comment has been removed by the author.

    ReplyDelete
  101. Thanks for such a great article here. I was searching for something like this for quite a long time and at last, I’ve found it on your blog. It was definitely interesting for me to read about their market situation nowadays.Best RPA training in Chennai | Best Blue prism Training Institute in Chennai

    ReplyDelete
  102. Its a wonderful post and very helpful, thanks for all this information. You are including better information.
    Javascript Training in Noida
    Javascript Course in Noida
    Javascript Training institute in Noida

    ReplyDelete
  103. Excellent blog I visit this blog it's really awesome. Blog content written clearly and understandable. The content of information is very informative
    lg mobile service center in velachery
    lg mobile service center in porur
    lg mobile service center in vadapalani

    ReplyDelete
  104. Really Good blog post provided helpful information. I hope that you will post more updates like this...
    Core PHP Training Institute in Noida
    Dot Net Training Institute in Noida

    ReplyDelete
  105. This is the exact information I am been searching for, Thanks for sharing the required infos with the clear update and required points. To appreciate this I like to share some useful information regarding Microsoft Azure which is latest and newest,

    Regards,
    Ramya

    Azure Training in Chennai
    Azure Training Center in Chennai
    Best Azure Training in Chennai
    Azure Devops Training in Chenna
    Azure Training Institute in Chennai
    Azure Training in Chennai OMR
    Azure Training in Chennai Velachery
    Azure Online Training
    Azure Training in Chennai Credo Systemz

    ReplyDelete
  106. I found this informative and interesting blog so i think so its very useful and knowledge able.I would like to thank you for the efforts you have made in writing this article.
    Microsoft Azure online training
    Selenium online training
    Java online training
    uipath online training
    Python online training


    ReplyDelete
  107. You are doing a great job. I would like to appreciate your work for good accuracy
    Regards,
    PHP Training in Chennai | PHP Course in Chennai | Best PHP Training Institute in Chennai

    ReplyDelete
  108. Amazing! I like to share it with all my friends and hope they will like this information.
    Regards,
    Python Training in Chennai | Python Programming Classes | Python Classes in Chennai

    ReplyDelete
  109. Excellent blog I visit this blog it's really awesome. The important thing is that in this blog content written clearly and understandable. The content of information is very informative.
    Oracle Fusion Financials Online Training
    Oracle Fusion HCM Online Training
    Oracle Fusion SCM Online Training
    oracle Fusion Technical online training

    ReplyDelete
  110. Great Post,really it was very helpful for us.
    Thanks a lot for sharing!
    I found this blog to be very useful!!
    Web Design and Development training in Bangalore

    ReplyDelete
  111. Nice post. I learned some new information. Thanks for sharing.

    Article submission sites
    Education

    ReplyDelete
  112. Really It is very useful information for us. thanks for sharing.
    DevOps Training In Hyderabad

    ReplyDelete
  113. Thanks for sharing.
    very useful information, the post shared was very nice.
    Full Stack Online Training

    ReplyDelete
  114. Thanks for posting this very useful info
    Unic Sol is the best Best java training in hyderabad with job placements. Along with java training full stack, mean stack, angular & testing tools training is provided by industry experts. We are the best java training in Hyderabad.

    ReplyDelete
  115. Thanks for posting this
    Unic Sol is the best Best java training in hyderabad with job placements. Along with java training full stack, mean stack, angular & testing tools training is provided by industry experts. We are the best java training in Hyderabad.

    ReplyDelete