Java 9 Module System

java-9-module-system-feature-image

Java 9 Module System, which is developed under Project Jigsaw, comes to us with the specific goal: to provide reliable configuration and strong flexible encapsulation. That helps application developers, library developers, or Java SE Platform implementors more easilier create a scalable platform, make greater platform integrity, and improve performance. In this tutorial, we’re gonna take a look at Java 9 Module System in a summarized way.

I. Why Jigsaw?

The primary goals of Project Jigsaw are to:

  • Make the Java SE Platform, and the JDK, more easily scalable down to small computing devices;
  • Improve the security and maintainability of Java SE Platform Implementations in general, and the JDK in particular;
  • Enable improved application performance;
  • Make it easier for developers to construct and maintain libraries and large applications, for both the Java SE and EE Platforms.

A standard module system was designed and implemented to have ability to modularize the JDK and other large legacy code bases.

II. Module System

1. What is Module?

1.1 Definition

A module is a named, self-describing collection of:
– code: packages containing types (Java classes, interfaces…)
– data: resources and other kinds of static information.

In summary:
– Class contains fields, methods.
– Package contains Classes, Enums, Interfaces, configuration files…
– Module contains Package and Other data resources.

1.2 Declaration

This is the way we declare a module:


module com.foo.bar {

    requires org.baz.qux.one;
    requires org.baz.qux.two;
    requires ...;

    exports com.foo.bar.alpha;
    exports com.foo.bar.beta;
    exports ...;

    // not exports com.foo.bar.support; //hidden package
}

module [module name] {…} defines name of a module.
requires + [module name] indicates the module that current module depends upon, at both compile time and run time.
exports + [package name] exports package to outside or to other modules. All other packages (which are not exported) are hidden.

*Note: A module can contain no requires or no exports.

The declaration code above is placed in module-info.java file which locates in the root of the module’s source-file hierarchy. For example, com.foo.bar folder module might include:


module-info.java
com/foo/bar/alpha/AlphaFactory.java
com/foo/bar/alpha/Alpha.java
com/foo/bar/beta/BetaFactory.java
com/foo/bar/beta/Beta.java

1.3 Module Artifact

A module declaration is compiled into module-info.class file, placed similarly in the class-file output directory.

A modular JAR file is like an ordinary JAR file but also includes a module-info.class file. For example, com.foo.bar folder modular JAR file might include:


META-INF/
META-INF/MANIFEST.MF
module-info.class
com/foo/bar/alpha/AlphaFactory.class
com/foo/bar/alpha/Alpha.class
com/foo/bar/beta/BetaFactory.class
com/foo/bar/beta/Beta.class

Modular JAR file allows to ship a single artifact that works:
– as a module, on Java 9 and later, or
– as a regular JAR file on the class path, on all releases.

Then, a module artifact could be a modular JAR file or a JMOD file containing a compiled module definition. We can find example of JMOD files in JDK/jmods folder:

module-system

1.4 Summary

A module can be defined as:
– an exploded-module directory which name is the module’s name and content is an “exploded” directory tree corresponding to a package hierarchy, or
– a module artifact (modular JAR file or JMOD file).

2. Accessibility and Readability

2.1 Readability

Assume that we declare modules like this:


module myapp{
    requires com.foo.bar;
}

module com.foo.bar {
    requires java.logging;
    exports com.foo.bar;
}

module java.logging {
    exports java.util.logging;
}

– Code in myapp module can refer to types in com.foo.bar module.
– Code in com.foo.bar module can refer to types in java.logging module.
=> So we can say that myapp reads com.foo.bar and com.foo.bar reads java.logging.
module-system-readability
For example:
– in myapp module, we can use Foo class of com.foo.bar package, and
– in com.foo.bar module, we can use Logger class of java.util.logging package.

This configuration helps things faster. It’s because code in myapp module refers to a type in a package which defined either in myapp module or in one of the modules read by myapp module (in this case, com.foo.bar module).
=> No need to search in multiple modules or entire class path.

What if, in myapp module, we want to use Logger class of java.util.logging package? Should we add a line in module declaration code like this:


module myapp{
    requires com.foo.bar;
    requires java.logging; // add this line
}

module com.foo.bar {
    requires java.logging;
    exports com.foo.bar;
}

module java.logging {
    exports java.util.logging;
}

It doesn’t look good, myapp have to read java.logging when:
myapp reads com.foo.bar,
com.foo.bar refers to types in java.logging.
=> myapp module should also have ability to logically read some other modules inside the module it reads. So we have:

Implied Readability

The declaration of module can be extended to give chance for any module (that depends upon it) to have readability to additional modules. Implied Readability is expressed by adding public modifier, like this:


module myapp{
    requires com.foo.bar;
//  requires java.logging;
}

module com.foo.bar {
    requires public java.logging; // this allows 'myapp' to refer types in 'java.logging'
    exports com.foo.bar;
}

module java.logging {
    exports java.util.logging;
}

module-system-implied-readability

2.2 Accessibility

Before Java 9, the accessibility can be described with:
– public
– protected
– [package]
– private

In this scenario, the only way to share code between packages is using public. But, it means ‘available to everyone’.

One goal of module system is strong (but flexible) encapsulation that allows a component to declare which public types are accessible by other components and which are not.

So now, levels of accessibility are:
– public to everyone
– public but only to specific modules
– public only within a module

– protected
– [package]
– private

public type in a package is no longer accessible outside the module, by default.

Return to the example above:


module com.foo.bar {
    requires ...;

    exports com.foo.bar.alpha;
//  exports com.foo.bar.beta;
}

com.foo.bar.alpha is public to everyone (who reads com.foo.bar module).
com.foo.bar module contains com.foo.bar.beta package, but the package is inaccessible because it is not exported, although components inside the package have been declared with public modifier. So com.foo.bar.beta is public only within itself.
– We can allow a package to be exported to one or more specified modules, and not exported to others by:
export [package] to [module, module,…];


module com.foo.bar {
    ...
    exports com.foo.bar.beta to
        com.jsa.a,
        com.jsa.b,
        com.jsa.c;
}

So, if type A is defined in module a, and type B is defined in module b.
Code in A can access B if:
a reads b, and
– package that includes B (in module b) treats module a by ‘public‘ way (public to everyone/ public to set of modules that includes module a).

