Posts Tagged ‘rinda’

Distribunaut

Sunday, April 5th, 2009

Hey there everyone, it certainly has been awhile, a month by my count. I have been diligently working on a book for Addison-Wesley called, “Distributed Programming with Ruby”, so having the time to blog went from a luxury to almost non-existent. But here’s another little post to keep your RSS feeds happy.

I’ve started working on porting the mack-distributed package to the non-Mack world. This new project, and I use the term new loosely for the time being, is tentatively called Distribunaut. The project on GitHub can be found here: http://github.com/markbates/distribunaut/tree/master. It’s pretty rough right now. I’ve ported over the distributed objects section of mack-distributed, but not the views and routes.

You can install the gem like such:

$ gem sources -a http://gems.github.com
$ sudo gem install markbates-distribunaut

To use Distribunaut we first need to start a Rinda::RingServer. Distribunaut comes with a binary to help make this easier:

$ distribunaut_ring_server start

Once we’ve done that we can create an object we would like to share:

When we run that we can access it like such:

That would result in the following being printed out by our ‘client’ code:

On our ‘server’ side we would see something like this:

This is, clearly, a very simple example, but it shows you how easy it is to use Distribunaut. We haven’t done any real configuration, and things just magically work!

Over the next couple of months I’ll be extending and rebuilding this library to make it even more powerful and easy to use. I’m going to add fault tolerance, selection algorithms, and whole lot more. The API you see in these examples will most likely remain unchanged, but I’m planning on pretty big under the cover changes.There will be a very in-depth look into all of this in the book, obviously. (Shameless plug, I know.)

If anybody out there wants to contribute to this project, I’d love the help. Any sort of feedback is welcome.

Mack @ RubyConf ’08

Thursday, September 11th, 2008

Mark your calendars, on Day One, from 1.15PM – 2.00PM, in Room 2, I’ll be delivering a presentation on building distributed applications.

http://www.rubyconf.org/talks/15

Building multiple applications that all need to share data and other information between can be a daunting and challenging task. Mark will help to demystify the use of Ruby systems such as Rinda and DRb and show you how they can be used to link applications together. Through the development of the Mack framework and its use in building Helium.com, Mark will share the highlights and the pitfalls of distributed application development.

Make sure and sign up for the conference today, as attendance is limited to only 500.

Release 0.7.0

Monday, August 25th, 2008

I know that with every release I say something like, “This is a big release”, but the fact of the matter is this is a big release. Amongst the 49 tickets that make up release 0.7.0, there are two in particular that are at the core of Mack’s very existence, they are Distributed Objects and Distributed Views/Layouts.

Back on March 26th Mack 0.4.0 was released. This release brought the first of three large distributed features, Distributed Routes. With 0.7.0 Mack fully realizes it’s goal of making it easy to write fully distributed web applications. There is a very nice wiki page, on our new wiki, that shows in detail how to use the new distributed features. That page can found here. Also, don’t forget to watch the screencast of the new distributed features that can be found here.

Distributed Objects

Distributed objects allow you to easily distribute access to your library and model code amongst any of your other Mack applications. Allowing this access is as simple as requiring the mack-distributed gem, adding a few lines to your configuration, and starting the mack_ring_server binary. ‘Client’ applications just need to require the mack-distributed gem.

Distributed Views/Layouts

With distributed views and layouts you can now share the look and feel from one application with all of your applications. Configuration and use is just as easy using distributed objects.

Form and HTML Helpers

People have been requesting more HTML and form helper methods, and we’re more than happy to comply. There are whole bunch of these new methods now to help you more easily build your applications. The generators have been updated to use these new methods, to make your job even easier. There is also now support for doing Date/Time drop downs, similar to Rails and Merb.

‘Tell’ Messaging

Rails folks know ‘tell’ messaging as ‘flash’ messaging and Merb folks know it as ‘message’ messaging. We went with ‘tell’. Tell messages are cleared after any non-redirect request. They’re a great way to send a simple message down to the client.

New Wiki

With this release there is also a new wiki at, http://www.mackwiki.com. This new wiki, incidentally built using Mack 0.7.0, will house all the tutorials and how-to’s for Mack. There are a few entries from the old wiki that still need to brought over during the next day or two.

