Hobo Released!

Posted over 7 years back at The Hobo Blog

And there’s even a screencast :-) This is an early beta - version 0.4.0 You are NOT recommended to use this in an application on the open Internet. You are strongly recommended to play around with it!

* Watch the Hobo screencast (10 minutes)

What is Hobo?

* Hobo extends Rails is a number of ways, to let you build full blown web applications very quickly and easily.

* Hobo lets you add dynamic Ajax interfaces to your application with no extra programming.

* Hobo gives your application switchable themes, so you can have an elegant design right out of the box.

Who is it for?

* Hobo can speed up the creation of rich, complex web applications as well as simple internal apps and rapid prototypes.

* Hobo is a great way for newcomers to Ruby on Rails to learn and practice agile, iterative application development.

Getting Hobo

Note Hobo requires Rails 1.2 RC1, which you can install like this:

gem install rails --source http://gems.rubyonrails.org -y

You should read the status page before downloading Hobo.

Hobo is distributed in two forms, a gem and a plugin (svn repo).

Hobo Gem

The gem is ideal for trying out Hobo with a new app. It gives you a single command:

$ hobo <app-name>

It works just like the rails command, creating a blank Rails application pre-configured for Hobo. First download the gem:

* hobo-0.4.0.gem

Then:

$ gem install hobo-0.4.0.gem

(Sorry folks we’ve not got our Rubyforge stuff together as yet)

Hobo plugin

If you want to add Hobo to an existing application, first do:

$ ./script/plugin install svn://hobocentral.net/hobo/trunk
$ ./script/generate hobo

Then there are a few optional steps, depending on which Hobo features you’re after. In the screencast you’ve seen:

Hobo Rapid and the default theme:

$ ./script/generate hobo_rapid

Hobo’s user model:

$ ./script/generate hobo_model user
$ ./script/generate hobo_front_controller front

More documentation will follow!

Hobo is distributed under the terms of the MIT licesne.

Hobo Released!

Posted over 7 years back at The Hobo Blog

And there’s even a screencast :-) This is an early beta - version 0.4.0 You are NOT recommended to use this in an application on the open Internet. You are strongly recommended to play around with it!

* Watch the Hobo screencast (10 minutes)

What is Hobo?

* Hobo extends Rails is a number of ways, to let you build full blown web applications very quickly and easily.

* Hobo lets you add dynamic Ajax interfaces to your application with no extra programming.

* Hobo gives your application switchable themes, so you can have an elegant design right out of the box.

Who is it for?

* Hobo can speed up the creation of rich, complex web applications as well as simple internal apps and rapid prototypes.

* Hobo is a great way for newcomers to Ruby on Rails to learn and practice agile, iterative application development.

Getting Hobo

Note Hobo requires Rails 1.2 RC1, which you can install like this:

gem install rails --source http://gems.rubyonrails.org -y

You should read the status page before downloading Hobo.

Hobo is distributed in two forms, a gem and a plugin (svn repo).

Hobo Gem

The gem is ideal for trying out Hobo with a new app. It gives you a single command:

$ hobo <app-name>

It works just like the rails command, creating a blank Rails application pre-configured for Hobo. First download the gem:

* hobo-0.4.0.gem

Then:

$ gem install hobo-0.4.0.gem

(Sorry folks we’ve not got our Rubyforge stuff together as yet)

Hobo plugin

If you want to add Hobo to an existing application, first do:

$ ./script/plugin install svn://hobocentral.net/hobo/trunk
$ ./script/generate hobo

Then there are a few optional steps, depending on which Hobo features you’re after. In the screencast you’ve seen:

Hobo Rapid and the default theme:

$ ./script/generate hobo_rapid

Hobo’s user model:

$ ./script/generate hobo_model user
$ ./script/generate hobo_front_controller front

More documentation will follow!

Hobo is distributed under the terms of the MIT licesne.

IntelliJ On Rails

Posted over 7 years back at zerosum dirt(nap) - Home