Because basing on static information in module-info.java files, Readability and Accessibility work at compile time, without regards to class loaders.

3. Kinds of Module

3.1 Named Module

All modules in the examples above are named module.
So, named module is the module explicitly declares with a name in module-info.java, then is loaded from the module path.

What about JAR file in class path that doesn’t have module-info.java file?
Most Java code was written before release of module system and should be able to work without change. Even though module system platform is combination of modules, it must compile and run well with JAR files in the class path.

Here we go to next kind of module.

3.2 Unnamed Module

Unnamed module, akin to concept of unnamed package, is the module which packages or classes are not defined in any named module, but exists in JAR file from class path. If our code tries to load a Type from those files, module system attempts to look up class path and load it.

Unnamed module can:
– read all other modules (including all of the named, built-in platform modules).
– exports all of its packages.

The package in the unnamed module will be ignored if it is also defined in named module.

For example, class path’s JAR file containing com/foo/bar/alpha/AlphaFactory.class will never be loaded, because com.foo.bar module exports com.foo.bar.alpha package.

To keep module system to be reliable dependencies, named module cannot read unnamed module so that named module doesn’t depend on arbitrary content of class path.

In module-info.java, we CANNOT write:


requires [unnamed module];

It’s uncomfortable if we want to use a JAR outside set of named modules, we have to turn it into a named module, then new module cannot access the JAR files left in class path.

Let’s come to next kind.

3.3 Automatic Module

The JAR that we desire to use in previous part can be turned into automatic module, just by moving it from the class path to the module path.

An automatic module is a named module that is defined implicitly without a module-info.java or module declaration. Its name is derived from the JAR file name. We can associate this kind of module with implicit module or automatically named module.

Automatic module can:
– read any module (including other automatic modules and unnamed modules).
– export all of its package.

3.4 Summary

Three kinds of module can be illustrated in one image below:
module-system-kinds-of-module

4. Services

Java has a java.util.ServiceLoader class that helps to locate service providers at runtime by searching in class path.

For service providers defined in modules, we can look at an example to know way to declare modules with service and how it works.
Assume that we have demo.app module that we want to use Logger that is retrieved from System.getLogger() factory method with help of LoggerFinder service.

For both efficiency and clarity, we can add a uses clause. If not, module system is still able to identify by scanning the class files in module artifacts, but it would be slow and unreliable.


module com.javasampleapproach.demo.app {
	requires java.logging;
	exports com.javasampleapproach.platformlogging.app;
	uses java.lang.System.LoggerFinder; // this line can be used or not
}

This is demo.app.MainApp class:


package com.javasampleapproach.platformlogging.app;
... 
public class MainApp {
 
    // use System.getLogger() method with help of
    // LoggerFinder service to return system loggers or custom loggers
    private static Logger LOGGER = System.getLogger(...);
 
    public static void main(String[] args) {
        LOGGER.log(...);
    }
}

This is LoggerFinder implementation inside demo.logging module:


package com.javasampleapproach.platformlogging.logger;
...
public class MyLoggerFinder extends LoggerFinder {

	@Override
	public Logger getLogger(String name, Module module) {
		// return Logger depending on name/module...
	}
}

In demo.logging module declaration, we provides an implementation of LoggerFinder service with a provides – with clause:


module com.javasampleapproach.demo.logging {
	provides java.lang.System.LoggerFinder
		with com.javasampleapproach.platformlogging.logger.MyLoggerFinder;	
}

Using provides and uses clause gives benefit:
– The declarations of provision and use can be interpreted at compile time to ensure that service interface java.lang.System.LoggerFinder is accessible to both demo.logging module and demo.app module.
demo.logging module declaration can be further interpreted to ensure that MyLoggerFinder actually implements the declared service interface java.lang.System.LoggerFinder.

For detailed example with step by step and result to check, please visit:
Java 9 Platform Logging API and Service