Changelog:

  • [#114] Javascript link_helper
  • [#112] Error generating mack application
  • [#109] DataMapper 0.9.4
  • [#103] Log colors for the console are now configurable per log level.
  • [#102] New association method in data_factory
  • [#101] Update to file upload testing (build_file -> file_for_upload, and multipart support in put)
  • [#100] Inline routing parameters are being mutated
  • [#99] Upgraded to facets 2.4.3
  • [#98] Fixed mack-facets not being loaded before app_config files.
  • [#97] Fixed sessions only working with ‘local_memory’ mode
  • [#96] Distributed Views module now uses file cache
  • [#92] Removed deprecated app_config.orm code.
  • [#91] Fixed Mack blowing up if there is no config/initializers/gems.rb file.
  • [#90] Added deprecation system.
  • [#89] rake gems:* will now only display warning if any gem required is not installed (and not break)
  • [#88] Implemented pending SQLite3 tests in mack-activerecord
  • [#87] Refactored out common ORM code from mack-active_record and mack-data_mapper into mack-orm
  • [#86] stylesheet link helper
  • [#85] Refactored out Mack::ViewHelpers::HtmlHelpers into Mack::ViewHelpers::HtmlHelpers, Mack::ViewHelpers::FormHelpers and Mack::ViewHelpers::linkHelpers
  • [#84] Added Mack::Distributed.lookup(url) to retrieve specific distributed services.
  • [#83] Added mail_to HTML helper.
  • [#82] Added ACL support to mack-distributed
  • [#81] Fixed sessions working with redirects in testing
  • [#80] Distributed objects present both the DRb::DRbObject inspect and the original object’s inspect when asked.
  • [#79] Renamed app_config.mack.use_distributed_routes to app_config.mack.share_routes
  • [#76] Move mack_ring_server to mack-distributed
  • [#75] Left over mack-distributed rake tasks
  • [#74] Added optional feature to disable initialization logging.
  • [#73] Tests no longer use the functional/unit directories
  • [#69] Added ViewHelperGenerator and ControllerHelperGenerator
  • [#68] Transactional support in mack-AR
  • [#67] Added test:setup tasks for active_record and data_mapper
  • [#62] Removed const redefined warnings if mack-l10n is used along with mack-activerecord
  • [#39] HAML 2.0.2 support
  • [#28] Refactored out encryption into the mack-encryption gem.
  • [#25] Added ControllerGenerator
  • [#19] Added HTML form helpers
  • [#15] File upload testing support (ability to do multipart form post in testing)
  • [#11] Distributed Layout/Views
  • [#10] Added distributed objects to mack-distributed.
  • [#8] Move distributed code from mack-core to mack-more
  • [#5] Added tell messaging
  • gem: genosaurus 1.2.2
  • gem: haml 2.0.2
  • gem: addressable 1.0.4
  • gem: facets 2.4.3
  • gem: data_mapper 0.9.4

Release 0.4.5

Monday, April 14th, 2008

Well, here it is! The release you all were waiting for, the one that finally gives migration support to Mack! That’s right, now whether you use ActiveRecord or DataMapper, you can use the familiar rake task ‘db:migrate’ to run your migrations. Yippie! The scaffold generator will also generate a migration for you, assuming you have ORM support enabled.

There’s still some work to go on this, like the ability to pass in command line args to the task to build the full migration for you, but it’s a start! It’s now pretty easy to get your app going.

Also in this release is a rewrite of the distributed routing functionality. It’s now been rewritten to use Rinda. This is going to be the standard for all the distributed functionality that will be coming Mack over the next couple of months. As more functionality lke this is developed, the more it will be wrapped in nice, easy to use APIs.

There’s also been some tidying up here in there in the code tree. For example, new applications don’t get generated with a boot.rb file. Looking at it, there’s really no need for it, since everything is done with Rake tasks.

Overall, I’m very happy with the release, and I feel that this release definitely makes Mack a VERY useable framework because of the migration support. Enjoy!

Changelog:

  • Removed boot.rb file. It was unnecessary.
  • When a new Mack application is generated the Rakefile that gets generated is stamped with the Mack gem version used to create it. This ties the project to that gem. This can, of course, be upgraded as new Mack gems come out, but it’s a good way of tying your app to a specific revision of Mack.
  • Added support for migrations for both ActiveRecord and DataMapper. DataMapper migration support requires DataMapper 0.3.0 gem. Please keep in mind, though, that DataMapper 0.3.0 has a serious bug in it, which may prevent you from using it. Please see http://www.mackframework.com/2008/04/09/horrible-bug-in-datamapper-030/ for more information.
  • Rewrote distributed routing support to use Rinda inside of plain old DRb. This makes for an almost zero configuration usage.
  • Added: mack_ring_server binary to start a Rinda ring server for use with distributed routing.
  • Sqlite3 is now the default database for Mack applications configured with ORM support.
  • Added a test helper method, rake_task, to aid in the testing of Rake tasks.
  • Added: rake generate:migration name=<migration_name>
  • Added: rake db:migrate
  • Added: rake db:abort_if_pending_migrations
  • Added: rake db:rollback
  • Added: rake db:version
  • Added: rake mack:ring_server:start
  • Added: rake mack:ring_server:stop
  • Added: rake mack:ring_server:restart
  • Added: rake mack:ring_server:services:list
  • gem: application_configuration 1.2.2
  • gem: daemons 1.0.10

    The state of migrations and the distributed routes rework

    Wednesday, April 9th, 2008

    I was really hoping to get the rewrite of distributed routes using Rinda, as well as migration support for both ActiveRecord and DataMapper out either today, or by the end of the week. As it turns out, because of the Class bug in DataMapper 0.3.0 it doesn’t look like that’s going to happen till early next week. Sorry about that folks. I’ve lost a lot of time on the DataMapper thing, but I’ve got a work around, locally anyway, that is allowing me to keep developing. As soon as I get it all done, I’ll be very happy to release it all. Stay tuned.