If you’re an IntelliJ user like me, and have recently been bitten by the RoR bug, you’ll be glad to know that there’s a plugin on the way. It’s still in it’s infancy, lacking a lot of features, and is therefore not in the repository, but that doesn’t mean we can’t play around with it. What follows is a brief tutorial on how to locate, install, and use the ruby plugin…

First you need to check out the sources from the Subversion repo:

svn co http://svn.jetbrains.org/idea/Trunk/ruby

Use Ant to build it (run ant from the directory you co’d to, where the build.xml file lives). The build process should generate a jar file in dist/ called ruby-SNAPSHOT.jar.

Next, make a new directory in your IDJ plugins directory called ‘ruby’ and make a lib directory in there. Copy the jar to $IDJ_ROOT/plugins/ruby/lib. On OS X, this path is something like /Applications/IntelliJ IDEA 6.0.2.app/plugins/ruby/lib/.

Start IntelliJ. Go to Settings → Project Settiings → Project Structure. In Global Resources, under JDKs, right click and add a Ruby SDK. On OS X, you’ll want to point it at /usr/local, or whereever your copy of Ruby has been installed.

Now you should be able to create a new project and select Ruby SDK from the JDK list (heh). Create a single module project, select Rails as your module type, and set the Ruby SDK for the module. Finally, you’ll be given the chance to generate a new Rails application skeleton, generate missing files, or use an existing Rails app. Go ahead and create a test project and generate a new Rails framework. I’ll do all the work for you and populate the project explorer with that oh-so-familiar directory structure. Check out that ugly Ruby icon they’re using. Jeeze, what is that?

Right click in the project explorer and select New → Controller. Name your controller test and add an action name hello. Click OK. IDJ will run the Rails generator and update the project explorer. You now have a TestController with a hello action, the corresponding view template, and the expected test stubs.

You can select Run → Run… to start a WEBrick server and test your app. There are some bugs here. First of all, there is no run output in the console view where you’d expect it to be. No web browser is launched, no indication is given of what port number the server gets bound to. Worse, you can’t seem to kill a running WEBrick server without killing the process from a terminal. So yeah, there’s obviously still some work to do here. For now, I’d suggest running WEBrick from the command line (RadRails still wins here, at least). No command completion or real debugging support is available yet either, but hey.. it’s a start. It’s functional, you can run tests from within the IDE, you get basic code formatting, syntax highlighting, etc.

For more information, check out the JetBrains Project Homepage for the ruby plugin, where you’ll find a link to the roadmap and discussion groups. You’ll note that there are plans for autocompletion, ability to browse to symbol, proper YAML, RXML support, etc. I really hope that development continues on this. IDJ is much-loved amongst the Java community, and could be a huge hit in the Rails community if they get a slick, fully functional plugin out there.

Develop with pleasure ;-).

The Quest For The Perfect RoR IDE...

Posted over 7 years back at zerosum dirt(nap) - Home

Ruby itself doesn’t directly support multiple inheritance (yay for mixins) but the community sort of does. If you survey a random group of RoR developers, about half of them seem to come from a structured (oftentimes strongly-typed) OO language like Java, and the other half comes from the scripting world. One of the best things about Ruby is that it appeals equally to both camps. It’s a common ground of sorts, a compromise, maybe the best of both worlds. I dig that.

But as everyone knows, different backgrounds beget different toolsets. In the case of Ruby on Rails, it raises the question: do we need a real IDE for this kind of work, or is a simple text editor good enough?

I’ve gravitated back and forth between the two coding camps over the years. It’s a “right tool for the task” sort of thing if you ask me. You want a lightweight project management application that runs on the web? PHP please. You want a robust scalable service for the delivery of digital media and have some money to spend? Let’s do that one in Java. There’s a religious war to be had here for sure, and I don’t want to get into that… The interesting thing (and the point I’m trying to make) is that the tools you come to use and respond to differ depending on that background.

When I’m working in PHP, I use vim. No, really. I tried PHPEclipse and the pluses just didn’t outweight the minuses for me. I also tried Komodo. I’m an old school vi hacker, and I do all my sysadmin work in vi, so it became the natural choice. I don’t regret it. Well, not often, anyway. After all, PHP is a scripting language, right?