418 thoughts on “Java 9 Module System”

  1. Aw, this was a very nice post. In concept I wish to put in writing like this additionally ?taking time and precise effort to make a very good article?but what can I say?I procrastinate alot and on no account seem to get something done.

  2. Nice blog right here! Also your site rather a lot up very fast! What web host are you using? Can I get your affiliate link to your host? I want my web site loaded up as quickly as yours lol

  3. I’m not that much of a internet reader to be honest
    but your blogs really nice, keep it up! I’ll go ahead and bookmark your website to come back in the future.

    Many thanks

  4. I loved as much as you’ll receive carried out right here. The
    sketch is attractive, your authored material stylish.
    nonetheless, you command get got an edginess over that you wish
    be delivering the following. unwell unquestionably
    come further formerly again as exactly the same nearly very often inside case you shield this hike.

  5. My brother suggested I may like this web site. He was onceentirely right. This publish truly made my day. You cann’t imagine simply howso much time I had spent for this info! Thanks!

  6. It’s the best time to make a few plans for the longer
    term and it’s time to be happy. I’ve learn this post and
    if I could I wish to recommend you few attention-grabbing things or tips.

    Maybe you could write subsequent articles relating to this article.
    I want to learn even more issues approximately it!

  7. Pretty great post. I just stumbled upon your weblog and wanted to say that I’ve truly loved surfing around yourweblog posts. After all I will be subscribing for your feed and I’m hoping you write once more soon!

  8. I think that is among the most significant info for me. And i’msatisfied studying your article. But wanna commentary on some basic things, The site taste is great, the articles is actually excellent :D. Just right job, cheers

  9. My spouse and I absolutely love your blog and find a lot of your post’s to
    be just what I’m looking for. Do you offer guest writers to write content available for
    you? I wouldn’t mind composing a post or elaborating on a few of
    the subjects you write in relation to here. Again, awesome web site!

  10. I am curious to find out what blog platform you’re using?

    I’m having some minor security issues with my latest blog and I’d like to find something more secure.
    Do you have any recommendations?

  11. Write more, thats all I have to say. Literally, it seems asthough you relied on the video to make your point.You obviously know what youre talking about, why throw awayyour intelligence on just posting videos to your weblog when you could be giving us somethingenlightening to read?

  12. great points altogether, you just gained a new reader.
    What may you suggest in regards to your put up that you made a few
    days in the past? Any positive?

  13. Do you mind if I quote a few of your articles as long as Iprovide credit and sources back to your website?My blog site is in the very same area of interest as yours and my visitorswould genuinely benefit from some of the information you provide here.Please let me know if this ok with you. Thank you!

  14. I know this web site provides quality depending articles and other data, is there any other website whichgives these kinds of things in quality?

  15. Excellent website you have here but I was curious if you knew of any
    user discussion forums that cover the same topics talked about in this article?
    I’d really like to be a part of community where I can get
    feedback from other experienced individuals that share
    the same interest. If you have any suggestions, please let me know.

    Thanks a lot!

  16. You are so awesome! I don’t think I’ve read something like this before.
    So good to discover another person with a few unique thoughts on this topic.
    Seriously.. many thanks for starting this up. This site is one thing that is
    needed on the web, someone with a bit of originality!

  17. Hello very cool blog!! Guy .. Beautiful ..Superb .. I’ll bookmark your blog and take the feeds additionally?I’m happy to find so many useful information here in the post, we’d like workout more techniques on this regard, thanks forsharing. . . . . .

  18. Great site you’ve got here.. It’s difficult to find good quality writing like yours these days.
    I seriously appreciate individuals like you! Take
    care!!

  19. Wow, marvelous blog layout! How long have you been blogging
    for? you made blogging look easy. The overall look of your web site is fantastic, as well as the content!

  20. Its like you learn my thoughts! You seem to grasp so much about this, like you wrote the guide in it or something.
    I think that you can do with a few percent to power
    the message home a little bit, however other than that, that is wonderful blog.
    An excellent read. I’ll certainly be back.

  21. An interesting discussion is worth comment. I do think that you should publish more on thistopic, it may not be a taboo subject but generally people do not talk about suchsubjects. To the next! Cheers!!

  22. We are a group of volunteers and starting a brand new
    scheme in our community. Your web site provided us with
    valuable information to work on. You have performed a formidable activity and our whole neighborhood can be grateful to you.

  23. Excellent blog here! Also your site loads up very fast! What web host are you using?Can I get your affiliate link to your host? I wish my web site loaded up as fast as yours lol

  24. I discovered your web page just recently through a recommendation and had a look at some of your articles. I like what you are writing about and I hope you keep up the good work. If you are interested in sharing some content or swap links do not hesitate to get in touch with me.

  25. 466657 142741If youre nonetheless on the fence: grab your favorite earphones, head down to a Finest Buy and ask to plug them into a Zune then an iPod and see which one sounds much better to you, and which interface makes you smile more. Then youll know which is correct for you. 117671

  26. Aw, this was an incredibly nice post. Spending some time and actual effort to generate a superb article… but what can I say…
    I procrastinate a whole lot and never manage to get anything
    done.

  27. Excellent beat ! I wish to apprentice while you amend your website, how can i subscribe
    for a weblog web site? The account aided me a applicable deal.
    I have been tiny bit acquainted of this your broadcast provided bright transparent idea

  28. You really make it appear really easy with your presentation however I in finding this topic to be
    really one thing which I feel I might never understand.
    It sort of feels too complex and extremely vast for me.
    I am looking forward in your subsequent submit, I will attempt
    to get the cling of it!

  29. Thanks for a marvelous posting! I really enjoyed reading it, you happen to be a great author.I will remember to bookmark your blog and will often come
    back someday. I want to encourage one to continue your great
    work, have a nice holiday weekend!

  30. It’s awesome to pay a visit this website and reading the views of all mates on the topic of this post, while I am also eager of getting familiarity.

  31. I believe that is among the most important info for me.
    And i’m satisfied studying your article. However should observation on few common things, The website style is wonderful, the articles is actually
    excellent : D. Excellent task, cheers

  32. Hey! This is my first visit to your blog! We are a group of volunteers and
    starting a new project in a community in the same niche.

    Your blog provided us beneficial information to work on. You have
    done a wonderful job!

  33. Hello just wanted to give you a quick heads up. The text in your content seem to be running off
    the screen in Chrome. I’m not sure if this is a format issue or something to
    do with internet browser compatibility but I figured I’d post to
    let you know. The design look great though! Hope you get the issue solved soon. Thanks

  34. I am not sure where you’re getting your info, but good topic.

    I needs to spend some time learning much more or understanding more.
    Thanks for great information I was looking for this info for my mission.

  35. Its like you learn my mind! You seem to understand so much approximately this, like you
    wrote the book in it or something. I think that you
    simply can do with some % to power the message house a bit,
    however other than that, that is great blog. An excellent read.

    I will definitely be back.

  36. Hello there! I know this is somewhat off topic but I was wondering which blog platform are you using for this website?
    I’m getting sick and tired of WordPress because I’ve
    had problems with hackers and I’m looking at options for another
    platform. I would be great if you could point me in the direction of a good platform.

  37. Hi there, I discovered your website by means of Google even as searching
    for a related topic, your site came up, it seems great.

    I have bookmarked it in my google bookmarks.
    Hi there, simply was alert to your blog thru Google, and located that it is truly informative.
    I’m going to be careful for brussels. I will appreciate in the event you continue this in future.
    Numerous folks will likely be benefited out of your writing.
    Cheers!

  38. You can certainly see your skills within the work you write.

    The world hopes for even more passionate writers like you who
    are not afraid to mention how they believe. At all times follow your heart.

  39. Write more, thats all I have to say. Literally, it seems as though you relied on the
    video to make your point. You clearly know what youre talking about, why throw away your intelligence on just posting videos to your
    weblog when you could be giving us something informative to read?

  40. I like the valuable info you supply in your articles.
    I’ll bookmark your weblog and check once more here regularly.
    I am quite certain I will be told many new stuff proper right here!
    Good luck for the next!

  41. Hey I know this is off topic but I was wondering if you knew of any widgets I could add
    to my blog that automatically tweet my newest twitter updates.

    I’ve been looking for a plug-in like this for quite
    some time and was hoping maybe you would have some experience with something like this.
    Please let me know if you run into anything. I truly enjoy reading your blog and I look forward to your new updates.

  42. Great items from you, man. I’ve remember your stuff previous
    to and you are just too fantastic. I actually like what you have obtained
    here, really like what you are stating and the best way
    through which you assert it. You are making it entertaining and you still care for
    to keep it sensible. I can not wait to read much more
    from you. That is really a tremendous website.

  43. Hey outstanding blog! Does running a blog such as this require
    a large amount of work? I’ve absolutely no knowledge of coding but I had been hoping to
    start my own blog in the near future. Anyway, should you have any suggestions or tips for new blog owners
    please share. I understand this is off subject but I
    just needed to ask. Thanks a lot!

  44. Do you mind if I quote a couple of your posts as long as I provide credit and sources back to your webpage?
    My blog site is in the exact same area of interest as yours and my visitors would definitely benefit from a lot of the information you provide here.
    Please let me know if this okay with you. Thanks!

  45. First off I would like to say terrific blog! I had a quick question that I’d like to ask if you do not mind.

    I was curious to know how you center yourself
    and clear your head prior to writing. I’ve had
    difficulty clearing my mind in getting my thoughts out there.
    I truly do enjoy writing however it just seems like the first 10 to 15 minutes are wasted just
    trying to figure out how to begin. Any suggestions or hints?
    Many thanks!

  46. This is the right blog for anybody who would like to
    find out about this topic. You realize a whole lot its almost tough to argue with you (not that I
    personally would want to…HaHa). You certainly put a new spin on a topic which has been written about for ages.
    Excellent stuff, just excellent!

  47. Wonderful website. Plenty of useful information here.
    I’m sending it to several pals ans additionally sharing in delicious.
    And obviously, thanks on your sweat!

  48. Hello there, I discovered your blog via Google at the same time as looking
    for a comparable subject, your website came up, it seems to be good.
    I have bookmarked it in my google bookmarks.
    Hi there, just became alert to your weblog thru Google,
    and found that it is really informative. I am going to watch out for brussels.
    I will appreciate if you continue this in future. Many other folks will be benefited out
    of your writing. Cheers!

  49. Terrific article! This is the type of information that are supposed to be shared around the net.

    Shame on Google for now not positioning this submit upper!
    Come on over and discuss with my web site . Thank you =)

  50. I’m amazed, I have to admit. Seldom do I encounter a blog that’s both educative and entertaining, and without a doubt, you
    have hit the nail on the head. The problem is something which not enough folks
    are speaking intelligently about. I am very happy that I
    came across this during my search for something regarding this.

  51. Your appraisal is really interesting. If you would like
    to perceive slot resmi, I love to recommend participating in about dependable slot terpercaya niche websites.
    As you can achieve big victories and acquire promised affiliate payouts.

    If you want to find out, you may quickly the actual hyperlink in the following
    paragraphs. The hyperlink is actually an online video port website page that may be frequently employed among Indonesian member.

  52. I do not know whether it’s just me or if perhaps everyone else
    experiencing problems with your blog. It appears as though some of the written text within your content are running off the
    screen. Can someone else please comment and let me know if this
    is happening to them as well? This might be a issue with my web browser because I’ve had this happen previously.
    Kudos

  53. I blog quite often and I truly thank you for your information. Your
    article has truly peaked my interest. I am going to take
    a note of your blog and keep checking for new information about once a week.
    I opted in for your RSS feed too.

  54. Pretty section of content. I just stumbled upon your web
    site and in accession capital to assert that I get in fact loved account
    your blog posts. Anyway I will be subscribing on your augment or even I fulfillment
    you get entry to consistently rapidly.

  55. A fascinating discussion is definitely worth comment.
    I do think that you ought to write more about this subject, it
    may not be a taboo matter but typically people don’t speak about these subjects.

    To the next! All the best!!

  56. You really make it seem so easy with your presentation but I find this topic to be actually something which I think I would never understand.
    It seems too complicated and extremely broad for me.
    I’m looking forward for your next post, I will try
    to get the hang of it!

  57. Howdy! Someone in my Facebook group shared this website with us so I came to give it
    a look. I’m definitely loving the information. I’m book-marking and will be tweeting this to my
    followers! Wonderful blog and outstanding style and design.

  58. Hello! This is kind of off topic but I need some guidance
    from an established blog. Is it hard to set up your own blog?

    I’m not very techincal but I can figure things out pretty quick.
    I’m thinking about making my own but I’m not sure
    where to begin. Do you have any ideas or suggestions?
    Cheers

  59. First of all I would like to say excellent blog!
    I had a quick question which I’d like to ask if you don’t mind.
    I was curious to find out how you center yourself and clear your mind prior to writing.
    I have had a hard time clearing my mind in getting my thoughts out.
    I truly do enjoy writing however it just seems like the first
    10 to 15 minutes are usually lost simply just trying to figure out how to begin. Any
    suggestions or hints? Thanks!

  60. I am really impressed with your writing skills and also with the layout on your blog.

    Is this a paid theme or did you modify it yourself? Anyway keep up the excellent quality writing, it’s rare to see a great blog like this
    one today.

  61. Hello very nice blog!! Guy .. Excellent .. Superb .. I’ll bookmark your
    blog and take the feeds also? I’m happy to find a lot of helpful information here within the publish, we want develop extra techniques on this regard, thanks for sharing.
    . . . . .

  62. The examination is very interesting. If you want to learn agen slot online, I like to recommend participating in about respected slot pulsa online websites
    on the net. Since you can attain big profits and get certain winnings.

    If you would like to see, you may in a straight line take a
    peek through on this page. The hyperlink may be a situation internet site
    that may be frequently used between Indonesian member.

  63. Hi! I realize this is sort of off-topic however I had to ask.
    Does running a well-established blog such as yours take a lot of
    work? I am brand new to operating a blog however I do
    write in my journal every day. I’d like to start a blog
    so I can easily share my personal experience and thoughts online.

    Please let me know if you have any suggestions or tips
    for new aspiring blog owners. Appreciate it!

  64. Great beat ! I wish to apprentice while you amend your site,
    how could i subscribe for a blog site? The account aided me a acceptable deal.
    I had been tiny bit acquainted of this your broadcast provided bright clear concept

  65. Hello there! This post couldn’t be written any better!
    Reading through this post reminds me of my previous room mate!
    He always kept talking about this. I will forward this write-up to
    him. Fairly certain he will have a good read. Thank you for sharing!

  66. My spouse and I stumbled over here from a different page and thought I should check things out.
    I like what I see so now i’m following you.
    Look forward to looking at your web page for a second time.

  67. We are a bunch of volunteers and starting a brand new scheme in our community.
    Your web site provided us with helpful information to work on. You’ve done an impressive
    process and our whole community will likely be thankful to you.

  68. wonderful post, very informative. I’m wondering
    why the opposite experts of this sector do not realize this.
    You should continue your writing. I’m confident, you have
    a huge readers’ base already!

  69. I have been browsing online greater than 3 hours nowadays, but I never
    found any attention-grabbing article like yours.
    It’s pretty worth sufficient for me. Personally, if all site owners
    and bloggers made excellent content as you did, the
    net can be much more useful than ever before.

  70. Hi there, just became alert to your blog through Google,
    and found that it’s truly informative. I’m going to watch
    out for brussels. I will appreciate if you continue this in future.
    A lot of people will be benefited from your writing. Cheers!

  71. Hi there, I think your web site could be having web browser compatibility problems.
    Whenever I look at your blog in Safari,
    it looks fine however, when opening in Internet Explorer,
    it’s got some overlapping issues. I just wanted to provide you with a quick heads up!
    Besides that, wonderful site!

  72. Hmm is anyone else encountering problems with the pictures on this blog loading?
    I’m trying to figure out if its a problem on my end or if it’s the blog.

    Any feed-back would be greatly appreciated.

  73. Good day! I know this is kinda off topic but
    I was wondering which blog platform are you using for this
    website? I’m getting sick and tired of WordPress because I’ve had issues with hackers and I’m looking at options for
    another platform. I would be awesome if you could point me in the direction of a good platform.

  74. Hi there it’s me, I am also visiting this website on a regular
    basis, this site is truly nice and the people are truly sharing pleasant thoughts.

  75. It’s a shame you don’t have a donate button! I’d certainly donate to this fantastic
    blog! I suppose for now i’ll settle for bookmarking and adding your RSS feed to my Google
    account. I look forward to new updates and will talk about this
    site with my Facebook group. Chat soon!

  76. Write more, thats all I have to say. Literally, it seems as though you relied on the video to make your point.
    You definitely know what youre talking about, why waste your intelligence on just posting videos to your blog
    when you could be giving us something informative to read?

  77. An impressive share! I have just forwarded this onto a colleague who has been doing a little homework on this.
    And he actually ordered me dinner because I found it for him…
    lol. So let me reword this…. Thank YOU for the meal!! But yeah, thanx for spending some time to discuss this issue here
    on your website.

  78. Nice post. I was checking continuously this blog and I am impressed!

    Extremely helpful information specially the last part :
    ) I care for such info much. I was seeking this particular
    information for a long time. Thank you and good luck.

  79. You are so interesting! I do not think I have read through
    something like that before. So great to find somebody with a few unique thoughts
    on this subject matter. Really.. many thanks for starting this
    up. This web site is something that is needed on the internet, someone with a little originality!

  80. Hey I am so delighted I found your blog page, I really found you by accident,
    while I was looking on Yahoo for something else, Anyhow I am here now and
    would just like to say thanks for a tremendous post and a all round entertaining blog (I also love
    the theme/design), I don’t have time to browse it all at the
    moment but I have book-marked it and also added your
    RSS feeds, so when I have time I will be back to read much more,
    Please do keep up the awesome b.

  81. I am not sure where you are getting your information, but great topic.
    I needs to spend some time learning much more or understanding more.
    Thanks for excellent information I was looking for this info for my mission.

  82. The analysis is incredibly interesting. If you want to experience situs slot gacor,
    I might suggest starting in reliable situs slot gacor websites
    on the web. As you can attain big increases each of the benefits and receive assured confederate pay-out odds.

    If you wish to experience, you are able to upright have a look through on this page.
    The hyperlink can be defined as slot machine game website page that is definitely
    often used between Indonesian online players.

  83. Your assessment is really interesting. If you wish
    that could be performed slot resmi, I recommend
    taking part in in honest agen slot online niche websites.
    As you can gain big advantages and attain certain internet affiliate pay-out odds.
    If you wish to try out, it is possible to right away stick to the hyperlink listed below.
    The hyperlink is mostly a position internet site that may be frequently
    employed amidst Indonesia online players.

  84. Just desire to say your article is as amazing. The clearness in your post
    is just spectacular and i could assume you’re an expert on this subject.
    Fine with your permission allow me to grab your RSS
    feed to keep up to date with forthcoming post. Thanks a million and please keep up the
    rewarding work.

  85. Hello all, here every person is sharing such know-how, therefore it’s fastidious to read this
    web site, and I used to pay a quick visit this blog
    every day.

  86. Its such as you read my mind! You seem to understand so much
    approximately this, like you wrote the ebook in it or something.
    I feel that you just can do with some percent to power the
    message house a bit, however other than that, this is wonderful blog.
    A fantastic read. I will certainly be back.

  87. Wonderful work! That is the kind of info that are meant to be shared across the net.
    Disgrace on Google for not positioning this put up upper!
    Come on over and visit my site . Thanks =)

  88. Thank you a bunch for sharing this with all people you really understand what you’re speaking approximately!

    Bookmarked. Kindly also visit my web site =). We may have a hyperlink
    change contract between us

  89. Everything is very open with a precise explanation of the issues.
    It was really informative. Your website is useful. Thank you for sharing!

  90. Oh my goodness! Awesome article dude! Many thanks, However I am having problems with your RSS.
    I don’t know why I cannot subscribe to it. Is there anybody else getting identical RSS
    problems? Anyone who knows the answer will you kindly respond?
    Thanks!!

  91. Fantastic beat ! I wish to apprentice whilst you amend your website, how could i subscribe for a weblog website?
    The account helped me a acceptable deal. I had been a little bit acquainted of this your broadcast provided bright transparent idea

  92. Wonderful beat ! I would like to apprentice while you
    amend your site, how can i subscribe for a blog site?
    The account aided me a acceptable deal. I had been tiny bit acquainted
    of this your broadcast provided bright clear concept

  93. Hmm is anyone else having problems with the images on this
    blog loading? I’m trying to find out if its a problem on my
    end or if it’s the blog. Any feedback would be greatly appreciated.

  94. I do trust all of the ideas you have introduced on your
    post. They’re really convincing and will definitely work.
    Still, the posts are very brief for newbies.

    Could you please lengthen them a bit from next time? Thank
    you for the post.

  95. Hey there just wanted to give you a quick heads up.
    The words in your post seem to be running off the screen in Ie.
    I’m not sure if this is a formatting issue or something to do with browser compatibility but I thought I’d post to let you know.
    The design and style look great though! Hope you get the problem solved soon. Cheers

  96. Excellent weblog right here! Also your web site lots up fast!
    What host are you the usage of? Can I am getting your affiliate hyperlink to your
    host? I desire my web site loaded up as quickly as yours lol

  97. Hey I know this is off topic but I was wondering if you knew of
    any widgets I could add to my blog that automatically tweet my newest twitter updates.
    I’ve been looking for a plug-in like this for quite some
    time and was hoping maybe you would have some experience with
    something like this. Please let me know if you run into anything.
    I truly enjoy reading your blog and I look forward to your new updates.

  98. Superb blog! Do you have any tips and hints for aspiring writers?
    I’m planning to start my own website soon but I’m a little lost on everything.
    Would you recommend starting with a free platform like WordPress or go for a paid
    option? There are so many choices out there that I’m totally overwhelmed ..
    Any recommendations? Kudos!

  99. Hello would you mind stating which blog platform you’re working with?
    I’m looking to start my own blog in the near future but I’m
    having a hard time selecting between BlogEngine/Wordpress/B2evolution and Drupal.
    The reason I ask is because your layout seems different then most blogs and
    I’m looking for something unique. P.S My apologies for being off-topic but I had to ask!

  100. I was curious if you ever thought of changing the layout
    of your blog? Its very well written; I love what youve got to say.

    But maybe you could a little more in the way of content so
    people could connect with it better. Youve
    got an awful lot of text for only having 1 or 2 pictures.

    Maybe you could space it out better?

  101. Do you have a spam problem on this site; I also am a blogger, and I was
    wanting to know your situation; we have created some nice practices and we are
    looking to exchange strategies with other folks, please shoot me an e-mail if interested.

  102. Have you ever considered about including a little bit more
    than just your articles? I mean, what you say is fundamental and everything.
    However think about if you added some great photos
    or video clips to give your posts more, “pop”! Your content
    is excellent but with pics and clips, this blog could definitely be
    one of the most beneficial in its niche. Awesome blog!

  103. This is really interesting, You are a very skilled blogger.
    I have joined your feed and look forward to seeking more of your magnificent post.
    Also, I’ve shared your web site in my social networks!

  104. I want to to thank you for this excellent read!! I definitely loved every bit of it.
    I have got you bookmarked to check out new stuff you post…

  105. Hey there, You have done a fantastic job. I will definitely digg it and personally suggest to my friends.
    I’m sure they’ll be benefited from this web site.

  106. Valuable info. Fortunate me I discovered your web site by accident, and I’m shocked why this accident didn’t came about earlier!
    I bookmarked it.

  107. Have you ever thought about including a little bit more than just your
    articles? I mean, what you say is important and all.
    Nevertheless think of if you added some great visuals or video clips
    to give your posts more, “pop”! Your content is excellent but with images and clips,
    this site could certainly be one of the very best in its field.
    Very good blog!

  108. I do accept as true with all of the ideas you’ve introduced in your post.
    They’re really convincing and can certainly work.
    Still, the posts are very quick for starters. May you please extend them a
    bit from subsequent time? Thanks for the post.

  109. My brother recommended I may like this blog. He was once entirely right.
    This post actually made my day. You can not imagine simply how
    so much time I had spent for this info! Thanks!

  110. Thank you for the good writeup. It in fact was a amusement account it.
    Look advanced to more added agreeable from you! By the way, how could we communicate?

  111. We are a group of volunteers and opening a new scheme in our community.
    Your site offered us with valuable information to work on. You’ve done a formidable job and our entire
    community will be thankful to you.

  112. Today, I went to the beachfront with my children. I found a sea shell
    and gave it to my 4 year old daughter and said “You can hear the ocean if you put this to your ear.” She placed the shell to her ear
    and screamed. There was a hermit crab inside and it pinched her ear.

    She never wants to go back! LoL I know this is completely off topic but I had to tell someone!

  113. Please let me know if you’re looking for a article author for your
    site. You have some really good posts and I feel I would be a good asset.

    If you ever want to take some of the load off, I’d absolutely love to
    write some material for your blog in exchange for a link back to mine.
    Please shoot me an email if interested. Kudos!

  114. The assessment is incredibly interesting. If you want to learn situs slot pulsa, I recommend participating in upon dependable situs slot deposit pulsa niche
    sites. As you can achieve big benefits and attain guaranteed affiliate marketing payouts.
    If you wish that can be played, you possibly can instantly the actual hyperlink under.
    The web link can be described as video slot webpage that is certainly commonly used among Indonesian member.

  115. I was wondering if you ever considered changing the layout of your website?
    Its very well written; I love what youve got to
    say. But maybe you could a little more in the way of content so people could connect with it better.
    Youve got an awful lot of text for only having one or two images.

    Maybe you could space it out better?

  116. Thank you a bunch for sharing this with all of us
    you really recognise what you are speaking about! Bookmarked.

    Please also seek advice from my web site =).

    We could have a link alternate contract among
    us

  117. Wow that was odd. I just wrote an very long
    comment but after I clicked submit my comment didn’t show up.

    Grrrr… well I’m not writing all that over again. Anyhow, just
    wanted to say great blog!

  118. Heya i’m for the first time here. I found this board and I
    find It truly useful & it helped me out much. I hope to give something back
    and help others like you helped me.

  119. Hey! This post couldn’t be written any better!
    Reading through this post reminds me of my previous room mate!
    He always kept talking about this. I will forward this write-up to
    him. Pretty sure he will have a good read. Many thanks for sharing!

  120. You are so cool! I do not suppose I have read through
    anything like this before. So wonderful to find someone with unique
    thoughts on this subject. Seriously.. many thanks
    for starting this up. This website is something that is required on the web,
    someone with a little originality!

  121. Hmm it appears like your blog ate my first comment (it was extremely long) so I guess I’ll just sum it up what I submitted and
    say, I’m thoroughly enjoying your blog. I as well am an aspiring blog
    writer but I’m still new to the whole thing. Do you have any recommendations for
    rookie blog writers? I’d definitely appreciate it.

  122. Its like you learn my thoughts! You seem
    to know a lot about this, such as you wrote the guide in it or something.
    I think that you just could do with some p.c. to force the message home a bit, however other than that,
    this is magnificent blog. An excellent read.
    I will certainly be back.

  123. With havin so much content do you ever run into any problems of plagorism or copyright infringement?
    My site has a lot of unique content I’ve either written myself or outsourced but it looks
    like a lot of it is popping it up all over the internet without my permission. Do you know any
    methods to help stop content from being ripped off? I’d truly appreciate it.

  124. Every weekend i used to go to see this web page,
    for the reason that i wish for enjoyment, as this this website conations actually
    nice funny stuff too.

  125. Asking questions are in fact fastidious thing if you are not understanding something completely, except
    this post presents nice understanding even.

  126. Hey there would you mind letting me know which webhost you’re
    utilizing? I’ve loaded your blog in 3 completely different internet browsers and I must say this
    blog loads a lot faster then most. Can you suggest a good internet hosting provider at a fair price?

    Thanks, I appreciate it!

  127. Greetings I am so delighted I found your blog, I really found you by error, while I was browsing on Askjeeve for something else, Nonetheless I am here now and would just like to say thank you for a remarkable post and a all round thrilling blog (I also love the theme/design),
    I don’t have time to browse it all at the minute but I have book-marked it and also added in your RSS feeds, so when I have time I will be back to read
    more, Please do keep up the fantastic work.

  128. whoah this blog is magnificent i love reading your posts.
    Stay up the good work! You understand, lots of people are looking around for this information, you can help them greatly.

  129. When I originally commented I seem to have clicked
    on the -Notify me when new comments are added- checkbox and now each time a comment is added I get 4 emails
    with the same comment. Is there a way you are able to remove me from that service?
    Thank you!

  130. Hi! This is kind of off topic but I need some help from
    an established blog. Is it hard to set up your own blog?
    I’m not very techincal but I can figure things out pretty quick.

    I’m thinking about making my own but I’m not sure where to begin. Do you have any ideas or suggestions?
    Many thanks

  131. Wonderful blog! I found it while browsing on Yahoo News.
    Do you have any tips on how to get listed in Yahoo News?
    I’ve been trying for a while but I never seem
    to get there! Cheers

  132. Excellent goods from you, man. I’ve understand your stuff previous to and you are
    just extremely wonderful. 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 wise.
    I can not wait to read far more from you.
    This is really a terrific web site.

  133. Hey I know this is off topic but I was wondering if you knew of any widgets I could add to
    my blog that automatically tweet my newest twitter updates.
    I’ve been looking for a plug-in like this for quite some time and
    was hoping maybe you would have some experience with
    something like this. Please let me know if you run into anything.
    I truly enjoy reading your blog and I look forward to your new updates.

  134. Hey are using WordPress for your site platform? I’m new to the blog world
    but I’m trying to get started and create my own. Do you require any html coding expertise to make your own blog?
    Any help would be really appreciated!

  135. Exceptional post however I was wanting to know if you could write a litte more on this topic?
    I’d be very grateful if you could elaborate a little bit further.
    Cheers!

  136. Hi, Neat post. There’s a problem with your site in web explorer, could test this?
    IE still is the market chief and a large component of people will pass over your excellent writing due to this problem.

  137. Hmm is anyone else encountering problems with the images on this blog loading?
    I’m trying to figure out if its a problem on my end or if it’s the blog.
    Any feed-back would be greatly appreciated.

  138. A fascinating discussion is definitely worth comment.

    I think that you ought to publish more about this issue, it may not
    be a taboo matter but usually folks don’t discuss these topics.

    To the next! Best wishes!!

  139. When I initially commented I clicked the “Notify me when new comments are added” checkbox and now each time a comment is added I get
    several emails with the same comment. Is there any way you can remove people from that service?
    Many thanks!

  140. Hey there! I understand this is sort of off-topic however I needed to ask.

    Does running a well-established blog such as yours require a massive amount work?
    I am brand new to blogging but I do write in my journal on a
    daily basis. I’d like to start a blog so I can easily share my experience and views online.
    Please let me know if you have any recommendations or tips for new aspiring
    bloggers. Thankyou!

  141. Have you ever thought about including a little bit more than just your articles?
    I mean, what you say is important and everything.
    However imagine if you added some great visuals or videos to give your posts more, “pop”!
    Your content is excellent but with pics and videos, this website could undeniably be one of the most beneficial
    in its field. Very good blog!

  142. Definitely believe that which you said. Your favorite justification appeared to be on the internet the simplest thing to be aware
    of. I say to you, I certainly get annoyed while people consider worries that they plainly don’t
    know about. You managed to hit the nail upon the top as well as defined out the
    whole thing without having side-effects , people could take a signal.
    Will likely be back to get more. Thanks

  143. I just couldn’t depart your website prior to suggesting that I really enjoyed the usual information a person supply on your visitors?

    Is going to be back incessantly to inspect new posts

  144. Its such as you read my thoughts! You seem to know so much about this, such as you
    wrote the book in it or something. I think that you just could do with a few % to power the message house a bit, but instead
    of that, this is fantastic blog. An excellent read. I will definitely be back.

  145. Hey I know this is off topic but I was wondering if you knew of any widgets I could add to my blog that automatically tweet my newest
    twitter updates. I’ve been looking for a plug-in like this for quite some time and was hoping maybe you would have some experience
    with something like this. Please let me know
    if you run into anything. I truly enjoy reading your blog
    and I look forward to your new updates.

  146. Just wish to say your article is as astounding.
    The clearness in your post is simply great and i could assume you’re
    an expert on this subject. Fine with your permission allow me to grab
    your RSS feed to keep up to date with forthcoming post.
    Thanks a million and please carry on the rewarding work.

  147. Hi there! This is my first visit to your blog! We are a group
    of volunteers and starting a new initiative in a community in the same niche.

    Your blog provided us beneficial information to work on. You have
    done a marvellous job!

  148. I’m extremely impressed with your writing skills and also with the
    layout on your weblog. Is this a paid theme or did you
    modify it yourself? Anyway keep up the excellent quality writing,
    it is rare to see a great blog like this one these days.

  149. Have you ever thought about writing an ebook or guest authoring on other sites?
    I have a blog based on the same information you discuss
    and would really like to have you share some stories/information.
    I know my visitors would enjoy your work. If you are even remotely interested, feel free to send me
    an e-mail.

  150. Hello there, just became aware of your blog through Google,
    and found that it is truly informative. I am going to watch out for
    brussels. I will be grateful if you continue this in future.
    Numerous people will be benefited from your writing. Cheers!

  151. This design is wicked! You certainly know how to keep a reader entertained.
    Between your wit and your videos, I was almost moved to start my
    own blog (well, almost…HaHa!) Excellent job.
    I really enjoyed what you had to say, and more than that, how you presented
    it. Too cool!

  152. Have you ever thought about including a little bit more than just your
    articles? I mean, what you say is fundamental and everything.
    However think of if you added some great images or videos to give your posts more, “pop”!
    Your content is excellent but with images and clips, this blog
    could undeniably be one of the very best in its field.
    Great blog!

  153. I believe this is among the such a lot important info for me.
    And i’m glad reading your article. But wanna observation on some general issues, The website taste is perfect,
    the articles is in point of fact excellent : D. Just right activity, cheers

  154. A motivating discussion is worth comment. I do think that you need to write more about this topic, it may
    not be a taboo subject but typically folks don’t talk about such issues.
    To the next! Many thanks!!

  155. I simply could not depart your website prior to suggesting that I extremely
    loved the standard information an individual supply in your guests?

    Is going to be again incessantly to check out new posts

  156. I’m now not sure where you’re getting your information, but great topic.
    I needs to spend a while studying much more or figuring out more.
    Thanks for fantastic information I used to be looking
    for this information for my mission.

  157. hello there and thank you for your info – I have
    definitely picked up anything new from right here. I did however expertise a few technical
    points using this website, since I experienced to reload the web
    site many times previous to I could get it to load properly.
    I had been wondering if your web host is
    OK? Not that I’m complaining, but slow loading instances times will often affect
    your placement in google and could damage your high-quality score if
    ads and marketing with Adwords. Well I am adding this RSS to my e-mail and could look out for much more of your respective
    intriguing content. Make sure you update this again soon.

  158. Thanks for your personal marvelous posting!
    I quite enjoyed reading it, you can be a great author.
    I will be sure to bookmark your blog and will eventually come back sometime
    soon. I want to encourage you to definitely continue your
    great job, have a nice holiday weekend!

  159. I was wondering if you ever thought of changing the page layout of your
    blog? Its very well written; I love what youve
    got to say. But maybe you could a little more in the
    way of content so people could connect with it better.
    Youve got an awful lot of text for only having 1
    or two images. Maybe you could space it out better?

  160. I think this is one of the most significant information for
    me. And i am glad reading your article. But wanna remark on few general things, The web site style is wonderful, the articles is really nice : D.
    Good job, cheers

  161. The examination is incredibly interesting. If you want
    to master situs slot pulsa, I would recommend participating in in reputable slot pulsa tanpa potongan websites.
    As you can attain big victories and acquire guaranteed online marketer pay-out odds.
    If you would like to achieve, you might instantly take a look through below.
    The hyperlink is really a location website page that is certainly commonly used between Indonesia players.

  162. We’re a group of volunteers and opening a new scheme
    in our community. Your web site provided us with valuable information to work on. You have done a formidable
    job and our entire community will be thankful to you.

  163. With havin so much written content do you ever run into any problems of
    plagorism or copyright infringement? My blog has
    a lot of exclusive content I’ve either authored myself or outsourced but it
    appears a lot of it is popping it up all over the internet without my authorization. Do you know
    any solutions to help stop content from being ripped off?
    I’d truly appreciate it.

  164. Hello! I know this is kinda off topic however I’d figured I’d ask.
    Would you be interested in trading links or maybe
    guest writing a blog article or vice-versa? My website goes
    over a lot of the same topics as yours and I feel we could greatly benefit from each other.
    If you’re interested feel free to shoot me an e-mail. I look forward to hearing from you!

    Terrific blog by the way!

  165. After looking over a few of the blog posts on your website, I really appreciate your way of blogging.
    I added it to my bookmark site list and will be checking back in the near
    future. Please check out my web site as well and let me know your opinion.

  166. I’m really enjoying the design and layout of your site.
    It’s a very easy on the eyes which makes it much more pleasant for
    me to come here and visit more often. Did you hire out
    a designer to create your theme? Excellent work!

  167. Hello just wanted to give you a quick heads up.
    The text in your post seem to be running off the screen in Opera.
    I’m not sure if this is a format issue or something to do with web browser compatibility but I
    figured I’d post to let you know. The layout look
    great though! Hope you get the problem fixed soon. Many thanks

  168. Thank you, I’ve recently been looking for info approximately this topic for a while
    and yours is the greatest I have found out so far.
    However, what concerning the bottom line? Are you certain about the
    supply?

  169. Hmm is anyone else experiencing problems with the pictures on this blog
    loading? I’m trying to find out if its a problem on my end
    or if it’s the blog. Any responses would be greatly appreciated.

  170. Hmm is anyone else having problems with the pictures on this
    blog loading? I’m trying to find out if its a problem on my end
    or if it’s the blog. Any suggestions would be greatly appreciated.

  171. Definitely believe that which you stated. Your favorite reason appeared
    to be on the internet the easiest thing to be aware of. I say to you,
    I certainly get annoyed while people consider worries that they just don’t
    know about. You managed to hit the nail upon the top and defined out the whole thing without having side-effects ,
    people could take a signal. Will probably be back
    to get more. Thanks

  172. Heya! I know this is somewhat off-topic however I had to ask.
    Does operating a well-established website such as yours take
    a large amount of work? I am brand new to blogging but I
    do write in my diary every day. I’d like to start a blog so I can share my own experience and feelings online.
    Please let me know if you have any kind of ideas or tips for new aspiring blog owners.
    Appreciate it!

Leave a Reply

Your email address will not be published. Required fields are marked *