Thursday, November 15, 2012

Meta-Annotations


Meta-Annotations

Meta-Annotations are an experiment in annotation inheritance, abstraction and encapsulation with a Java SE mindset
A meta-annotation is any annotation class annotated with @Metatype. The other annotations used on the meta-annotation become part of its definition. If any of those annotations happen to also be meta-annotations, they are unrolled as well and their annotations become part of the definition.

@Metatype

The recursion that is the meta-annotation concept only happens when an annotation is marked as a @javax.annotation.Metatype.
When @Metatype is seen the basic contract is "carry the surrounding annotations forward". When a class, method or other target uses an annotation annotated with @Metatype the annotations on that annotation are "unrolled" or carried forward and effectively placed on that class, method or other target as if they were explicitly declared.
If any of the annotations that are carried forward also are annotated with @Metatype the recursion continues. The result is a simple algorithm or design pattern that provides inheritance or reuse in a way that is not specific to any domain, API, or specification.
APIs and specifications can choose to formally adopt annotation reuse in this fashion, but the core concept and implementations of@Metatype do not need to be expanded to support these APIs or specifications.
The simple elegance of this not being domain specific is that it could be used to combine several annotations from different specifications into one reusable annotation. Say JAX-RS @PathParam("id") with Bean Validation @NotNull to create a new annotation called @ValidId.

Creating Meta-Annotations

If the annotation in question can be applied to ElementType.ANNOTATION_TYPE or ElementType.TYPE, creating a meta-annotation version of it is quite easy.
@TransactionManagement(TransactionManagementType.CONTAINER)
@Metatype
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ContainerManagedTransactions {
}
When the annotation in question cannot be applied to ElementType.ANNOTATION_TYPE or ElementType.TYPE, things get interesting. This is where meta-annotations depart from things like @Stereotype. The goal of meta-annotations is to be completely generic and not specific to any one domain or API. A such, you cannot really require all existing APIs change to allow for meta-annotations. The goal is that meta-annotations can be used generically and do not need to be "designed" into an API.
To allow annotations that apply to FIELDMETHODPARAMETERCONSTRUCTORLOCAL_VARIABLE, or PACKAGE, as well as any other location where annotations may be applied in the future a compromise is made.
import javax.ejb.Schedule;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Metatype
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)

public @interface Daily {
    public static class $ {

        @Daily
        @Schedule(second = "0", minute = "0", hour = "0", month = "*", dayOfWeek = "*", year = "*")
        public void method() {
        }
    }
}
An inner class named $. This is enough to bind together the @Daily and @Schedule in the context to which they both apply.
Ugly but effective. Alternate proposals welcome.
The above is considered the public API portion of the meta-annotation concept.
The concept itself is born out of standards based systems like EJB and CDI where annotation processing is invisible to the application itself. In those settings the above is enough and no additional APIs would be needed to support meta-annotations in standard APIs.

Under the covers

The "guts" of this particular implementation is designed to look and feel as much like the reflection API as possible. Obviously, with VM level control, you could do much better. A clean Java SE API might be just what is needed and its very possible that meta-annotations should really be a Java SE concept.
Here's a glimpse as to how things can look under the covers:
final java.lang.reflect.AnnotatedElement annotated = new org.metatype.MetaAnnotatedClass(Triangle.class);
assertNotNull(annotated);

assertTrue(annotated.isAnnotationPresent(Color.class));
assertTrue(annotated.getAnnotation(Color.class) != null);
assertTrue(!contains(Color.class, annotated.getDeclaredAnnotations()));
assertTrue(contains(Color.class, annotated.getAnnotations()));
assertEquals("red", annotated.getAnnotation(Color.class).value());

assertTrue(annotated.isAnnotationPresent(Red.class));
assertTrue(annotated.getAnnotation(Red.class) != null);
assertTrue(!contains(Red.class, annotated.getDeclaredAnnotations()));
assertTrue(contains(Red.class, annotated.getAnnotations()));

