[Seaside] Ideas worth stealing

stephane ducasse stephane.ducasse at free.fr
Sun Jun 1 18:56:40 UTC 2008


Hi Todd

You are right but you can also participate.
You want a lot and we are few.
Just a reminder Lukas delivers a lot of high quality code:
		Pier
		Seaside
		Magritte
Lukas is helping maintaining the website of seaside, doing a PhD, ...
I always mentioned that it would be good to have Magritte to produce  
simple table and sql mapping.
Now if nobody builds something for what he needs then it will not exist.
I think that Seasiders could share more. May be there is not enough  
producers
compared to the consumers.

Stef


On Jun 1, 2008, at 8:45 PM, Todd Blanchard wrote:

> That is an interesting question - I've taken a run with magritte  
> once or twice and did not make satisfactory progress and abandoned it.
>
> I found the method of defining the meta model in magritte to be  
> rather ponderous and awkward.
>
> Not that it isn't expressive, but I don't know all the parts/ 
> mappings/kinds of things - I spent all this time looking at the docs  
> or examples.  Also the documentation is non-existent.  Really, if  
> you want to get people to use magritte - STOP CODING AND START  
> DOCUMENTING - I don't have time to figure it out from the examples  
> or pier or any running code.  I want docs and code snippets I can  
> steal and modify. I want them in a nicely indexed web site so I can  
> find a solution to my exact problem using google in about sixty  
> seconds.
>
> Note website for activescaffold: http://activescaffold.com
> Click on documentation.  Wow, everything I need to know right  
> there.  Brilliant. Where is the equivalent resource for Magritte?   
> Google couldn't find it.
>
> Most of what you need to define the magritte model is already in the  
> database schema - so can magritte just infer the fields and let me  
> just customize it's behavior?
>
> The missing part in the database is the mapping of widgets and the  
> order or presentation of fields.
>
> In the system I am doing (sells tickets to a new museum) there is
>
> Order->OrderTransactions (subclassed to Purchase,Exchange,Return)- 
> >Tickets (actually two relations - tickets added, tickets removed)
>
> The code to get a fully functioning back office/admin UI to edit  
> this entire network is below - there's very little of it.  Most of  
> the code is just to customize elements - change labels for columns,  
> change column order, suppress presentation of some columns or  
> relationships.
>
> Why I picked Rails:
>
> 1) I already had an existing mysql database I had to use.
> 2) Client wanted a technology with a large local pool of talent he  
> could hire - robotcoop is nearby (spinoff of amazon.com) - they are  
> all rails and it is easy to hire people from there
> 3) I had a lot of UI that is back office and can be kind of ugyly/ 
> auto-generated and only a little public UI (ticket purchase flow)
> 4) Rails has a number of scalable deployment recipes available - I'm  
> using apache->mongrel cluster.   I will add capistrano to automate  
> upgrade deployments
> 5) I'm replacing an equivalent system written in a nightmare  
> combination of Java/Hibernate/Cocoon-js/xml-xslt/tomcat that nobody  
> wants to maintain.  I can't learn that many languages - but I most  
> certainly can steal/translate logic and templates - it was easy to  
> translate jsp to rhtml templates.
>
> For your amusement - the entirety of the order/ordertransaction/ 
> ticket code is below - it does a two level master-detail view with  
> ajax updates in a single page.  It took me almost no time at all to  
> get this working and the majority of the code you see is just  
> appearance tweaks or action disabling.
>
>
> :
> #model - (all of it - really)
> class Order < ActiveRecord::Base
>     set_table_name 'orders'
>     has_many :order_transactions, :class_name =>  
> 'OrderTransaction', :foreign_key => 'order_id', :dependent => :destroy
>     belongs_to :purchaseTransaction, :class_name =>  
> 'TicketPurchase', :foreign_key => 'purchaseTransaction'
> end
>
> class OrderTransaction < ActiveRecord::Base
>     has_many :ticketsReturned, :class_name => 'Ticket', :foreign_key  
> => 'returnTransaction', :include => [:price, :product], :dependent  
> => :destroy, :order => 'sequence_number'
>     has_many :ticketsAdded, :class_name => 'Ticket', :foreign_key =>  
> 'originatingTransaction', :include => [:price, :product], :dependent  
> => :destroy, :order => 'sequence_number'
>
> class TicketPurchase <  OrderTransaction
> end
>
> class TicketExchange <  OrderTransaction
> end
>
> class TicketReturn <  OrderTransaction
> end
>
> class Ticket < ActiveRecord::Base
> end
>
> #controllers - tops is most complicated - remove create update and  
> delete abilities - add some action links (all of it)
> class Admin::OrderController < AdminController
>     layout "admin"
>     active_scaffold :orders do | config |
>       config.actions.exclude :delete
>       config.actions.exclude :update
>       config.actions.exclude :create
>       config.action_links.add :resend_email, :label => 'Resend  
> Email', :type => :record, :position => false, :confirm => 'Resend  
> purchase confirmation email?'
>       config.action_links.add :exchange_tickets, :label => 'Exchange  
> Tickets', :type => :record, :position => :after, :crud_type => :update
>       config.action_links.add :refund_tickets, :label => 'Refund  
> Tickets', :type => :record, :position => :after, :crud_type => :update
>         list.sorting = {:date => 'ASC'}
>         config.list.columns =  
> [:date 
> , :commissionAccount 
> , :nameFirst, :nameLast, :emailAddress, :order_transactions]
>         config.list.per_page = 100
>         config.columns =  
> [:date 
> , :commissionAccount 
> , :nameFirst 
> , :nameLast 
> , :emailAddress 
> , :address1 
> , :address2, :city, :state, :zip, :country, :order_transactions]
>     end
> end
>
> class Admin::OrderTransactionController < AdminController
>   layout "admin"
>   active_scaffold :order_transaction do | config |
>     config.list.columns =  
> [:date 
> , :type, :channel, :payment, :credit, :ticketsAdded, :ticketsReturned]
>     config.actions.exclude :delete
>     config.actions.exclude :update
>     config.actions.exclude :create
>   end
> end
>
> class Admin::TicketController < AdminController
>   layout "admin"
>   active_scaffold :ticket do | config |
>     config.list.columns =  
> [:forGto 
> , :validForDate 
> , :product, :price, :status, :purchasePrice, :serviceCharge, :order]
>     config.list.per_page = 100
>     list.sorting = {:validForDate => 'ASC'}
>     columns[:validForDate].label = "Date"
>     columns[:product].label = "Description"
>     columns[:price].label = "Ticket"
>     columns[:purchasePrice].label = "Price"
>     columns[:serviceCharge].label = "Service Charge"
>     config.actions.exclude :delete
>     config.actions.exclude :update
>     config.actions.exclude :create
>   end
>
> #views - auto-generated - no code at all
>
>
>
>
>
>
>
> On Jun 1, 2008, at 12:47 AM, stephane ducasse wrote:
>
>> todd
>> do you think that magritte could help there?
>>
>> Stef
>>
>> On May 31, 2008, at 1:04 AM, Todd Blanchard wrote:
>>
>>> I watched the screencast.  It is not the same thing.  I think you  
>>> guys are missing something key in that project of yours.
>>>
>>> Active scaffold simply lets me point the app at a db and ZAM total  
>>> admin UI that looks nice with AJAX master detail editing.  I can  
>>> then filter out attributes that people ought not to edit, apply  
>>> permissions, and decorate the app with task links.
>>>
>>> The demo shows app development.  I didn't develop a thing apart  
>>> from specify some mappings because the database used weird and  
>>> inconsistent naming conventions.
>>>
>>> I also found it interesting that the app being developed in the  
>>> screencast didn't look nearly as sophisticated as the tools being  
>>> used to build it.  I don't find that a good selling point.
>>>
>>> -Todd Blanchard
>>>
>>> On May 30, 2008, at 4:28 AM, James Robertson wrote:
>>>
>>>> Cincom is doing exactly that - combining the ActiveRecord pattern  
>>>> with scaffolding.  Have a look here:
>>>>
>>>> http://www.cincomsmalltalk.com/userblogs/mls/blogView?showComments=true&printTitle=WebVelocity_alpha_screencast&entry=3388846573
>>>>
>>>> James Robertson
>>>> Cincom Smalltalk Product Evangelist
>>>> http://www.cincomsmalltalk.com/blog/blogView
>>>> Talk Small and Carry a Big Class Library
>>>>
>>>>
>>>>
>>>>
>>>> On May 30, 2008, at 3:13 AM, Todd Blanchard wrote:
>>>>
>>>>> With the idea that no good idea should go un-stolen, allow me to  
>>>>> introduce seaside fans to active scaffold http://activescaffold.com 
>>>>> .
>>>>>
>>>>> I am wrapping up a ruby on rails engagement with a client and  
>>>>> discovered this framework.  I ended up using ROR because the  
>>>>> client had an existing mysql database and Squeak's mysql support  
>>>>> isn't so hot where rails is all about mysql, and I had only a  
>>>>> couple "flows" but a whole lot of plain old admin-CRUD to do and  
>>>>> rails excels at plain crud on mysql.  With activescaffold - I  
>>>>> had to write very little code for the admin UI - a major plus  
>>>>> because this project is on a very tight timeline.
>>>>>
>>>>> Anyhow, activescaffold works with activerecord and infers a  
>>>>> really slick AJAX UI that supports sensible CRUD more or less  
>>>>> instantly.  Once installed, you can go through and customize  
>>>>> views by adding actions links, filtering columns, and generally  
>>>>> overriding bits of logic to make it more task focused.
>>>>>
>>>>> It would be really cool to have a similar facility in Seaside.
>>>>>
>>>>> Cheers,
>>>>> -Todd Blanchard
>>>>> _______________________________________________
>>>>> seaside mailing list
>>>>> seaside at lists.squeakfoundation.org
>>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>>>>
>>>>
>>>> _______________________________________________
>>>> seaside mailing list
>>>> seaside at lists.squeakfoundation.org
>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>>
>>> _______________________________________________
>>> seaside mailing list
>>> seaside at lists.squeakfoundation.org
>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>>
>>
>> _______________________________________________
>> seaside mailing list
>> seaside at lists.squeakfoundation.org
>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside



More information about the seaside mailing list