Monday, April 7, 2008

Google Summer of Code - Schedule of Deliverables

Schedule of Deliverables

May 26th: Discuss and finalize options for hosting the Buildout Builder. Begin initial code work. Phase one begins.

Week One (May 26th to June 1st): Familiarization with buildout system. Hand pick selected stack configurations and test buildouts.

Week Two (June 2nd to June 8th): Begin grok development, initiate website design.

Week Three (June 9th to June 15th): Develop a backend to the buildout system inside of grok, complete with unit tests. Populate the site with selected stack configurations in an automated, extensible manner.

June 16th: Phase Two Begins

Week Four (June 16th to June 22nd): Allow the first phase of the Buildout Builder to be previewed by the community, receive feedback, remove bugs. Hand pick recipe and product configurations. Test initial build outs.

Week Five (June 23rd to June 29th): Extend website to present users with forms for selected buildout options.

Week Six (June 30th to July 6th): Further develop the back to allow users to custom recipes and products.

Week Seven (July 7th to July 13th): Allow the second phase of the Buildout Builder to be previewed by the community, receive feedback, remove bugs.

July 14th: Phase Three Begins

Week Eight (July 14th to July 20th): Extend the buildout system backend to accept arbitrary eggs, recipes, and Plone products.

Week Nine (July 21st to July 27th): Work expected to continue from previous week.

Week Ten (July 28th to August 3rd): Allow the third phase of the Buildout Builder to be previewed by the community, receive feedback, removes bugs.

Week Eleven (August 3rd to August 10th): Assess current project status and final deliverables. Stop major development and move to testing, bug-fixes, and documentation.

August 11th: Suggested "Pencils Down" Date.

Week Twelve (August 11th to August 18th) Continue minor development, testing, bug-fixes, community feedback, and documentation. Deliver project in final deliverable state.

August 18th: Firm "Pencils Down" Date.

Google Summer of Code Terminology

Here's a list of the various technologies I've discussed in my application.


Python code is generally distributed in packages. These packages generally contain classes and functions relevant to each other, and are generally used in conjunction. A standard way exists of distributing these packages in the form of distutils.

Distutils
handles automatic installation python modules, in a simple, organized fashion.

Python eggs take the distutils concept a step further by allowing python packages to include metadata such as version indication and dependencies among many other options.

Zope
is a state of the art web application framework written entirely in python, it servers as building blocks for building rich web based applications. Zope is extensible by the creation or "products" based on it's framework. Zope 3 is the most current version at the time of this writing.

The Zope Object DataBase is an object oriented database written in python that handles the pickling of objects and is the underlying core of Zope.

Plone is a content management framework written on top of Zope that allows even further extension through Plone products.

Grok is a much simpler web-application framework built on top of Zope, with aims to be much simpler and more elegant, while preserving the power and robustness of Zope.

LabVIEW is a graphical programming language that excels in the lab environment. It is especially suited for test, measurement, design and validation of any type of electro-mechanical devices and systems.

Google Summer of Code Application

Buildout Builder - An automated buildout configuration system.

Kenneth Miller
xkenneth@gmail.com
713-562-4315

Abstract

The buildout system has become an extremely useful tool for python developers and has become the de-facto method of deploying Plone configurations. For development buildout allows sand-boxing of python packages, enabling a developer to experiment with different configurations without modifying the underlying python installation and as a distribution mechanism it is useful to manage and deploy multiple configurations of Plone sites for either development or production.

A major drawback is that the underlying architecture relies on setup file based configuration, and can prove daunting to inexperienced users. In order to ease development, save time, and attract new developer's to the system I propose the development of the Buildout Builder. In it's most generic form the Buildout Builder will be a web-based graphical user interface to the buildout system and while in it's most refined form the Buildout Builder will provide pre-configured or user customizable buildout configurations of Plone.

With automatically generated buildout configurations, users can deploy software in a few commands or less. The application will target experienced developers and non-technical users alike, aiming for ease of use while maintaining the granularity of the buildout system. The Buildout Builder will exist as a web-app written in Grok. With it's simplicity, power, and active development and user base, Grok should prove to be an excellent framework for quickly deploying a rugged, easy to maintain application. The Buildout Builder will facilitate Plone deployment and ease buildout development creating an influx of new users to both technologies.