assertTrue(annotated.isAnnotationPresent(Crimson.class));
assertTrue(annotated.getAnnotation(Crimson.class) != null);
assertTrue(contains(Crimson.class, annotated.getDeclaredAnnotations()));
assertTrue(contains(Crimson.class, annotated.getAnnotations()));
The application classes would look like so:
@Crimson
// -> @Red -> @Color
public static class Triangle {

}

@Metatype
@Color("red")
// one level deep
@Target(value = {TYPE})
@Retention(value = RUNTIME)
public static @interface Red {
}

@Metatype
@Red
// two levels deep
@Target(value = {TYPE})
@Retention(value = RUNTIME)
public static @interface Crimson {
}

Best Practices
It is recommended to have an api package or some other package where "approved' annotations are defined and to prohibit usage of the non-meta versions of those annotations. All the real configuration will then be centralized in the api package and changes to the values of those annotations will be localized to that package and automatically be reflected throughout the application.
An interesting side-effect of this approach is that if the api package where the meta-annotation definitions exist is kept in a separate jar as well, then one can effectively change the configuration of an entire application by simply replacing the api jar.

Future concepts

XML Overriding

The unrolling of meta-annotations happens under the covers. In that same vein, so could the concept of overriding.
The above @Red annotation might theoretically be overridden via xml as follows:

<org.superbiz.api.Red>
  <org.superbiz.api.Color value="dark red"/>
</org.superbiz.api.Red>
Or take more complex meta-annotation definition like the following:
package org.superbiz.corn.meta.api;

import javax.ejb.Schedule;
import javax.ejb.Schedules;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Metatype
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)

public @interface PlantingTime {
    public static interface $ {

        @PlantingTime
        @Schedules({
                @Schedule(month = "5", dayOfMonth = "20-Last", minute = "0", hour = "8"),
                @Schedule(month = "6", dayOfMonth = "1-10", minute = "0", hour = "8")
        })
        public void method();
    }
}
This might theoretically be overridden as:

<org.superbiz.corn.meta.api.PlantingTime>
  <javax.ejb.Schedules>
    <value>
      <javax.ejb.Schedule month="5" dayOfMonth="15-Last" minute="30" hour="5"/>
      <javax.ejb.Schedule month="6" dayOfMonth="1-15" minute="30" hour="5"/>
    </value>
  </javax.ejb.Schedules>
</org.superbiz.corn.meta.api.PlantingTime>

Merging or Aggregating definitions
Certain annotations take lists and are designed to be multiples. In the current definition of meta-annotations, the following is illegal.
@RolesAllowed({"Administrator", "SuperUser"})
@Metatype
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Admins {
}

@RolesAllowed({"Employee", "User"})
@Metatype
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Users {
}


public static class MyBean {

    @Admin
    @User
    public void doSomething() {
        // ...
    }
}
Here the @Admin and @User annotation each resolve to @RolesAllowed. Since only one @RolesAllowed annotation is allowed on the method per the Java language specification, this results in an error.
The intention is clear however and aggregating metadata together in this way is natural.
A theoretical way to support something like this is with an annotation to describe that this aggregation is intended and desired. Note the addition of the theoretical @Merge annotation.
@RolesAllowed({"Administrator", "SuperUser"})
@Metatype
@Merge
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Admins {
}

@RolesAllowed({"Employee", "User"})
@Metatype
@Merge
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Users {
}


public static class MyBean {

    @Admin
    @User
    public void doSomething() {
        // ...
    }
}
A new @RolesAllowed annotation would be created containing the list {"Administrator", "SuperUser", "Employee", "User"} and that would represent the final @RolesAllowed usage for the doSomething() method.

292 comments:

«Oldest   ‹Older   201 – 292 of 292
ganesh said...

Such a very useful article. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article.

Angular js Training in Chennai

Angular js Training in Velachery

Angular js Training in Tambaram

Angular js Training in Porur

Angular js Training in Omr
Angular js Training in Annanagar

harini said...

This is an amazing post. Very informative and expressed in a precise way. Its a must recommend post! thanks for such a great content! Loved reading it. Thanks for your time in extracting the information.
Selenium Training in Chennai

