I want an online form builder

I see a form consisting of the following elements:

objects -> fields
presentation = layout + style

I want to be able to build forms programmatically like this:

account_form = new form()
account_form.add_presentor(account_html_layout, site_style)
account_form.add_validation_rule(min_length(account.first_name, 2))
account_form.add_trigger(onblur(account.first_name, validate(account.first_name))

presentation = layout + style

A form should be a first class object that understands the “form data object” (thinking like struts 1 form beans) and can be validated and rendered.

account_form.render() // renders using the default (or only in this case) presentation unless specified

Maybe I don’t want to add a presentation to the form, I want to call

account_html_presenter = new presenter()
account_html_presenter.layout = account_html_layout
account_html_presenter.style = site_style


account_presenter.render(account_form, html_presentation)

so I can define what an account business object is, then have the form understand it (like a bean) and be able to attach presentation, validation, and triggers. It could inherit default presentation and validation rules based on typing and meta-data (such as numeric only characters for an integer field, or an input with size=15 for a varchar(15)), and of course the defaults can be customized.

Fields can be inferred from the objects, or added/removed based on need. The tricky part will be in being able to pass validation and presentation info to inferred fields like I demonstrated above.

A presenter could include a label, an input, and decorators (like an asterisk denoting required, or a help icon) and conditional decorators (like a validation error notification) or conditional formatting (like changed length after text is entered) or conditionally disabled fields (such as submit before checking “Accept”)

Looking for Google wave/docs/appengine project

I posted the following ad on Craigslist.  It’s an experiment in looking for customers with good ideas.  It will potentially help me find a good customer — and (hopefully) for them find a good developer.  Without the big upfront commitment.

But it’s also an excuse for me to learn the Google platform.  I could make my own small project, but I don’t have the discipline to limit the scope and delivery of my own projects — and even if I do, I don’t know if anyone will want them.  This is a way to find out what someone really wants.

I’m a freelance software developer specializing in custom development for small businesses.

I’m looking for a new project using Google Wave, Google Docs, and Google App Engine. If you own a small business and have an itch that needs scratching, I’m willing to do the work for free. That’s right. Free software development.

Here’s the catch:

I’ve never used these tools. I want to find a real project to work on that I can use to learn them. So it might take a while. I might make mistakes. I don’t make any guarantees. And the project has to interest me.

What do you have to lose?

Nothing. Maybe a little of your time from collaboration.

What do you have to gain?

A working application that solves a real problem your business has. Productivity gains, more customers, and (I like to think) most valuable of all — a working relationship with a software professional, the quality of whose work you know.

How does it work?

Submit a project proposal to me by email or via my website at http://broadreachsales.com/googleproject
I’ll select one project to work on for FREE from any proposals.

Criteria for selection

I reserve the right to select whatever project I want for whichever reasons I choose. But here are some criteria I’m looking for:

  • A good use of Google Wave, Google Docs, or Google App Engine. I’m looking for something that uses these tools to their best extent. If it’s a better fit for a typical web application, or if it needs a standard content management system or shopping cart, I’m probably not interested. I’ll make exceptions for creative integration with other applications.
  • A real business use. Not some speculative idea. I’m not looking to build a product for startups. I’m looking for an itch that needs scratched for a proven business.
  • A limited scope project. I’m targeting about 1-2 months of work, but plan for something you think could be developed in 1-2 weeks. Not only am I learning a new platform (which could slow me down considerably) but the nature of collaboration is that it always takes longer than you think, especially communicating your ideas and feedback. We can work together on limiting scope for the right larger project.

HTML5 not needed

I posted a comment on a post about HTML5 and client-side SQL by Kas Thomas at assertTrue.blogspot.com.  It talks about–

The Los Angeles Times story about Google deprecating Gears in favor of “HTML5”

–and goes on to discuss that Apple, Google, and the W3C are pushing for an HTML5 spec that includes, in essence, SQLite.  Microsoft doesn’t like it, and he goes on to speculate that Microsoft could become irrelevant if this standards committee endorses something in the HTML5 spec that Microsoft will not implement.

Doesn’t it seem more likely that the W3C will become irrelevant if it disregards 99% of the web browser market share. Maybe they’ll have a niche documenting standards for a minor vanity cell-phone maker.

As for Google, they have a popular webmail client (because it gives you lots of storage space), and a formidable banner ad network, but I don’t see users dropping their featureful browsers so they can load more banner ads which track their usage better and have access to their computer’s hard drive.

Rich internet apps have a place. And HTML can be used to display them. And it will, sometimes. But HTML5 won’t matter. It doesn’t do what’s needed for display and it tries to do what’s not even wanted.

Not to say the Microsoft is a saint in all this. They just have their own competing implementation that they want to remain incompatible. They have an incentive to not let Adobe or someone else (It won’t be Google or Apple) build browser-embedding apps that could potentially be cross-platform.