I gave a ~1 hour talk last night to the Phoenix Ruby developers group on how to implement logical programming concepts in Ruby using the ruby-prolog gem recently released by OpenRain. Enjoy!
[Keynote] [PDF] [Slideshare] [Code] [Releases]
Ruby on Rails is a great RAD framework. We use it all the time. But one place Rails loses its magic–while not the fault of the framework itself–is with external integrations to legacy systems.
First of all, soap4r sucks. Everyone I’ve seen try to pick it up has gotten frustrated and angry at how awkward it is to write a SOAP client in Ruby compared to Java and .Net tools, which can do the same thing in a matter of minutes. Since RoR IDEs aren’t exactly 1337 yet, we need to put some serious love here as a community to prevent larger companies with heavy SOA leanings from running away screaming.
For some reason, many people seem to think that pouring t3h Rails int3rn3ts into an infrastructure will suddenly trim 75%+ off all development and maintenance costs, complete with rounded corners and shrink-wrapped buttons. Wrong. Many of the development tasks will take significantly shorter times to develop under timeframe expectations relative to Java and .Net, yes, but you can’t avoid costs associated with migrating legacy data and integrating with retarded external systems such as your ghetto-ass SOAP services. Nor should you avoid design activities such as usability analysis or proper testing practices.
So if you have a web project that lives in complete isolation and does not have any legacy issues with which to deal, OpenRain can bust out that web project in a heartbeat. But if you have unresolved data management and integration issues, there is no acts_as_silver_bullet plugin which can save you the burden of having to actually think about and address those problems. Rails isn’t the cold bucket of water for your data nightmares.
I’ll be giving a technical presentation to the Phoenix Ruby User Group on Monday, February 9th at 6:30pm. The topic will be using logical programming Prolog concepts within the object-oriented Ruby programming language using the ruby_prolog gem. Attendance is free and open!
Keeping track of company assets is important for insurance, warrantee and general informational purposes for purchased software licenses and hardware. I wanted a dirt-simple webapp written in Ruby on Rails, so I wrote one the other night and put the code on github
. It’s a really simple Rails 2.2.2 app … no frills but does the job. If anyone would like to add some frills such as searching, sorting, pagination etc. I’d be happy to pull them back in. OpenRain
would be very thankful 🙂
“A simple web-based asset tracking system for small businesses written in Ruby on Rails (RoR). New equipment is assigned to a specific location and the responsible person is notified of the assignment. You may optionally add serial numbers and an arbitrary amount of notes to each asset. Configured to run on top of PostgreSQL and sendmail by default, though both are reconfigurable.”
After a long confusing Ruby debate today at OpenRain on the merits of functional, Erlang-esque write-once-read-many variables, I’m going to step onto the podium and just say it… Ruby should get “final” or “const” variables in a similar semantic style to Java, except at runtime. Rather than ramble on for 12 paragraphs explaining exactly how this might work, read this fictitious Ruby code snippet instead. (Optional: Also check out the chapter on “final” in Hardcore Java.)
Final variables like this are really just an inline TDD mechanism.
Allowing local stack data to be constant provides no functional enhancements to the software, but alleviates the need for certain types of tests by using the compiler and/or runtime to assert certain memory is immutable. The “friend_best” method variant in the code snippet would obviously break most existing Ruby programs, but ups the bar for defensive programming by preventing many common bugs out-of-the-box while still providing support for traditional Ruby variables. At the very least we should have something like “friend_better”. Adding this information to the parse tree will also make it easier for IDEs to provide features more easily implemented for static languages.
TDD/BDD is in–no qualms about it–but we can make our code safer, cleaner and more concise by applying some of the lessons learned by our statically-typed language cousins over the last few decades.
I’ll be giving two sessions this Saturday, September 20th, 2008 at ABLEconf: Arizona Business and Liberty Experience hosted at the University of Advancing Technology. The first will be a ~50 minute getting-started-with-ruby-on-rails type session aimed at developers similar to the one I’m giving this Wednesday for Joe Developer. The second will be a plug-heavy talk over how OpenRain does F/OSS-friendly web development in the commercial space using F/OSS software and tools, targeted for a business-minded crowd.
ABLEconf is a new event so I’m not sure what to expect, though I’d put my money on a lot of systems-level event content since much of the participation seems to be from local Linux groups.
This Wednesday evening, OpenRain will be hosting and providing food for Phoenix’s East-valley Joe Developer group. I’ll be giving a getting-started-with-ruby-on-rails type demo, after which I’m sure there’ll be good conversation and fun. Attendance and food are free. Food will be hot at 6PM. [Venue] [Google Group]
Here (PDF , Keynote) are the slides from my Phoenix Ruby Users Group presentation yesterday on Ruby P2P Development with Journeta. Thanks a ton for the great audience. I’m extremely pleased that everyone seemed to “get it”, and even more so that the suicidal audience-interactive demo went well. Chris Matthieu has recorded the session for the Rubyology podcast, which will be available soon for free on iTunes and the web.
While you’re on iTunes, you can also grab #68: Marc‘s Ruby2Ruby presentation, as well as #48 given last year to the Phoenix Rails group on attachement_fu.
I’ll be presenting at the September 2008 Phoenix Ruby Users Group on Monday, September 8th, covering development of Ruby peer-to-peer applications using OpenRain‘s latest gem release, Journeta. Topics will include Ruby’s threading model, basic networking review, Journeta usage, and live demos. 6:30PM, here.
[Location Details] [PRUG Google Group]
See you there!