Selenium Training in Velachery

Selenium Training in Tambaram

Selenium Training in Porur

Selenium Training in Omr

Selenium Training in Annanagar

HOT AND SEXY INDEPENDENT ESCORTS IN LUCKNOW said...

THANK YOU FOR VISITING MY WEBSITE:-
russian escorts in gurgaon
housewife escorts in gurgaon
gurgaon escort services
gurgaon escorts
escorts in gurgaon
escort services in gurgaon
gurgaon call girls
call girls in gurgaon

sahasrit said...

Thanks for sharing the information..... keep sharing more articles.
amazon web services aws training in chennai

microsoft azure training in chennai

workday training in chennai

android-training-in chennai

ios training in chennai

Ms Nikita Agarwal said...

I really loved your post so much that I cant resist writing comment...Please check mine as well
Escorts in Jaipur
Escorts in Jaipur
Escorts in Jaipur
Escorts in Delhi
Escorts in Guwahati
Escorts in Guwahati
Escorts in Guwahati
Escorts in Guwahati
Escorts in Lucknow

Hemachandran said...

Really it was an awesome article,very interesting to read.You have provided an nice article,Thanks for a sharing.
Java training in chennai

python training in chennai

web designing and development training course in chennai

selenium training in chennai

digital-marketing seo training in chennai

Anonymous 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.
salesforce course in chennai

software testing course in chennai

robotic process automation rpa course in chennai

blockchain course in chennai

devops course in chennai

Mohd Sharique said...

This information is impressive..I am inspired with your post writing style & how continuously you describe this topic.

Online Training for Big Data
best Apache Spark online course

siva said...

This is an excellent blog. Keep sharing the blog.
how to pass ielts
ethical hacking course requirements
stress interview questions and answers
core java for selenium
ethical hacking technical interview questions

Joe said...

Tube fittings
Manifold valves
Needle valve
Ball valve
hadoop training in chennai

Babu said...

Great experience I got good information from your blog.
devops roles and responsibilities
7 habits
mobile automation testing tools
benefits of web designing
excel interview questions and answers

Lavanya said...

Good and nice blog post, thanks for sharing your information.. it is very useful to me.. keep rocks and updating..
salesforce training in chennai

software testing training in chennai

robotic process automation rpa training in chennai

blockchain training in chennai

devops training in chennai

Williams said...

This is an excellent blog. Really very creative and informative content.
artificial intelligence advantages
application of asp net
definition of hadoop
devops tools java
selenium interview questions and answers pdf
selenium webdriver interview questions and answers

Magesh said...

It is really good and thanks for your useful post...
Social Media Marketing Courses in Chennai
Social Media Marketing Training in Chennai
Social Media Marketing Online Course

Deekshitha said...

very informative blog
data science training in Pune

Huongkv said...

Aivivu - chuyên vé máy bay, tham khảo

kinh nghiệm mua vé máy bay đi Mỹ giá rẻ

các chuyến bay từ mỹ về việt nam hôm nay

các đường bay từ canada về việt nam

Lịch bay từ Hàn Quốc về Việt Nam hôm nay

Mallela said...

Very informative content and intresting blog posts.Data science course in Nashik

Deekshitha said...

very informative blog
data science training in Pune

Mallela said...

Very informative content and intresting blog post.Data science course in Nashik

Deekshitha said...

very informative blog
data science training in Pune

Mallela said...

Very informative content and intresting blog post.Data science course in Thiruvananthapuram

Deekshitha said...

very informative blog
data analytics training in Pune

Mallela said...

Very informative content and intresting blog.Data science course in Thiruvananthapuram

Deekshitha said...

very informative blog
data analytics training in Pune

Mallela said...

Thanks for posting the best information and the blog is very informative.Data science course in Faridabad

Mallela said...

Thanks for posting the best information and the blog is very informative.Data science course in Faridabad

Deekshitha said...

very informative blog
data science training in Patna

