Google Summer of Code 2008 - Project Proposal
Senaka L. Fernando
senakafdo AT gmail DOT com
Senaka DOT Fernando AT cse DOT mrt DOT ac DOT lk
senakafdo AT gmail DOT com
Create a nice demo using Apache Qpid across all supported languages
Apache Qpid is a real world implementation of the Advanced Message Queuing Protocol, AMQP, . It implements the specification, as well as several related technologies such as transaction management, queing, distribution, security, and heterogeneous multi-platform support.
The most interesting fact about the project is that its multi-platform as well as multiple-language support. Being yet a relatively young project, still under incubation, Qpid needs that extra bit to graduate and reach higher avenues.
My role in Qpid, is to strengthen one of its most important aspects, demos, which at present are scarce. And even more interestingly, I will be writing real world applications using Qpid in multiple programing laguages. These will ideally run on multiple platforms and will also serve as a prime test case for Qpid.
The project, qpid-demo, , or "Create a nice demo using Apache Qpid across all supported languages", will serve as a means of faclitating my effort in making taking Qpid a step closer to its community, whilst on one hand ensuring its proper functionality, by achieving its expectations.
Apache Qpid is based on several programming laguages, such as Java, C++, Python, C#.NET, and Ruby. However, we don't have any samples or demo applications covering all languages. My starting point will be to come up with one such application that can demonstrate the usability of Qpid in all supported languges.
Advanced Message Queuing Protocol, AMQP, defines a mechanism to transfer resources between clients that connect to a service broker, same as HTTP, FTP, or SMTP, but with the ability to ensure interoperability between middleware. Thus, in terms of a demo, one would rather like to see a typical message transfer in action. Thus, the idea of a text, Audio/Video conferencing demo application was born. In order of one to experiment how the information is transfered using the AMQP protocol, a Transport level monitoring engine, that runs as a command line client is used.
The implementation plan for this project will see the addition of a fully functional sample in Java, which would later be extended to other languages as well. Each client will also contain associated documentation and step by step guidelines to how one could choose to write his/her own application.
Within the demo, various aspects of Qpid will be exploited. An example is, the ability to manage a transaction. Within my demonstration, the transaction management feature is utilized in several ways. For instance, if the sending of a message failed, the application will identify the cause from the returned exception, and perhaps resend or notify its user. A message can either be text, audio or video.
Once I'm done with this implementation, I believe that Qpid would experience several gains.
- Better examples when compared to the present ones
- Serves as a test case on Qpids multi-language implementation
- The demo can be further extended per each new feature added (which is one reason to why a messenger-like client is the ideal choice)
- Documentation on how to write clients on various platfroms
- Several fixes to existing bugs on various execution paths
- The ability to boast the true capability of the AMQP Protocol
In addition to simple sending and recieving messages over the wire, I would also be having several other features within my demo application that targets various aspects of the Qpid implementation. For instance, the ability to monitor status of the server, as well as my peer will be exploited. In addition to that I will leave room for extending the capability of the demo, simply to serve as a starting point for a potential user. For example, the ability to pluggin a database at the service provider to store credentials of its users.
The broader achievement of this project will be taking Qpid a step ahead of what it is, and expose various features of the system which were upto now limited to written articles and documentation. Thus, a flawless utilization of Qpid within the scope of this demo will always be a guranteed fact.
- Architectural design of demo application
- Java demo application
- C#.NET demo application
- C++ demo application
- Ruby demo application
- Python demo application
- Documentation on how to write demo applications, and as a whole how to utilize Qpid using various programming languages
April 15 - April 30: Understanding the Qpid Architecture as well as various tools required to develop my application available in each language that I develop.
May 1 - May 15: Developing a initial design of the architecture of the demo application
May 16 - May 24: Evaluation of the architecture of the demo application within the Qpid developer community
May 25: [Milestone 1] Initial Architectural design of demo application uploaded to wiki
May 25: Issue regarding the addition of a new demo is raised on the Qpid JIRA
May 26: Coding of project begins
May 26 - June 5: Coding of Java demo application with a basic subset of features
June 6: [Milestone 2] Basic Java demo application
June 6: First patch submitted to Qpid JIRA
June 7 - June 20: Fully implement demo application on Java
June 21: [Checkpoint 1] A satisfactory client in Java should be available and usable
June 21: [Milestone 3] Complete Java demo application
June 21: Second patch submitted to Qpid JIRA
June 19 - June 29: Fully implement demo application on C#.NET
June 30: [Checkpoint 2] A satisfactory client in C#.NET should be available and usable
June 30: [Milestone 4] Complete .NET demo application
June 30: Third patch submitted to Qpid JIRA
July 1 - July 7: Fully implement demo application on C++
July 8: [Checkpoint 3] A satisfactory client in C++ should be available and usable
July 8: [Milestone 5] Complete C++ demo application
July 8: Fourth patch submitted to Qpid JIRA
July 9 - July 14: Preparation and submission of Mid-Term evaluation
July 15 - July 25: Fully implement demo application on Ruby
July 26: [Checkpoint 4] A satisfactory client in Ruby should be available and usable
July 26: [Milestone 6] Complete Ruby demo application
July 26: Fifth patch submitted to Qpid JIRA
July 27 - August 3: Fully implement demo application on Python
August 4: [Checkpoint 5] A satisfactory client in Python should be available and usable
August 4: [Milestone 7] Complete Python demo application
August 4: Sixth patch submitted to Qpid JIRA
August 4 - August 11: Documentation of demo application covering all languages
August 11: [Milestone 8] Well documented demo application working on multiple platforms
August 11: Seventh patch submitted to Qpid JIRA
August 12 - August 17: Gathering community feedback, trying out on multi-platforms and improving implementation
August 18: [Milestone 9] Stable demo application running on multi-platforms in multiple-langauges
August 18: Eighth patch submitted to Qpid JIRA
August 18: Development ends
August 19 - September 1: submission of Final evaluation
September 3: Submitting approved patches on JIRA as references to Google as required
The project, Qpid-demo, will involve the participation of both Qpid developers, as well as Qpid users. I have already started discussions on this project in the developer mailing list of Apache Qpid (qpid-dev AT incubator DOT apache DOT org) and am actively participating in discussions regarding the implementation of this demo. The Qpid community has shown great deal of interest to my proposals, and I have received positive feedback and support from the community, who are interested in supporting this project. I'm certain that I will continue to receive support and feedback throughout the duration of this project.
I'm a student at the Department of Computer Science and Engineering at the University of Moratuwa, Sri Lanka. I'm at present reading for my Bachelors in Engineering. I have completed three years at the university, and will be starting the fourth in May 2008. I have over 3 years of experience in C/C++, C#.NET and Java projects. I'm also familiar with other programming languages such as Python and Ruby.
I have been involved in many open source as well as non-open source projects both within the university and outside. I have hands on experience in developing C/C++ applications as well as C#.NET applications in an industry level. I recently completed my industrial training at WSO2 incorporated,  where I was involved in C/C++ development activities. I'm also an active contributor various C#.NET and Java forums within the university.
My involvement with Qpid is motivated by an interest in developing real world applications that would benefit broader audiences, as well as understanding newer concepts in the software industry. I'm also looking forward in improving my visibility within the Open Source community through openings such as the Google Summer of Code. I have been a user of many open source technologies of which I have largely benefited. But, until very recently I have not been a developer active in the open source community.
My interest in become an active contributor to open source as well as engaging development activities in multiple languages is the prime motivation of participating in the Google Summer of Code 2008, taking the project, Qpid-demo.