When I’m working in Java, I’m spoiled to death by IntelliJ. Yes, it’s expensive. Yes, there’s a learning curve. And yes, it’s worth every damn penny/hour spent. I’ve tried Eclipse. And it’s alright, but it’s not IDJ. The JetBrains guys have delivered what is by far the most intelligent, usable IDE I’ve ever used. That’s my story, and I’m sticking to it.

So is Ruby a scripting language, or is Ruby a proper OO “enterprisey” language? I’d argue that it’s both and that it’s use dictates the classification. But when you’re building Rails apps, you’re firmly entrenched in OO/MVC proper webapp territory, and therefore, imho, that demands the use of a proper IDE. Particularly once a project becomes sufficiently large.

So what do I use when it comes to Rails work then? Well, up until now I’ve been using RadRails with RDT and Eclipse. It works pretty well for the most part. But it’s no IntelliJ. We don’t, of course, have auto-complete yet, but the syntax highlighting is getting there, the generators and rake tasks are wrapped up nicely, as is run output, test execution, etc etc. It’s better, for me, than using vi, by leaps and bounds and it seems to be getting better and better (nice job guys!).

RadRails seems to be the choice for Windows and Linux users, but everyone else I know on OS X seems to be using TextMate. Whoah, what? I’ve never used TextMate — am I missing out? But wait, TextMate is just a text editor right? It’s NOT an IDE and doesn’t aspire to be. Regardless, the popular opinion seems to be that it’s “good enough”.

So what do you use? Are you, like everyone else out there, a TextMate-phile? If so, why? Don’t get me wrong, I understand the allure of a minimalistic text editor for hacking script, but have you been spoiled by something as nice as IDJ in the past? Oh man would I kill for ctrl-space to autocomplete/interrogate an object to discover it’s methods..

I wonder if there are a lot of people who have come over from the Java side of things who have switched to TextMate, particularly people who have used IntelliJ in the past. Am I making a blanket assumption that most of the people using text editors to hack Rails are not Java converts? Am I just overcomplicating the whole thing? Is TextMate really “good enough”?

The entire Rails core team purportedly uses TextMate… Maybe I’m just missing something? I’d love to hear your opinions.

UPDATE: I’m using NetBeans now. And it’s great.

Relief

Posted over 7 years back at zerosum dirt(nap) - Home

So we just finished wrapping up work on the app we’ve been building for the past 8 months. Yay! It’s part of a suite of web-powered tools for a certain niche video editing system. Implemented in Java, leveraging Swing, Axis, WebObjects… Great project and totally learned a lot, but sure am relieved to have delivered it. I’m sure there’ll be a tweak to make here or there, but you know… It’s delivered (rc).

What’s next? Well, I’m not entirely sure to be honest. For the first time in my life I’m thinking about abandoning paid work in order to invest a couple solid months of full-time effort working on the Ruby/Rails app that’s in my head. Perhaps it’s finally time to put my neck out there a little and make it happen. After all, I isn’t getting any younger, now is I?

Fun with IIS : Unexpected Error 0x8ffe2740 Occurred

Posted over 7 years back at Eric Goodwin

I installed IIS on my computer the other day because I'm doing some work for a client who is using ASP. When I tried to start up the server, I got this error message 'Unexpected Error 0x8ffe2740 Occurred'. Having no idea what error 0x8ffe2740 was I hit up google for some answers. Turns out Error 0x8ffe2740 means Port already in use. It would have been nice if they had just supplied a simple explanation in there error message. Is that too much to ask for?

Fun with IIS : Unexpected Error 0x8ffe2740 Occurred

Posted over 7 years back at Eric Goodwin

I installed IIS on my computer the other day because I'm doing some work for a client who is using ASP. When I tried to start up the server, I got this error message 'Unexpected Error 0x8ffe2740 Occurred'. Having no idea what error 0x8ffe2740 was I hit up google for some answers. Turns out Error 0x8ffe2740 means Port already in use. It would have been nice if they had just supplied a simple explanation in there error message. Is that too much to ask for?

Nice Experience !!

Posted over 7 years back at Ajax on Rails