ALAN COOPER said...

Compare Online coursework help to draw every person’s interest, Establish and clarify the exact arrangement or possessions of all homework. Insert articles linked to people. Grab the difficulties that come up in just how chosen subject. Illustrate how issues may be at the homework and offer a remedy to overcome all those issues. Find connections between those writers. Asses sing your own idea. All Assignment Help composing writing can possibly be an effective means to generate a fantastic mission.

Deekshitha said...

very informative blog
data science training in Patna

Mallela said...

Thanks for posting the best information and the blog is very informative.Data science course in Faridabad

Deekshitha said...

Informative blog
data analytics training in Patna

Deekshitha said...

Informative blog
data analytics training in Patna

Dipanshu Sharma said...

Thanks and keep posting such an informative blog.
Godrej Urban Park Chandivali Mumbai

Srigokul said...


Nice Blog. Thanks for Sharing this useful information...

Data science training in chennai
Data science course in chennai

Deekshitha said...

Informative blog
Business Analytics course in Mysuru

navya said...

It is really a very informative post for all those budding entreprenuers planning to take advantage of post for business expansions.
Biomedical engineering projects ideas

Unknown said...

Thanks for sharing such a nice info.I hope you will share more information like this. please keep on sharing!
Python Training In Bangalore
Artificial Intelligence Training In Bangalore
Data Science Training In Bangalore
Machine Learning Training In Bangalore
AWS Training In Bangalore
IoT Training In Bangalore
Adobe Experience Manager (AEM) Training In Bangalore

Digital Marketing training - 360DigiTMG said...

Terrific post thoroughly enjoyed reading the blog and more over found to be the tremendous one. In fact, educating the participants with it's amazing content. Hope you share the similar content consecutively.
Data Analytics Course in Raipur

Anonymous said...

Thanks for sharing Nice information.
python training in Bangalore

Data Analytics Courses in Bangalore said...

I want to leave a little comment to support and wish you the best of luck.we wish you the best of luck in all your blogging enedevors.
data science course bangalore

madhavi reddy said...

I Want to leave a little comment to support and wish you the best of luck.we wish you the best of luck in all your blogging endeavors.
cyber security course in bangalore

Unknown said...

Thanks for sharing such nice info. I hope you will share more information like this. please keep on sharing!
Python Training In Bangalore
Artificial Intelligence Training In Bangalore
Data Science Training In Bangalore
Machine Learning Training In Bangalore
AWS Training In Bangalore
IoT Training In Bangalore
Adobe Experience Manager (AEM) Training In Bangalore

Priyanshu Sharma said...

Everyone dreams of having his own house. If you too want to have your own house, read this blog where you will find tips to help you find your dream house.

Prestige Sector 150 Noida

Mallela said...

Thanks for posting the best information and the blog is very helpful.Data science course in Varanasi

Unknown said...

Thanks for the blog and it is really a very useful one.

TOGAF Training In Bangalore | TOGAF Online Training

Oracle Cloud Training In Bangalore | Oracle Cloud Online Training

Power BI Training In Bangalore | Power BI Online Training

Alteryx Training In Bangalore | Alteryx Online Training

API Training In Bangalore | API Online Training

Automation Testing with Python Training In Bangalore | Automation Testing with Python Online Training

Ruby on Rails Training In Bangalore | Ruby on Rails Online Training

Mallela said...

Thanks for posting the best information and the blog is very helpful.data science interview questions and answers

thomas said...

Kardinal Stick Siam - relx a great promotion. Express delivery in 3 hours.

ufa football betting, casino, slots, lottery, direct website 1688, stable financial, 100% UFABET168.

Online Baccarat FOXZ24 Easy to apply, fast, บาคาร่า deposit-withdraw 10 seconds with the system.

Watch movies online sa-movie.com, watch new movies, series Netflix HD 4K ดูหนังออนไลน์, watch free movies on your mobile phone, Tablet, watch movies on the web.

