GSoC : Seaside and Sails : A generation code tool

=== Abstract ===

This proposal will provide, by the end of the summer, a tool that bring a structure generation to Seaside. This piece of software enhance Seaside with generators tools, commands and conventions that help programmers to develop CRUD-style web applications in Seaside in a much faster approach. Other of the goals of this project is create an extensible code generator that provide the infrastructure to develop custom generator easily

Create, retrieve, update and delete (CRUD) are the four basic functions of persistent storage, a major part of nearly all computer software. Also Each letter in the acronym can be mapped to a standard SQL statement. CRUD forms the basis of most dynamic websites in that they generally have data and function that:

* C reate new records (INSERT)
* R ead existing records (SELECT)
* U pdate existing records (UPDATE)
* D elete existing records (DELETE)

While you’re developing web applications, especially those which are mainly providing you with a simple interface to data in a database. Scaffolding is a proccess that generate the basic classes to create a CRUD-style web.

When creating or editing an entry, Sails scaffold will do all the hard work of form generation and handling for you, and will even provide clever form generation, (via extensibility).

This tool provides a model and its views, as starting point to development, which allows you to see add, delete, show and list the model data. Also the scaffolding process will generate test methods.

Other frameworks scaffolding creates text files that, when run, create the actual class. Sails shouldn’t create a script, but instead create the class immediately.

=== Why scaffolding ? ===

1) Scaffolding provides clear directions : Offer step-by-step directions to develop just what developer must do in order to meet the expectations for the learning activity

2) Scaffolding clarifies purpose : Why are we doing this? Scaffolding keeps purpose and motivation in the forefront.

3) Scaffolding keeps students on task : By providing a pathway or route for the learner,

4) Scaffolding offers assessment to clarify expectations :From the very start, scaffolded lessons provide examples of quality work done by others.

5) Scaffolding reduces uncertainty, surprise and disappointment :

7) Scaffolding delivers efficiency : If done well, a scaffolded templates should nearly scream with efficiency.

=== What make scaffolding and the order command for us ? ===

* One-step creation of components using a template, including models and views. (probably using Magritte)
– The model
– The view with the four basic operation method. Create/read/update/delete (CRUD), list and style method,
– The database scheme

* Easy creation of tests: using Sunit
– unit tests
– functional tests
– performance tests

* Easily connect to persistence layers, create the basic features for CRUD operation in the model. (probably using glorp)

* Help int the deploy application generating a set of commands that :
– Start the server. // WAKom startOn: 9090.
– Register the application // registerAsApplication:
– ….

* Only database Configuration of this tool will be necessary. Code convention over code configuration.

=== Benefits for The Seaside Community ===

Seaside will be powered by a structure code generation. It will accelerate the development cycle, supporting generation for models, views, test, and allowing the user to design and implement custom generators.

While a new framework has a shallow learning curve for Java, JSP, PHP, Python guys, Seaside is much, much different. Structure generation drastically lowers the learning curve by teaching the conventions through code instead of documentation.

=== Development plan : ===

The next planning describe the different milestones of the project. will probably vary during development.

1 Research (1st week)
* Identify the best practices, code conventions and structure convention of a Seaside application
* Identify the common manual task in a Seaside development cycle
* Identify Smalltalk idioms
* Define the commons action in all the task (create a class, define methods, …)

2 Implement the kernel classes, with only basic features. (2nd week)

3 Integrate Magritte with the kernel of the framework to generate the views (3rd week)

4 Integrate Sunit with the Kernel framework to generte unit test (4th week)

5 Implements connectors to the database. (Using glorp) (5th week)

6 implements helpers to deploy the application (6th week)

7 Adding Generator class loaders.(6th week)

8 Implementation of user intefaces (commands for the workspace) (7th week)

9 Extensive testing (Unit Testing)(8th week)

10 Documentation and tutorial. (8th week)

=== Basics generators class hierarchy ===

The next hierarchy is a first approach and must be take like a sketch not like a final version,it will be improve or refactoring. Its represent the object hierarchy.

|– BaseGenerator
| |
| |– ApplicationGenerator
| | |
| | |– seasideAppGenerator
| |
| |– TaskGenerator
| | |
| | |– ModelGenerator
| | |
| | |– ViewGenerator
| | |
| | |– TestGenerator
| |
| |–
| |
|– scriptsDeployGenerators
|– gen // a command line (workspace) for the generators.

=== Related programming techniques : ===

* Reflection.
* Metaprogramming.
* Structure code generation.

=== Related frameworks: ====

* SUnit
* Magritte

=== About me: ===

I am 28 y.o., and I am 5th year student of Computer Science at Universidad de Granada, Spain. I’ll graduate in about 9 month. My interests are virtual machines, web technologies, object-oriented systems, functional languages and many other things.

I work in software company in Hamburg, Germany. My current duty is Ruby/Rails development. My graduate work in university is dedicated to applying Latent Semantic Indexing to natural languages processing.

I also have extensive experience in the Linux-Tomcat-Java-Struts architecture.

My relevant skills include proficiency in C, Java, Lisp, Ruby the standard GNU development tools (gcc, automake, etc.), Java tools (Xdoclet, ant, maven), CVS/SVN, and a host of other smaller languages and tools. I’ve been involved in the open source community for a while. I help to build and configurate Gforge (sourceforge) site for the Java spanish spoken community.

=== Motivation and interests: ===

Why I want to take part in it… I’ll be honest. I saw Seaside at the first time, when I read a post ‘on smalltalk blog’ comparing Rails vs Seaside a month ago. I was surprise about this new way to develop web application. And I liked it.

In my first year in the university I have gone to a ground OOP course using Smalltalk.

I spend the last year working with rails. I wrote custom generators and rake task for my employer. I love ruby/rails tools, like rails_generators system or rake, and the way they reduce the time i spend in front of the IDE.

So, I think, I can do this task.

=== Available time: ===

In the beginning of the project (to the end of June), I will be somewhat limited by school – our semester ends by the end of May, followed by one month reserved for exams. During that time, I will spend some time learning and doing exams, so I cannot commit myself into this project fully during June. But I am sure I will be able to find time. After that, I will have 2 months holiday that I plan spending fully for the project.


3 comments so far

  1. Jayasimha Makineni on

    Hi Pedro,

    I want to work with you on this idea.

    Please give me some leads so that I can start immediately.


  2. Home Improvement Resources on

    Thanks for sharing this information. Really is pack with new knowledge. Keep them coming.

  3. Oblireeenlard on

    Tahnks for posting

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: