On Dec 5, 2009, at 7:19 AM, Tom Locke wrote:

> I also think Hobo should provide the small and powerful vocabulary.  
> The idea that you can build a hobo app without proper Ruby/Rails  
> chops has bitten quite a few people - it's wishful thinking (that  
> doesn't mean you must learn Rails fully first - you can learn them  
> both together).
>

Exactly - I'd even go farther and say that Hobo isn't the best place  
for a new programmer. There's quite a bit of magic going on - none of  
it's particularly *special* magic, and a somewhat experienced Rails  
programmer will understand what's happening. But those conventions /  
standard behaviors are a lot to take in for a new programmer,  
especially since most of them are buried somewhere in the gem. Anybody  
remember all the confusion people had when Rails scaffolding was a  
single line on the controller, rather than generated code?


To me, Hobo's real target audience are the folks who already  
understand things like the CRUD controller incantations, and are tired  
of typing them over and over. The goal is to get the routine bits out  
of the way, so the important parts (the business logic, the unique  
processes) can be accomplished more clearly. You can see this  
throughout the whole plugin: for example, there's nothing magical  
about lifecycles that couldn't be expressed in model/controller code.  
But the lifecycle block and the support in Rapid mean that it's much  
easier  and much clearer to encode "only user Foo can do action Bar to  
an object in state Baz" rather than scattering permission and state  
checks all over the controllers.

Similarly, in the current DRYML code, there's nothing that some (very  
clever) use of ERB and block helpers couldn't do; I actually wrote  
some code like this back when Hobo was still a little shaky last year.  
Example:

   def checked_span(display_state, user, &block)
     if user.display_currently?(display_state)
       c = 'current'
     elsif user.display_completed?(display_state)
       c = 'done'
     else
       c = 'upcoming'
     end
     content = capture { yield }
     concat(render(:partial => '/candidates/checked_span', :locals =>  
{ :user => user, :span_class => c, :content => content, :phase =>  
display_state }))
   end

(this is in a helper module) Its usage looks like (in a view file):

   <% checked_span(:define_goals, user) do -%>
     <h3><%= checklist_phase_header('Define Goals', :define_goals,  
user) %></h3>
   <% end -%>

Anybody who has written much DRYML will see the immediate similarity.  
DRYML simplifies code like this by reducing the punctation noise (less  
<%= ) and making much of the context (the user local, for instance)  
more automated.

So to come back around to the start, Hobo shouldn't be thought of as  
something that one uses "instead of" Rails; I don't believe it's  
possible to be a good Hobo programmer without also being a reasonably  
good Rails programmer.

A somewhat funny (to me, anyways) real-world analog - web programming  
as building a house.

PHP: you start with a forest and some iron ore. Good luck.

Rails: 2x4s and hand tools. Much less mess than PHP, but still pretty  
repetitive.

Hobo: the same 2x4s, but now you've got power tools. Who really wants  
to stand around all day sawing, when there are structural decisions to  
make?

Random CMS with plugins: 10000000 prefab segments the size of rooms.  
You can build something that looks mostly like what you want, but  
there are design compromises due to inflexibility; you've also got to  
figure out which of a huge number of nearly-identical modules to  
choose, and deal with compatibility issues. In many cases, if you want  
to try to modify things at all, you're back to the iron ore and the  
forest.

There's no debating the prefab segments get *something* up quickly,  
but the real goal should be to get the *right thing* up quickly.

--Matt Jones

--

You received this message because you are subscribed to the Google Groups "Hobo 
Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/hobousers?hl=en.


Reply via email to