SEE4K Watch movies, watch movies, free series, load without interruption, sharp images in HD FullHD 4k, ดูหนังใหม่ all matters, all tastes, see anywhere, anytime, on mobile phones, tablets, computers.

GangManga read manga, read manga, read manga online for free, fast loading, clear images in HD quality, อ่านการ์ตูน all titles, anywhere, anytime, on mobile, tablet, computer.

Watch live football ผลบอลสด, watch football online, link to watch live football, watch football for free.

thomas said...

Kardinal Stick Siam - relx a great promotion. Express delivery in 3 hours.

ufa football betting, casino, slots, lottery, direct website 1688, stable financial, 100% UFABET168.

Online Baccarat FOXZ24 Easy to apply, fast, บาคาร่า deposit-withdraw 10 seconds with the system.

Watch movies online sa-movie.com, watch new movies, series Netflix HD 4K ดูหนังออนไลน์, watch free movies on your mobile phone, Tablet, watch movies on the web.

SEE4K Watch movies, watch movies, free series, load without interruption, sharp images in HD FullHD 4k, ดูหนังใหม่ all matters, all tastes, see anywhere, anytime, on mobile phones, tablets, computers.

GangManga read manga, read manga, read manga online for free, fast loading, clear images in HD quality, อ่านการ์ตูน all titles, anywhere, anytime, on mobile, tablet, computer.

Watch live football ผลบอลสด, watch football online, link to watch live football, watch football for free.

Mallela said...

Thanks for posting the best information and the blog is very helpful.Data science course in Varanasi

Technogeekscs said...

Fantastic blog! Thanks for sharing a very interesting post, I appreciate to blogger for an amazing post.
Data Science Course in Pune
Python Classes in Pune

Mallela said...

Thanks for posting the best information and the blog is very helpful.digital marketing institute in hyderabad

Deekshitha said...

Informative blog
best digital marketing institute in hyderabad

Priya Rathod 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.
AWS Training in Hyderabad
AWS Course in Hyderabad

data analytics courses in bangalore with placement - 360DigiTMG said...

Highly appreciable regarding the uniqueness of the content. This perhaps makes the readers feels excited to get stick to the subject. Certainly, the learners would thank the blogger to come up with the innovative content which keeps the readers to be up to date to stand by the competition. Once again nice blog keep it up and keep sharing the content as always.

data analytics courses in bangalore with placement

Deekshitha said...

Informative blog
data analytics courses in hyderabad

Mallela said...

Thanks for posting the best information and the blog is very helpful.data science institutes in hyderabad

Maneesha said...

I can set up my new thought from this post. It gives inside and out data. A debt of gratitude is in order for this significant data for all,
data scientist training and placement

Michael L Catudal said...

With special privileges and services, UEFA BET offers opportunities for small capitalists. Together ufa with the best websites that collect the most games With a minimum deposit starting from just 100 baht, you are ready to enjoy the fun with a complete range of betting that is available within the website

ufabet , our one another option We are a direct website, not through an agent, where customers can have great confidence without deception The best of online betting sites is that our Ufa will give you the best price

Michael L Catudal said...

อีกทั้งเรายังให้บริการ เกมสล็อต ยิงปลา แทงบอลออนไลน์ รองรับทุกการใช้งานในอุปกรณ์ต่าง ๆ HTML5 คอมพิวเตอร์ แท็บเล็ต สมาทโฟน คาสิโนออนไลน์ และมือถือทุกรุ่น เล่นได้ตลอด 24ชม. ไม่ต้อง Downloads เกมส์ให้ยุ่งยาก ด้วยระบบที่เสถียรที่สุดในประเทศไทย

Maradona Jons said...

หาคุณกำลังหาเกมส์ออนไลน์ที่สามารถสร้างรายได้ให้กับคุณ เรามีเกมส์แนะนำ เกมยิงปลา รูปแบบใหม่เล่นง่ายบนมือถือ คาสิโนออนไลน์ บนคอม เล่นได้ทุกอุปกรณ์รองรับทุกเครื่องมือ มีให้เลือกเล่นหลายเกมส์ เล่นได้ทั่วโลกเพราะนี้คือเกมส์ออนไลน์แบบใหม่ เกมยิงปลา

