Monday, March 5, 2012

Why critics of Rails have it all wrong (and Ruby's bright multicore future)

Edit: Contrary to what I said here, José Valim is not stepping down from Rails core, he is merely on sabbatical. My bad.

Lately I've been getting the feeling the Ruby community has gotten a bit emo. The enthusiasm surrounding how easy Ruby makes it to write clean, concise, well-tested web applications quickly is fading. Rails has become merely a day job for many. Whatever hype surrounded Rails at its inception has died down into people who are just getting work done.

Meanwhile, Node.js is the new hotness, and many in the Node community have sought to build Node up by bringing Ruby and Rails down. I know that once upon a time Ruby enthusiasts were doing this sort of thing to Java. However, the tables have turned, and where Ruby used to be the mudslinging hype-monkey, it's now become the whipping boy and Node.js the new provocateur.

The sad thing is many of these people are former or current Rubyists who have taken a liking to Node and build it up by spreading blatant untruths about Ruby. I won't go as far as to call them liars, but at the very least, they are extremely misinformed, ignorant of the state of the Ruby ecosystem, and pushing their own agendas.

Jeremy Ashkenas, the creator of CoffeeScript, recently trashed Rails 3 and claimed "Node.js won":


The idea that Rails 3 was a major step backward was recently reiterated by both Giles Bowkett and Matt Aimonetti. Both of them painted building ActionController::Metal applications as some sort of byzantine, impossible task which can only be accomplished by a Rails core member. Are people actually building lightweight Rails applications using the newfound modularity of Rails 3?


Jose Valim, (now former) Rails core member, published a small, simple gist illustrating how to build barebones apps on ActionController::Metal (one of the most forked gists I've ever seen) which is further documented in his book Crafting Rails Applications. In just 50 lines of code you can strip Rails down to its core, making it ideal for use in modern client-heavy HTML5 applications. The funny thing about this gist is that while the idea of a 50 line Rails app seems pretty impressive, the basis of that gist is what Rails 3 puts into your config/boot.rb, environment.rb, and application.rb, just combined into a single file. Did I just blow your mind? Sadly, all the (in my opinion completely undeserved) bad press seems to have made Jose emo as well, and he has stepped down from Rails to pursue his Elixir language.

ActionController::Metal-based applications (along with apps written in Clojure) were the basis of our backend at Strobe, where we sought to ease the pains of people building modern client-heavy HTML5/JS applications with frameworks including SproutCore/Ember, Backbone, and Spine. ActionController::Metal provided a great, fully-featured, mature, and modular platform for us to build applications on top of, and Strobe's ActionController::Metal stack for client-heavy HTML5/JS applications is available on Github. The apps we built with the Strobe ActionController::Metal stack talked only JSON and our frontend was an HTML5/JS application written with SproutCore.

Before Strobe, I worked at a company building rich HTML/JS applications for digital television. Our backend was written in Rails. Our frontends were Flash and HTML/JS applications, the latter of which were single-page client-heavy HTML/JS apps that were packaged in .zip files and installed onto digital televisions and set top boxes, a sort of weird hybrid of web technologies and installable applications. Our Rails application didn't have any views, but provided only a JSON API for the HTML/JS frontend to consume.

Rails was great for this, because it provided the sort of high level abstractions we needed in order to be productive, ensure our application was well-tested, and above all else provided the necessary foundation for clean, maintainable code. I was doing this in 2008, and even then this was already considered old hat in the Rails community. In case you're not paying attention, that's one year before Node even existed.

Modern HTML5/JS apps depend on beautiful, consistent RESTful JSON APIs. This is a great way to develop rich interactive applications, because it separates the concerns of what the backend business logic is doing from the view layer entirely. Separate teams, each specialized in their role, can develop the frontend and backend independently, the frontend people concerned with creating a great user experience, and the backend people concerned with building a great API the frontend application can consume.

Rails is great for JSON APIs.

And yet this meme persists, that somehow Rails is actually bad at JSON APIs. Those who propagate this meme insist that Rails has lost its edge, and that only Node understands the needs of these sorts of modern client-heavy web applications. Giles recently attempted to argue this position:


Giles recently blogged about this issue at length. Let's look at what he has to say about ActionController::Metal and the new level of modularity and clean design that Rails 3 brings to the table:


So Jose wrote a great book about the incredible power of Rails 3's new modular APIs... but... but... but what?

WARD CUNNINGHAM BITCHES. TWEETS > BOOKS. NODE WINS. QED.

Hurrrrrrrr? Ward Cunningham is a cool guy and his concept of a Wiki was a transformative technology for the web, but what the fuck does that have to do with Rails 3's new modular APIs or Jose's book? I think that's what people in logical debate circles call a "non-sequitur".

Perhaps there's still a cogent argument to be had here. Let's dig deeper:


Okay, so the problem is there's not a damn simple way to do websockets. OH WAIT, THERE IS:


Cramp is an awesome, easy-to-use websockets/server-sent events framework (with socket.io support) which runs on Rainbows or Thin, and Thin is a great web server. According to my benchmarks it's approximately the same speed as Node's web server:

Web Server            Throughput  Latency
----------            ----------  -------
Thin    (1.2.11)      8747 reqs/s (7.3 ms/req)
Node.js (0.6.5)       9023 reqs/s (7.1 ms/req)
Yes folks, Node isn't significantly faster than Ruby at web server performance. They're about the same.

Giles also bemoans bundler, because typing "bundle exec" represents ceremony, and using any of the myriad solutions to avoid typing "bundle exec", such as bundler binstubs or rvm gemsets, represents configuration which violates the Rails mantra of "convention over configuration", and how npm is that much easier. I'm sure we would all love to not have to add a one line .rvmrc file to each project to avoid typing "bundle exec", but uhh Giles, bro, mountain out of a molehill much?

Meanwhile, let's check out how convention over configuration is going in the JavaScript world:


But enough about Giles... what kinds of awesome, modern HTML5 applications are people using Rails to build?

I think one of the best examples of this sort of application is Travis CI. Travis is an open source distributed build system with an Ember-based frontend and a Rails backend. Travis's interface shows, in real time, the state of all builds across the entire (distributed) system, allows you to interactively explore the history, see the distributed build matrix completing jobs in realtime, and even have it stream the console output of builds in progress directly to your browser as they complete. It's an amazing, modern client-heavy HTML5/JS application, and it's built on Rails.

Who else is using Ruby/Rails for their frontend? Oh, just Twitter, LivingSocial, Groupon, Heroku, EngineYard, Github, Square, Zendesk, Shopify, Yammer, Braintree, Boundary, Stripe, Parse, Simple, and of course let's not forget 37signals. Rails is the technology underlying the frontend web stack of many huge businesses. Many of these companies have client-heavy HTML5/JS applications which consume a JSON API coming out of Rails. Many of them have APIs that are routinely cited as archetypical RESTful JSON APIs. Many of them have top notch engineering teams that choose the best tools for the job and use many languages for many different tasks. Many of them were founded "post-Node" and had the opportunity to choose Node as their frontend web technology, and while they may use Node in some capacity, their main consumer-facing sites are written with Rails.

Node is three years old now. Where are the Node.js success stories? Who's built a brand on top of Node?  Nodejitsu? Hubot? Is Node anything more than a pyramid scheme or a platform for Campfire bots? Where Rails selling points eschewed performance and instead focused on clear code, rapid development, extensive testing, and quick time-to-market, Node's selling points seem to universally revolve around its insanely fast, destroy the internet fast performance (benchmarks not provided). Meanwhile code quality is de-emphasized and large Node programs degrade into incomprehensible, byzantine structures of callbacks and flow-control libraries, instead of being written in sequential code, you know, the code you can read:

 

What about Ruby in general? What advancements in the Ruby ecosystem are worth getting excited about?

JRuby is maturing into a high-performance Ruby implementation which taps the JVM's advanced features including the HotSpot compiler, multiple pluggable garbage collectors, and parallel multithreading which makes it suitable for multicore applications. One thing I think sets JRuby apart is that it's the most mature language on the JVM which didn't start there. Other projects to implement non-JVM languages on top of the JVM, such as Rhino and Jython, have languished, while JRuby keeps going strong.

The most exciting development in JRuby is Java 7's new InvokeDynamic feature. The Java Virtual Machine was originally designed for the statically-typed Java language, but has its roots in dynamic languages, namely Smalltalk. With InvokeDynamic, the JVM has come full circle and now natively supports dynamic languages like Ruby. InvokeDynamic provides the necessary information to the JVM's HotSpot compiler to generate clean native code whenever Ruby methods are called, in addition to many other potential optimizations. So how much faster will InvokeDynamic make Ruby?


Rubinius, a clean-room Ruby virtual machine based on the Smalltalk-80 architecture, is also a very exciting prospect for the Ruby community as it matures and reaches production quality. It features an LLVM-based JIT compiler, parallel thread execution, and advanced garbage collection, also making it suitable for multicore applications. Beyond being an awesome Ruby implementation, Rubinius has evolved into a true polyglot platform and now features multiple Rubinius-specific language implementations including Fancy and Atomy.

MacRuby also eliminated the GIL from their implementation and now supports parallel thread execution along with an LLVM-based JIT compiler.

There are no less than three Ruby implementations which now support thread-level parallelism and thus multicore CPUs. This is especially relevant in a time when computing is undergoing a sort of phase transition from single-threaded sequential applications to massively multithreaded concurrent applications and distributed systems made out of these multithreaded applications.

It wasn't too long ago that having even four CPU cores in your home computer seemed like a lot, and now 16-core commodity AMD CPUs are available. The future is multicore, and if your programming language doesn't have a multicore strategy, its usefulness is vanishing. Following Moore's Law, the number of cores in a CPU is set to explode exponentially. Is your programming language prepared?

Thanks to JRuby and Rubinius, Ruby can take advantage of multicore CPUs. This still leaves the small matter that multithreaded programming is, uhh, hard. Fortunately I have some ideas about that.

Celluloid is an actor-based concurrent object system that tries to pick up on the concurrent object research that was hot in the mid-90's but died shortly after the web gained popularity. In the '90s concurrent objects were ahead of their time, but with the advent of massively multicore CPUs I believe it's an area of computer science research that's worth reviving.

Celluloid packages up Ruby's core concurrency features into a simple, easy-to-use package that doesn't require any modifications to the language. Where many functional languages solve the issues surrounding concurrency with immutable state, Celluloid solves it with encapsulation (more information is available on the Celluloid github page).

Celluloid takes advantage of many of the features of Ruby, including parallel threads, fibers (coroutines), method_missing (proxy objects), and duck typing. There aren't many other languages with this particular mix of features. Python probably comes the closest, aside from multicore execution due to its GIL. Jython supports parallel thread execution thanks to the JVM but seems abandoned. For what it's worth, Python once had a concurrent object system quite similar to Celluloid back in the '90s called ATOM, unfortunately the source code has been lost.

Ruby is by far the best language available today to implement a system like Celluloid, and that alone makes me excited to be a Rubyist. Where Node.js gives you a hammer, the single-threaded event loop, Celluloid gives you a large toolbox and provides a singular framework of interoperable components which can be used to build arbitrary hybrids of concurrent multithreaded applications, event-based nonblocking applications (that are callback-free!), and distributed systems.

Ruby is a language which can survive the massively multicore future. Whether Node will stick around remains to be seen.

536 comments:

  1. Great write up.

    Who's built a brand on top of Node? is truly the only thing that matters in the end.

    ReplyDelete
  2. Great post. I didn't know about cramp before.

    ReplyDelete
  3. I think this is just the ebbs and flows of our fashion driven industry. If you substitute "Perl" for "Ruby" and "Node.js" for "Ruby" in first three paragraphs, this echoes much of what was going on 5 years ago in those communities. Meanwhile the Perl community is still here and flourishing as Perl approaches its 25th year.

    ReplyDelete
  4. Excelent write-up! This exodus of Rubysts to node.js is actually a good thing. Now that the hype is leaving Ruby's side it will be easier for it to grow and mature as a language and platform.

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

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

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

    ReplyDelete
  8. Hey, I love Ruby but I have something to show you.

    Google for: Erlang concurrency

    Well, you can also search for scala concurrency or smalltalk concurrency.

    Ruby is not the only language with actors concurrency out there.

    ReplyDelete
  9. Yeah, I'm familiar with Erlang: http://www.unlimitednovelty.com/search/label/erlang

    ReplyDelete
  10. Caio, he's didn't say Ruby was the only whom implements Actor concurrency.

    ReplyDelete
  11. FYI Jython is not abandoned: http://fwierzbicki.blogspot.com/2012/03/adconion-to-fund-jython-27.html

    JRuby has certainly had much more funding over the past few years, though

    ReplyDelete
  12. Hey great post thanks. I use rails and node.js both in my personal projects and at my day job. Frankly I don't understand why people seem to think you can only like one or the other. They work well together and compliment each other very nicely. Node makes things like websockets and asynchronous network programming pleasant, but I would not want to write a full web site in it. Rails solves that problem so much better.

    Just my 2 cents.

    ReplyDelete
  13. Torquebox (Rack on JBoss) also supports web sockets.

    ReplyDelete
  14. Hi there I can probably understand half of what you wrote but I can't agree more that writing apps in rails or ruby is a joy , I have no cs background at all coming from group math , I stil don't know what public void stands for but ruby really cuts down on all that code noise when learning programming. And writing everything in JavaScript or simply writing anything in one language is against my personal mantra of horses for courses. Cheers !

    ReplyDelete
  15. Contrary to the title, on closer reading,

    the author means that while Ruby is surging, the rest of Rails, the framework itself, is dead.

    ReplyDelete
  16. Contrary to the title, on closer reading,

    the author means that while Ruby is surging, the rest of Rails, the framework itself, is dead.

    ReplyDelete
  17. Excellent Working Dear Friend Nice Information Share all over the world.God Bless You..
    bicycle shops near london olympic village
    used bicycle shops in london

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

    ReplyDelete
  19. so now it's not worth to learn rails and use rails now?

    ReplyDelete
  20. I'm a Rails developer and god knows I love the framework and the underlying technologies so I get where you're coming from and getting at, but Rails DEFINITELY doesn't make it easy to do websockets.

    Cramp is nice and all, but it's not Rails now is it.

    Look at any article by either Mike Perham or Ilya Grigorik from 2/3 years ago and it's suddenly obvious has a long way to go in the asynchronous/sockets department. All of which turned out to become ubiquitous in today's web programming.

    So yeah, Rails is awesome is MANY ways, but it still has a way to go in some others.

    ReplyDelete
  21. Also you forgot Rubymotion - write iOS apps in Ruby. The ecosystem is growing at a good pace. It's moving towards being a very productive way of making apps :)

    ReplyDelete
  22. Kind hard to "forget" something that was released months after this post was made.

    ReplyDelete
  23. Very well put. While I think a person could build a brand on top of any sufficiently mature system, Ruby is one of the few out there that have people constantly pushing the envelope.

    ReplyDelete
  24. Nice writing. But still - don't take it too personal. In life there is hardly pure black and pure white. Usually it's somewhere in between them. For example I would try Node for concurrent and cutting edge stuff but as said from others I wouldn't (yet) build a real big web application on top of it.

    ReplyDelete
  25. Your claim: "JRuby is maturing into a high-performance Ruby implementation which taps the JVM's advanced features including the HotSpot compiler, multiple pluggable garbage collectors, and parallel multithreading which makes it suitable for multicore applications."

    What the benchmarks say: JRuby running on a quad-core machine is no faster than Ruby (which can only run on 1 core)... and uses 30x the memory -- http://shootout.alioth.debian.org/u64q/jruby.php

    ReplyDelete
  26. "The future is multicore, and if your programming language doesn't have a multicore strategy, its usefulness is vanishing."

    Absolutely! And where does Ruby fit into this, you say?

    "Thanks to JRuby and Rubinius, Ruby can take advantage of multicore CPUs."

    Re JRuby: as pointed out in my previous comment, JRuby is no faster than Ruby, even when running on 4 cores instead of 1. Not a good sign.

    Re Rubinius: on its roadmap (http://rubini.us/roadmap), the maintainers say they plan to support Ruby 1.9 with the next major release. That's right -- Rubinius doesn't even support 1.9, even though 1.9.0 was released almost 5 years ago (December 2007).

    "That's OK," you may think, "they probably iterate quickly." Well, their latest release of any kind, no matter how minor, is over a year old. Their last major release is many years old.

    The future isn't looking so bright for Ruby.

    (My fav scripting language, Python, also has its chances at being relevant in a multicore world, but is also in trouble. I don't use Node.js and will continue using Go for my multicore needs, at least for a while. Python's JIT, PyPy, is in very active development -- much further along than Rubinius, AFAICT -- but that doesn't solve the multicore issue! PyPy is ~17x faster than CPython... but the GIL remains.)

    ReplyDelete
  27. I was reading up on Rubinius and came across your great post. Excellent read.

    ReplyDelete
  28. Tổng thể mẫu mã nhà phố nhìn từ bên bên cạnh, sở hữu màu trắng mau nha cap 4 dep chủ đạo khiến vượt trội ánh đèn vàng và những điểm nhấn màu đen xen kẽ tạo cảm giác đơn thuần, mộc mạc. thiết kế tuy đơn thuần nhưng mang đến dòng nhìn thanh lịch, tinh tế và ấm cúng. Phòng bếp và nhà ăn trong loại xây dựng nhà phố này được thông sở hữu nhau và vẫn đảm bảo được thể tích, quầy bar cạnh bếp tạo cảm giác thân mật ấm cúng cho bữa ăn gia đình. Phía bên này của phòng ăn nha dep là dung tích phòng khách đơn giản với lối bề ngoài mở tận dụng tuyệt đối ánh sáng ngẫu nhiên. Dung tích tuy hạn chế về khoảng trống nhưng thời trang thi công nhà phố này vẫn tạo cho ta cảm giác thông thoáng mang những điểm nhấn tinh tế. Điểm nhấn vượt trội nhất là tấm thảm độc đáo mang thời trang hiện đại và siêu hài hòa trong bối cảnh bề ngoài thi công nhà phố độc đáo này. 1 không gian sinh hoạt, tiếp khách khác của ngôi nhà với thảm gam màu trung tính làm nổi bật nội thất thi cong noi that chung cu và kết hợp dung tích. Cầu thang được đơn thuần hóa nhờ việc tiêu dùng gỗ ngẫu nhiên mang đến thể tích mộc mạc, đơn giản và tiện lợi. Hẳn đây là căn phòng dành riêng cho những cuộc gặp mặt thân mật hay các bộ phim tình cảm sướt mướt.!!!

    ReplyDelete
  29. I am deeply attracted by your post. It is really a nice and informative one. I will recommend it to my friends.
    eCommerce Service Providers

    ReplyDelete
  30. I appreciate this work amazing post for us I like it. I must say we should have an online discussion on this. We also share some information about our business
    eCommerce Inventory Management

    ReplyDelete
  31. Thanks for sharing this awesome post here
    Dell Tech Support

    ReplyDelete

  32. This Post has some good quality content which is a treat to read out.
    Gmail customer support

    ReplyDelete
  33. thanks for sharing this post with us.
    Tenda Router Support Number

    ReplyDelete
  34. Female Escorts Generations would submit to not understanding the magnificence and fantastic thing about this girl. Unprotected by the creatures that should exist in her home. She was unable to provide for them, creature or Native American.
    Female Escorts,High Class Call Girls,Escorts Girls,Escorts ,Escorts near me
    Female Escorts




    ReplyDelete
  35. Female Escorts My next appointment with the Urologist was scheduled for the subsequent week. Once more I went through the routines of the waiting space, typically reading, generally simply watching the daily activities of the receptionists, however incessantly waiting. This routine would be broken every therefore often with the looks of Dr Stapleton escorting his last patient back to the receptionists and calling the next.
    Female Escorts


    ReplyDelete
  36. Female Escorts:Luckily, the barter system is also welcome, thus some families barter and exchange favors. Rather than raise cash, they will realize limousine services, rental halls, bakeries, food and drink services to participate among their poor and middle-category colleagues and friends.
    Female Escorts,High Class Call Girls,Escorts Girls,Escorts ,Escorts near me
    Female Escorts

    ReplyDelete
  37. I really want to read more your posts. They are so useful that I can use them to solve issues. I hope you will upload articles frequently. I like them very much. They are pieces of advice for me.

    Acid Eye Red X2T True Wireless Earphone

    ReplyDelete
  38. بالرياض

    فني تركيب اثاث ايكيا بالرياضيقوم الفني بتركيب جميع الغرف الصيني الحديثة لخبرتة العالية والكبيرة في مجال تركيب الغرف الصيني فأ>ا كنت تريد شركة موثوق بها فأليك شؤكة خبراء المملكة لتركيب اثاث ايكيا بالرياض فنحن لدينا العديد من الخدمات المتنوعة التي تفيد عملائنا الكرام لاننا نسعي دائما الي التطوير وتحقيق كل ما يسعي اليه عملائنا الكرام عزيزي العميل اذا كنت في اي مكان بالرياض وتريد شركة تركيب عفش بالرياضبمنزلك او مكتبك فلديك خبراء المملكة من افضل الشركات التي تقوم بتركيب شتي انواع الاثاث الايكيا بالرياض
    طريقة تركيب اثاث ايكيا
    تعد شركتنا من الشركات العريقة التي لها خبرة كبيرة والتي تستخدم احدث الوسائل التكنولوجية الحديثة والمتطورة بمنتهي الدقة والاتقان بأسلوب علمي متطور وحديث في مجال تركيب الاثاث الايكيا بأرخص الاسعار التي لا تقبل المنافسة بين شركات الاخري فأسعارنا في متناول الجميع وليس لها مثيل علي الاطلاق
    فني تركيب ستائر بالرياض


    ReplyDelete
  39. Thanks for sharing, nice post! Post really provice useful information!

    Giaonhan247 chuyên dịch vụ mua hàng trên web 1688 tiếng việt cũng như chia sẻ các web mua hàng giảm giá và tổng hợp các trang web bán hàng online uy tín uy tín và giải đáp aliexpress là gì mua hàng như thế nào.

    ReplyDelete
  40. Your very own commitment to getting the message throughout came to be rather powerful and have consistently enabled employees just like me to arrive at their desired goals
    AngularJs Training in Bangalore
    Angularjs Online Training

    ReplyDelete
  41. Nice blog thanks for sharing such useful information.
    lawyers Sydney CBD

    ReplyDelete
  42. Great Article...Thanks for sharing the best information.It was so good to read and useful to improve my knowledge as updated one.

    Android Training

    ReplyDelete
  43. Nice blog, thanks for sharing such useful information.
    engagement rings Sydney

    ReplyDelete
  44. Very Interesting and wonderful information keep sharing this post kindly check
    track your order

    ReplyDelete
  45. See more at the link: Fildo

    ReplyDelete
  46. This is most informative and also this post most user friendly and super navigation to all posts... Thank you so much for giving this information to me.. 
    python course in pune
    python course in chennai
    python course in Bangalore

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

    ReplyDelete
  48. Thanks for your great and helpful presentation I like your good service.I always appreciate your post. That is very interesting I love reading and I am always searching for informative information like this.
    Well written article. Thank You Sharing with Us android quiz questions and answers | android code best practices | android development for beginners | future of android development 2018 | android device manager location history

    ReplyDelete
  49. The information and facts talked about within the post are a few of the most effective obtainable. Visit us: https://games.lol/racing/

    ReplyDelete
  50. Thank you for taking the time and sharing this information with us. It was indeed very helpful and insightful while being straight forward and to the point.
    RPA Training in Chennai
    Robotics Process Automation Training in Chennai
    RPA courses in Chennai
    Robotic Process Automation Training
    RPA course
    Robotic Process Automation Certification

    ReplyDelete

  51. Greetings. I know this is somewhat off-topic, but I was wondering if you knew where I could get a captcha plugin for my comment form? I’m using the same blog platform like yours, and I’m having difficulty finding one? Thanks a lot.
    AWS Training in Pune | Best Amazon Web Services Training in Pune


    Amazon Web Services Training in OMR , Chennai | Best AWS Training in OMR,Chennai


    AWS Training in Chennai |Best Amazon Web Services Training in Chennai

    ReplyDelete
  52. I love the blog. Great post. It is very true, people must learn how to learn before they can learn. lol i know it sounds funny but its very true. . .
    angularjs Training in bangalore

    angularjs Training in bangalore

    angularjs Training in chennai

    automation anywhere online Training

    angularjs interview questions and answers

    ReplyDelete
  53. Thanks for sharing this unique information with us.
    - Learn Digital Academy

    ReplyDelete
  54. This is a good post. This post give truly quality information. I’m definitely going to look into it. Really very useful tips are provided here. thank you so much. Keep up the good works.
    python Training in Bangalore | Python Training institute in Bangalore

    Data Science training in Chennai | Data Science Training Institute in Chennai

    ReplyDelete
  55. Dr. Vinod Raina is one of the well-known sex specialist doctors in Delhi, NCR, and India.
    Top Sexologist Online Dr Vinod

    ReplyDelete
  56. Your blog is interesting for readers.you have developed your blog informations with such a wonderful ideas and which is very much

    useful for the readers.i enjoyed your post and i need some more articles also please update soon.
    Cloud Computing Courses
    Cloud computing Courses in Velachery
    Cloud Computing Training in Adyar
    Hadoop Training in Chennai
    Selenium Training in Chennai
    JAVA Training in Chennai

    ReplyDelete
  57. You need to watch this in cinema. Acting, action and youjizz was GOLD! Ending was great. Soundwave has an actual G1 voice.

    ReplyDelete

  58. Nice information.. Thanks for sharing this blog. see my website also
    .. VIEW MORE:- Website Designing Company in Delhi

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

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

    ReplyDelete
  61. Nice blog..! I really loved reading through this article. Thanks for sharing such a
    amazing post with us and keep blogging... Best Blue prism Training Institute in Chennai|RPA training in Chennai

    ReplyDelete
  62. Thanks for sharing such an amazing blog. It is really helpful for me and I get my lots of solution with this blog. Thank you for sharing valuable information. Nice post. I enjoyed reading this post…
    Painting Services in Delhi

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

    ReplyDelete
  64. I think things like this are really interesting. I absolutely love to find unique places like this. It really looks super creepy though!!
    machine learning course fees in chennai
    machine learning training center in chennai
    machine learning with python course in chennai

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

    ReplyDelete
  66. Good job in presenting the correct content with the clear explanation. The content looks real with valid information. Good Work

    DevOps is currently a popular model currently organizations all over the world moving towards to it. Your post gave a clear idea about knowing the DevOps model and its importance.

    Good to learn about DevOps at this time.


    devops training in chennai | devops training in chennai with placement | devops training in chennai omr | devops training in velachery | devops training in chennai tambaram | devops institutes in chennai | devops certification in chennai | trending technologies list 2018 | Top 100 DevOps Interview Questions and Answers

    ReplyDelete
  67. Ah,so beautiful and wonderful post!An opportunity to read a fantastic and imaginary blogs.It gives me lots of pleasure and interest.Thanks for sharing.
    Find the Interior Designers in Madhurawada

    ReplyDelete
  68. Thanks for such a great article here. I was searching for something like this for quite a long time and at last, I’ve found it on your blog. It was definitely interesting for me to read about their market situation nowadays.angularjs best training center in chennai | angularjs training in velachery | angularjs training in chennai | best angularjs training institute in chennai

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

    ReplyDelete
  70. I have been a keen follower of your website.
    recently I came across this topic and after reading the whole article I am amazed that how well you have written it.
    All Latest Punjabi Song with Music Videos and Quotes - Here is the New Punjabi Songs list 2019 containing Best mp3 song of 2019

    ReplyDelete

  71. Its a good post and keep posting good article.its very interesting to read.


    Best Blockchain Training Institute in Chennai

    ReplyDelete
  72. This was really informative and valuable information. Visit for the creative Website Designing and Development Services by Ogen Info system.
    Website Designing Company in Delhi

    ReplyDelete
  73. I want to to thank you for this excellent read!! I certainly enjoyed every little bit of it. I have got you bookmarked to check out new stuff you post…

    Happy Easter Images 2019
    Happy Easter Coloring Pages 2019 Free Download
    Happy Easter Quotes 2019 And Wishes
    Happy Easter Poems 2019 And Quotes
    Happy Easte Wishes 2019 For Status

    ReplyDelete
  74. Visit for the best Logistics and Freight Forwarders Companies in Delhi at Y & H Cargo India.
    Freight Forwarders in Delhi

    ReplyDelete
  75. Spin Gurus is provided you the best service of Music Production.
    Audio Engineering Courses

    ReplyDelete
  76. Nice Blog. If you Need best Mutual Fund in India MutualFundWala is best for you.
    Mutual Funds India

    ReplyDelete
  77. Munnar is a motley canvas of sloping lush green tea plantations, gushing streams by the hillsides, and winding undulating paths. And there are some absolutely delightful activities to absorb the overwhelming beauty of the largest tea growing region of peninsular India.

    best places in munnar to visit

    ReplyDelete
  78. I have been a keen follower of your website.
    recently I came across this topic and after reading the whole article I am amazed that how well you have written it.
    All Latest new latest punjabi song download with free download punjabi songs and top punjabi song download

    ReplyDelete
  79. Your blog was really impressive and meaningful. Thank you so much for sharing with us.
    R Training Institute in Chennai | R Programming Training in Chennai

    ReplyDelete
  80. Migrate a WordPress site webpage to another host is very pressure full due to lacking facilitating information or dread of harming inward piece of our site.

    ReplyDelete
  81. Outstanding blog thanks for sharing such wonderful blog with us ,after long time came across such knowlegeble blog. keep sharing such informative blog with us.

    Check out : hadoop training in chennai cost
    hadoop certification training in chennai
    big data hadoop course in chennai with placement
    big data certification in chennai

    ReplyDelete
  82. Amazing blog, Visit Y&H Cargo India for Shipping and Freight Forwarding Services.
    Shipping Company in India

    ReplyDelete
  83. Thanks for this informative blog sharing with us, Visit Mutual Fund Wala to get Investment Schemes and Mutual Fund Advisors.
    Mutual Fund Agent

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

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

    hadoop training in Chennai
    big data training in chennai
    big data hadoop training in chennai
    big data training and placement in chennai

    ReplyDelete

  86. شركة عزل خزانات بالمدينة المنورة
    أمر نظافة الخزان من الأمور المتعلقة بشكل مباشر بصحة الفرد سواء كان كبير أو صغير فالخزانات من الأشياء الأساسية داخل الشركات والمستشفيات وكذلك المنازل لذلك تهتم شركة عزل خزانات بالمدينة المنورة بنظافة وعزل الخزان من الداخل في المقام الأول وذلك حرصا على صحة عملائها الكرام و حرصا منها على تقديم أفضل مستويات الخدمة التي يمكن أن تنافس بها في الأسواق العالمية وتعتمد شركة عزل خزانات بالمدينة المنورة على مجموعة من المواد العازلة المميزة للغاية والأمنه تماما على صحة الفرد و التي تمنع التسريب سواء كان داخلي أو خارجي فالشركة تقوم بعزل الخزان داخليا وخارجيا بشكل كامل وفي خلال وقت قصير و يتم متابعة حالة الخزان مع العملاء

    ReplyDelete
  87. Keto fit pro sthough you were lifting a. If you add a kiss or a raspberry to their tummy they will enjoy it even more. Eating right is a great idea for everyone. Eating clean vegetables and fruits and clean vegetables and getting the kids to eat better by having them taste just a little of meals they aren't sure of will help you
    https://newsletterforhealth.com/keto-fit-pro/

    ReplyDelete
  88. k shred '"examined the connection between either dairy or calcium mineral intake and the changes that occur when you do eat milk items or take items. The effects were over-whelming. Out of the studies the following was recorded: - 41 studies showed no weight - 5 showed a correlation with bodyweight loss
    https://newsletterforhealth.com/k-shred/

    ReplyDelete
  89. slim quick ketoscales say you haven't. Stick with it.Here are extra techniques for you to get rid of fat fast!1) Decrease (Cut what you eat strategy to ¾ of your current serving size)Slowly decrease what you eat strategy. The more meals you take in, the harder it is to lessen those extra fat. For starters, just reduce frequent a 7 times but the
    https://newsletterforhealth.com/slim-quick-keto

    ReplyDelete
  90. Thanks for sharing such awesome article. In my views, the points that you had mentioned above are more than enough and will help me a lot.
    Find the Interior Designers in Vizag

    ReplyDelete
  91. I’m waiting for your next post, because I got lots of valuable information by this. Get Vinyl Signage Printing and Commercial Vehicle Wrap by Kalakutir Pvt Ltd.
    Commercial Vehicle Wrap

    ReplyDelete
  92. If you have any query or facing any error while using QuickBooks. Call us at our Toll-Free QuickBooks Customer Care Number.

    ReplyDelete
  93. Attend the Best Python training Courses in Bangalore From ExcelR. Practical PythonTraining Sessions with Assured Placement From Excelr Solutions.

    python training in bangalore

    ReplyDelete
  94. Excellent website you have here but I was wondering if you knew of any user discussion forums that cover the same topics discussed in this article?
    I’d really love to be a part of online community where I can get advice from
    other knowledgeable people that share the same interest. If you have any recommendations, please let me know. Thank you!
    samsung contact
    service center samsung

    ReplyDelete
  95. Are your preparing for government examination? Effective preparation is important to be successful, make use of our TNPSC Current affairs to prepare for your TNPSC & other government examination.

    ReplyDelete
  96. Agar aap apne husband se pareshan hai or uss se door rhana cahati hai toh aap Talaq lene ki dua ko kijiye aap pati aapko khud ba khud talaq de dega

    ReplyDelete
  97. MovieBox APK is a great App for your Entertainment. MovieBox app will lighten up your Experience of watching Movies and TV Serials. MovieBox is packed with thousands of Movies from
    https://gadgetsright.com/moviebox-apk-latest-version-free-download-android-ios-2019/

    ReplyDelete
  98. This is very interesting article thanx for your knowledge sharing.this is my website is mechanical Engineering related and one of best site .i hope you are like my website .one vista and plzz checkout my site thank you, sir.
    mechanical engineering

    ReplyDelete
  99. This is very good piece of work. Please keep it Up.
    Periodontist The woodlands

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

    ReplyDelete
  101. QuickBooks missing name list problem is a common error that the user may face while trying to open a Desktop Company file. To solve the error contact QuickBooks Tech Support Number 1-877-263-2742.
    QuickBooks missing name list problem | QuickBooks accountant copy | QuickBooks Error 83

    ReplyDelete
  102. Really nice post. provided a helpful information. I hope that you will post more updates like this

    It was really a nice post and I was really impressed by reading this keep updating
    Tableau Training

    Android App development Course

    Data Science Certification

    Dot net Course

    Ios Development Course Online

    Informatica Training

    ReplyDelete
  103. Thepropsolutions is known as the best real estate company in South Delhi. We provide the apartments, Kothi, bungalow, Farm house, Plots, office and commercial lands for sale and rent in South Delhi. If you're looking for a reliable real estate agent in South Delhi or You are looking 2 BHK,3 BHK Flats in South Delhi, contact Thepropsolutions today for an honest, fast and efficient service. We have been serving the Delhi, Gurgaon, Noida, and Faridabad are for over 15 years.

    ReplyDelete
  104. Amazon customer service number
    www.amazoncustomercarephonenumber.com

    ReplyDelete
  105. Thank you for providing the valuable information …

    If you want to connect with AI (Artificial Intelligence) World

    as like

    Python Training Certification

    related more information then meet on EmergenTeck Training Institute .

    Thank you.!

    ReplyDelete
  106. Nice Post thanks for the information, good information & very helpful for others. For more information about Online Shopping Lucky Winner, Flipkart, HomeShop18, Shopping Lucky, Draw, Contest, Winner, Prize, Result, 2018 - 2019 Click Here to Read More

    ReplyDelete
  107. اگر با دادگستری سر و کار داشته باشید قطعا از پیچیدگی قوانین تصرف عدوانی و خلع ید و دردسر های آن ها شنیده اید.البته لازم به نگرانی نیست مستر دادیار پشتیبان شماست. افراد سود جو همیشه در کمین بهترین فرصت برای بدست آوردن اموال و دارایی هایی هستند که می توانند با کمترین دردسر و بدون زحمت صاحب آن شوند. حتی اگر متعلق به شخص دیگری باشد.

    همین امر اشخاص و صاحبان مال را به دردسر می اندازد. چرا که اگر متصرف نسبت به قوانین هم آگاهی خوب و دقیقی داشته باشد، قطعا راه و نقطه نفوذی را در قوانین دیده است که دست به همچین کاری زده است. البته این افراد سود جو بیشتر از آن که دست به اموال و دارایی های اشخاص بزنند، نسبت به اموال و اراضی ملی دست درازی می کنند. مثل زمین خواری هایی که امروزه شاهد آن ها هستیم.
    تصرف عدوانی چیست

    مفهوم و معنای تصرف عدوانی چیست؟ تصرف عدوانی به معنای دخل و تصرف اموال منقول و یا غیر منقولی که در استیلاء (تصرف، تعلق، مالک) شخص دیگری قرار دارد. در این مواقع شخص مالک حقیقی باید، اعلام دعوی کند و از هر مدرک و سندی که دال بر مالکیت اوست استفاده کند تا دادگاه رای را به نفع او صادر کند.

    تصرف در قوانین ما تعریف نشده و قانون مدنی تشخیص آن را بر عهده عرف نهاده است. این مطلب با توجه به سابقه قانون مدنی در باب تصرف روشن می شود. فقهای امامیه که قانون مذکور از عقاید ایشان الهام گرفته است، تصرف را استیلای عرفی دانستند.
    تصرف عدوانی چیست

    تصرف چیست

    مرحوم سید محمد کاظم طباطبایی یزدی، ید (یا همان تصرف) را سلطه عرفی و استیلای بر شئ می‌داند که برحسب موارد به طرزی که بتوان گفت متصرف آن را تحت اختیار و تصرف دارد، صور گوناگون به خود می گیرد. به طور مثال کشت غرس در زمین و آبیاری زراعت و احداث بنا در آن از مصادیق تصرف زمین است.

    به طوری که ملاحظه می‌گردد عامل عرف در تعریفی که این فقیه بزرگ ارائه نموده نقش عمده ای داشته است. با توجه به همین سابقه است که اساتید حقوق تصرف را اینگونه تعریف می نمایند: تصرف عبارت است از تسلط و اقتداری عرفی که انسان در مقام اعمال حق خود بر مالی دارد. این اقتدار بر حذف موارد جلوه های خارجی گوناگون دارد. ولی در هر حال باید چنان باشد که متصرف را به عنوان صاحب حق و مالک بر مالی مستولی بداند.
    انواع تصرف عدوانی

    طبق قانون تصرف عدوانی به دو نوع تقسیم می گردد. تصرف عدوانی کیفری و تصرف عدوانی حقوقی. هر کدام از آن ها دارای شرایط خاصی هستند و بعضا اگر تحت عنوان یکی اعلام دعوی کنید نمی توانید آن را تغیر دهید. به تفضیل تمام موارد را توضیح خواهیم داد.

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

    ReplyDelete
  109. Nice Presentation and its hopefull words..
    if you want a cheap web hostinng in web
    cheap web hosting company chennai

    ReplyDelete
  110. Business Analytics or Data Analytics or data science training in hyderabad is an extremely popular, in-demand profession which requires a professional to possess sound knowledge of analysing data in all dimensions and uncover the unseen truth coupled with logic and domain knowledge to impact the top-line (increase business) and bottom-line (increase revenue).

    ReplyDelete
  111. Usually I never comment on blogs but your article is so convincing that I never stop myself to say something about it. You’re doing a great job Man,Keep it up.Epic Deal Shop

    ReplyDelete