My first Barcamp was really a nice experience. Enjoyed some interesting sessions and some of them were riling me out.
But in all i can say it was good to be there and i will try to attend the all of them in the future.

Searchable RoR Docs

Posted over 7 years back at zerosum dirt(nap) - Home

One of the great things about PHP isn’t the documentation, per se, but rather the centralized, searchable docs interface at PHP.net. Big thanks to Jeremy Durham for putting together an equivalent Rails resource site. There’s obviously still a good bit of work to do before docs are as complete and usable as they could be, but an online searchable repository like this is definitely a step in the right direction. Bookmark it, and add some example code and comments mang.

Oh and while we’re talking about documentation (or lack thereof), don’t forget to donate to the Rails API docs project at Caboo.se if you haven’t already.

Going to BarcampDelhi-2

Posted over 7 years back at Ajax on Rails


BarcampDelhi-2 is all set to create a nice geeky happening on 9th december 2006. I am luckily attending the camp and the bar.
Barcamp is all about sharing new thoughts, discussing new technologies, talking web standards.
This time it is supposed to be rich in ruby and rails as rails is really booming everywhere.
I was even planning to give a presentation on Meta Programming in Ruby but at the moment the idea is in shade as we thought that the people there might not be as comfortable with ruby to pick the meta programming things interesting. So, now i have planned to present it somewhere in the ruby/rails workshop kinda meetups.

vicruby.com - Victoria Ruby Users Group

Posted over 7 years back at Eric Goodwin

I was talking with Mat Harvard on gtalk last night and the idea of starting a Victoria Ruby Users Group came up. I had bought vicruby.com quite a while ago but hadn't had the time to develop it so I quickly whipped up a template for stikipad, changed my DNS and we now have a wiki for the newly formed 'Victoria Ruby Users Group'. We'll see how it goes. Not sure what the interest is going to be like in Victoria. It's not that big of a place. Hopefully we will have our first meeting in the new year. Talk/presentation ideas anyone?

vicruby.com - Victoria Ruby Users Group

Posted over 7 years back at Eric Goodwin

I was talking with Mat Harvard on gtalk last night and the idea of starting a Victoria Ruby Users Group came up. I had bought vicruby.com quite a while ago but hadn't had the time to develop it so I quickly whipped up a template for stikipad, changed my DNS and we now have a wiki for the newly formed 'Victoria Ruby Users Group'. We'll see how it goes. Not sure what the interest is going to be like in Victoria. It's not that big of a place. Hopefully we will have our first meeting in the new year. Talk/presentation ideas anyone?

JavaScript Tricks (RJS-R): Cleaning Up My Mess...

Posted over 7 years back at zerosum dirt(nap) - Home

So a couple folks have pointed out that the last Rails+YUI example I posted doesn’t work in IE. Or Safari. Eek, that’s not so good.

Anyway, this post is kind of a hodgepodge documenting the process I went through to fix those issues and clean it up a bit. Maybe more of a ‘note to self’ than an actual blog entry, so not required reading by any means. Unless you’re having issues with IE and Minus MOR that is, in which case the magic word is content-type. I’m embarassed to say how much sleep I lost tracking that one down. Sigh.

class ExampleController < ApplicationController
  layout "standard", :except => :add

  def show
  end

  def add
    @response.headers['content-type'] = 'text/javascript';
    @thing = params[:thing]
  end
end

That’s our updated ExampleController. Notice that we’re setting the content type of the response in the headers now. The default content type appears to be html, instead of text/javascript. Not entirely sure why this is happening at the moment as Minus-R appears to set the content-type in it’s render method. But anyway, for whatever reason, Safari and Firefox both work fine, but IE doesn’t like it one bit. Of course, instead of warning us (or giving us an option to warn us, for that matter) it simply discards the asynchronous response. Hence, we never see an update. Nice, eh?

I also took the opportunity clean up the rest of our example a little bit. Here’s our new layout template:

<html>
<head>
  <title>YUI Tester: <%= controller.action_name %></title>
  <%= javascript_include_tag "yui/yahoo", "yui/event", "yui/dom", "yui/dragdrop", "yui/connection", "yui/container"%>
  <%= stylesheet_link_tag  'yui/container'%>

  <script language="javascript">
    YAHOO.namespace("yuitest.container");

    function init() {
      var handleCancel = function() { this.cancel(); };
      var handleSubmit = function() { this.submit(); };
      var handleFailure = function(o) { alert("failure: " + o.responseText); };
      var handleSuccess = function(o) { eval(o.responseText); };

      YAHOO.yuitest.container.myDialog = new YAHOO.widget.Dialog("myDialog", {
        width: "500px",
        modal: true, 
        visible: false,
        fixedcenter: true, 
        constraintoviewport: true, 
        draggable: true });

      var escKeyListener = new YAHOO.util.KeyListener(document, { keys : 27 }, 
        {fn:handleCancel,scope:YAHOO.yuitest.container.myDialog,correctScope:true} );

      YAHOO.util.Event.addListener( 'myDialogForm', 'submit', function(e) {
        YAHOO.util.Event.preventDefault(e);
        YAHOO.yuitest.container.myDialog.submit();
      });
        
      YAHOO.yuitest.container.myDialog.cfg.queueProperty("keylisteners", escKeyListener);
      YAHOO.yuitest.container.myDialog.cfg.queueProperty("buttons",
        [{ text:"Save", handler:handleSubmit, isDefault:true },{ text:"Cancel", handler:handleCancel } ]);

      YAHOO.yuitest.container.myDialog.callback = {
        success: handleSuccess,
        failure: handleFailure
      };

      YAHOO.yuitest.container.myDialog.render();
    }

    function addThing() {
      YAHOO.yuitest.container.myDialog.show();
    }

    YAHOO.util.Event.addListener(window, "load", init);
  </script>
</head>
<body>
  <div id="main">
    <% if flash[:notice] -%>
      <div id="notice"><%= flash[:notice] %></div>
    <% end -%>
    <%= @content_for_layout %>
  </div>
</body>
</html>

OK, a bunch of changes there. First, we’ve removed all the Prototype JS libs because we no longer need it — YUI’s connection manager can take care of this stuff for us, and since we’re not using the default behavior of RJS, there are no worries about dependence on Prototype. Next, we’ve added a couple key listeners on the popup dialog to handle enter (submit) and escape (cancel). Note that we have to use Event.preventDefault() in our enter key listener to suppress the default form submission action. Otherwise, we end up redirected to a new page that just contains our result string, and we don’t want that…

Finally, we’ve also eliminated the clumsy body of the success handler and replaced it with a single statement: eval(o.responseText). Yup, we can just evaluate the JavaScript returned from our Rails app. No need to append a new script tag to the body, yehck. Here’s the code that’s returned from our add.ejs template, as a reminder (it’s unchanged):

document.getElementById('hello_msg').innerHTML = '<%=@thing[:name]%>';

So yeah, it just replaces the inner HTML in the element named hello_msg. Easy enough. The next step here would be to figure out how to encapsulate the stuff in the layout using some sort of helper module or plugin. But that’s it for now.

(Progress on my current Rails project has been pretty slow lately, as we’re nearing completion on a big client project (a slick Java-based webstart app that’s been occupying the majority of my time for the past 6 or so months). It’s nice to finally see the light at the end of the tunnel! Hopefully once that wraps, we’ll have some significant time to pour into the RoR ideas and prototypes we’ve been playing around with…)

Multiple Concurrent Database Connections with ActiveRecord

Posted over 7 years back at schadenfreude

ActiveRecord is a great tool to use for database maintenance as I explored in my previous article, Using ActiveRecord for Simple Maintenance Scripting, but what if you need to do tasks that require you to be connected to multiple databases at once.

Perhaps you want to compare records in one database and copy them to another, well heres how you do it.

Multiple Concurrent Database Connections with ActiveRecord

Posted over 7 years back at schadenfreude

ActiveRecord is a great tool to use for database maintenance as I explored in my previous article, Using ActiveRecord for Simple Maintenance Scripting, but what if you need to do tasks that require you to be connected to multiple databases at once.

Perhaps you want to compare records in one database and copy them to another, well heres how you do it.