thomas said...

สหพันธ์ฟุตบอลระหว่างประเทศไฟเขียวให้ ไอเมอริค ลาปอร์ต ปราการหลังจาก สโมสรฟุตบอลแมนเชสเตอร์ ซิตี้ แห่งศึก ฟุตบอลพรีเมียร์ลีกอังกฤษ เปลี่ยนจากการเป็นตัวแทนทีมชาติ ฝรั่งเศส ไปรับใช้ทีมชาติ สเปน ได้ ทำให้เซ็นเตอร์แบ็ควัย 26 ปีจ่อลงเล่นใน ยูโร 2020 นี้กับทัพ กระทิงดุ... ufa

Mallela said...

Thanks for posting the best information and the blog is very helpful.artificial intelligence course in hyderabad

Marty Sockolov said...

Baccarat is actually money making and it's remarkable accessibility. Optimal In your case it's readily available that you will find pretty fascinating choices. And that is thought to be one thing that is really different And it's very something that is really prepared to hit with Pretty much the most wonderful, as well, is actually a really positive option. Furthermore, it's a really fascinating solution. It is a better way which can make money. Superbly prepar The number of best-earning baccarat will be the accessibility of generting the most money. Pretty much as practical is very well suited for you A substitute that could be assured. To a wide range of accessibility and performance And find out outstanding results also.บาคาร่า
ufa
ufabet
แทงบอล
แทงบอล
แทงบอล

Deekshitha said...

Informative blog
ai training in hyderabad

yanmaneee said...

kyrie shoes
golden goose
lebron shoes
yeezy boost 350 v2
lebron james shoes
yeezy 500
yeezy boost 350
curry shoes
curry shoes
moncler jackets

Mallela said...

Thanks for posting the best information and the blog is very important.digital marketing institute in hyderabad

Maradona Jons said...

pgslot ซึ่งเกมคาสิโนออนไลน์เกมนี้เป็นเกมที่เรียกว่าเกม สล็อตเอ็กซ์โอ คุณรู้จักเกมส์เอ็กซ์โอหรือไม่ 90% ต้องรู้จักเกมส์เอ็กซ์โออย่างแน่นอนเพราะในตอนนี้เด็กนั้นเราทุกคนมักที่จะเอาก็ได้ขึ้นมา สล็อต เล่นเกมส์เอ็กซ์โอกับเพื่อนเพื่อนแล้วคุณรู้หรือไม่ว่าในปัจจุบันนี้เกมส์เอ็กซ์โอนั้นกลายมาเป็นเกมซะลอสออนไลน์ที่ให้บริการด้วยเว็บคาสิโนออนไลน์คุณสามารถเดิมพันเกมส์เอ็กซ์โอกับเว็บคาสิโนออนไลน์ได้โดยที่จะทำให้คุณนั้นสามารถสร้างกำไรจากการเล่นเกมส์เดิมพันออนไลน์ได้เราแนะนำเกมส์ชนิดนี้ให้คุณได้รู้จักก็เพราะว่าเชื่อว่าทุก

Deekshitha said...

Informative blog
best digital marketing institute in hyderabad

Mallela said...

Thanks for posting the best information and the blog is very important.digital marketing institute in hyderabad

Maneesha said...

We are really grateful for your blog post. You will find a lot of approaches after visiting your post. Great work
data scientist training and placement in hyderabad

Maneesha said...

Just pure brilliance from you here. I have never expected something less than this from you and you have not disappointed me at all. I suppose you will keep the quality work going on.
data scientist training in hyderabad

Data Science Course in Varanasi - 360DigiTMG said...

Wonderful blog found to be very impressive to come across such an awesome blog. I should really appreciate the blogger for the efforts they have put in to develop such an amazing content for all the curious readers who are very keen of being updated across every corner. Ultimately, this is an awesome experience for the readers. Anyways, thanks a lot and keep sharing the content in future too.