Phases of Development

Phase 1

The Buildout Builder will in it's first form exist as a way to distribute pre-selected buildout configurations for Plone. The pre-existing Plone configurations will have product software stacks tailored for different applications, such as E-Commerce, Wikis, Social Networking, Blogging and anything else that's possible with Plone. The system will draw upon the latest versions of popular recipes and products dynamically to generate configurations. All configurations will be critically selected, with user feedback generating the creation of new and fine tuning of current configurations.

Phase 2

The second phase will improve functionality to allow users more granular control over what's included in a particular Plone buildout, allowing users to assemble configurations based from selected products and recipes. The Buildout Builder will allow users to upload and use a previous configuration as a starting point.

Phase 3

The third phase of development will move away from pre-selected configurations, products, and recipes. The user will be able to include any combination of publicly available recipes and python eggs, truly exposing the full functionality of the buildout system. The Buildout Builder will interface directly to the Python Package Index, allowing users to select hand-pick eggs and recipes. If time allows, the buildout system will be extended to auto-generate installers for Plone configurations. Documentation will also be developed during this phase. Documentation will provide information for maintenance and future development.

Deliverables, Development Schedule, and Definition of Success

Success is measured by the completion of phases one and two, complete documentation, and the amount of work done towards the third phase. The time allotted should be ample to completely develop and implement all phases. The final deliverable will be a buildout configuration, accompanying recipes and eggs that compose the application. The final state of the code will be sufficient for installation in a hosting environment with little or no modification. A main goal of the project is to have an existing installation hosted, and available to the public.

A detailed schedule of deliverables is available. http://xkenneth.blogspot.com/2008/04/google-summer-of-code-schedule-of.html

Biography

Interest
Over the past year I have become more involved in developing software based on Zope and Plone related technologies and I hope to gain a very in depth understanding Zope, Plone and Grok.

Education
I'm currently a student at the University of Houston working towards a Bachelors of Science in Computer Engineering Technology. My main area of interest is digital signal processing and embedded systems design. Although my discipline is not computer science, I have always had a strong interest in the field. I have a very strong background in very low level programming with C and assembly, as well as much higher level languages such as PHP, C++, and Python. I've taken courses in subjects such as objected oriented design and data structures and hope to broaden my knowledge this summer with a course in automata theory.

Industry Experience.

Texas Instruments

I spent four years working at Texas Instruments as an applications engineer. I developed a web-based competitive analysis tool in PHP with a MySQL back-end. The tool encompassed user management, profiles, and user generated content, all written from the ground up. I developed a tool for quality and spectral analysis of analog to digital converters embedded in micro-controllers. The tool consisted of a hand written bare bones OS running on the ARM architecture that interfaced to a LabVIEW based control system and allowed users to analyze results and generate reports. I developed an application in LabVIEW for automatic detection of device validation requirements, selection, compilation and execution of pertaining test-cases, and automatic generation of results.

Teledrill

I currently work as a system design engineer for an oilfield start-up. Teledrill's primary goal is to develop a state of the art measurement while drilling tool. My projects include a python driven surface system, a web-based user driven interface that serves a number of purposes. It is used to configure the device, to receive, decode, display, and catalog the data the device transmits to it, as well as to provide the data to both other machines and humans in a number of various formats. The system relies completely on python technologies for analog data acquisition, web-based data display, protocol demodulation, data storage, and data relay. I've also taken on the task of managing our infrastructure including networking, software deployment, configuration and deployment of desktop and server systems.

Open Source Development Experience

I'm currently spear-heading an open source project titled "Python XML Serial Architecture." This is an effort to create a standard XML and Python driven interface to micro controllers and devices that use a proprietary or non-standard serial based communications protocol.

Conclusion

I've learned from my experience that I have a strong passion for automation and embedded design. The experience I have gained in the automation of complex processes allows me to have a clear view of what is required to complete this application. At its most basic level this project is the automation of time consuming repetitive tasks. An easy to use, web-based graphical user interface, will save users time, attract new developers, and spur the growth of the community surrounding these technologies.

Terminology: http://xkenneth.blogspot.com/2008/04/google-summer-of-code-terminology.html