data science institute in bangalore

salome said...

this article is very interesting to read and useful .thanks for posting and we expect more.Angular training in Chennai

Mallela said...

Thanks for posting the best information and the blog is very important.digital marketing institute in hyderabad

Priyanshu Sharma said...

ATS Floral Pathway

FLoor Plan

Location Map

Just read your post and would like to thank you for maintaining such a cool blog.

Mallela said...

Thanks for posting the best information and the blog is very important.artificial intelligence course in hyderabad

Mallela said...

Thanks for posting the best information and the blog is very important.data science institutes in hyderabad

Data Science Course in Varanasi - 360DigiTMG said...

Stupendous blog huge applause to the blogger and hoping you to come up with such an extraordinary content in future. Surely, this post will inspire many aspirants who are very keen in gaining the knowledge. Expecting many more contents with lot more curiosity further.

data science course in faridabad

Diyalabs said...

Thanks for sharing such a helpful, and understandable blog. I really enjoyed reading it.

Robots for kids
Robotic Online Classes
Robotics School Projects
Programming Courses Malaysia
Coding courses
Coding Academy
coding robots for kids
Coding classes for kids
Coding For Kids

Deekshitha said...

Informative blog
best digital marketing institute in hyderabad

Deekshitha said...

Informative blog
ai training in hyderabad

Deekshitha said...

Informative blog
data science course in Nashik

Deekshitha said...

Informative blog
data analytics courses in hyderabad

vivikhapnoi said...

Thanks for sharing your wealthy information. This is one of the excellent posts which I have seen. I go through your all of your blog, but this blog is the best one. It is really what I wanted to see hope in future you will continue for sharing such an excellent post
có vé máy bay từu mỹ về việt nam chưa

chuyến bay từ frankfurt đến hà nội

giá vé máy bay từ anh về hà nội

có chuyến bay từ úc về việt nam không

san ve may bay gia re tu Dai Loan ve Viet Nam

vé máy bay từ vancouver về việt nam

data science said...

Great to become visiting your weblog once more, it has been a very long time for me. Pleasantly this article i've been sat tight fosuch a long time. I will require this post to add up to my task in the school, and it has identical subject along with your review. Much appreciated, great offer. data science course in nagpur

Data Science Course in Varanasi - 360DigiTMG said...

Terrific post thoroughly enjoyed reading the blog and more over found to be the tremendous one. In fact, educating the participants with it's amazing content. Hope you share the similar content consecutively.

data science course in varanasi

python course in delhi said...

Extremely overall quite fascinating post. I was searching for this sort of data and delighted in perusing this one. Continue posting. A debt of gratitude is in order for sharing. data scientist course in delhi

عبدالله هادى said...



A tank cleaning company in Dammam has modern and advanced cleaning equipment used in cleaning, washing and sterilizing water tanks in Dammam, whether upper or lower tanks, and using special detergents used to clean and wash the tank bottom, walls and surfaces.شركة تنظيف خزانات بالدمام

Insect control company in Dammam is one of the best and largest pest control companies in the Kingdom, where it performs all tasks and works of pest control of all kinds, combating termites, cockroaches, flies, mosquitoes and mice. The insect control company in Riyadh offers high-quality insecticide spraying.شركة مكافحة الحشرات بالدمام

TakeoffProjects said...

Thank you, for technologies and academic projects visit our website
Cloud Computing Projects With Source Code on Takeoff Edu Group.

DataScienceBOX said...

I am a new user of this site, so here I saw several articles and posts published on this site, I am more interested in some of them, will provide more information on these topics in future articles.
data science course in london

dataanalytics said...

This is my first time visiting here. I found so much entertaining stuff in your blog, especially its discussion. From the tons of comments on your articles, I guess I am not the only one having all the leisure here! Keep up the good work. I have been meaning to write something like this on my website and you have given me an idea.
data scientist training in hyderabad

Deekshitha said...

Informative blog
ai training in hyderabad

«Oldest ‹Older   201 – 292 of 292   Newer› Newest»