|Proposed by Paul Kuzovkin (profile, biography) Don't forget to submit this proposal to official Google Melange site too!
How will I do that project
This project will be based on and continue my (current) diploma work. I see the following objectives for the GSoC project:
- Improve and generalize existing engines
- Enhance, test and document source code
- Create UI tools for creating and control presentations
- Introduce other new useful features
What methodologies will I use
I'm aware of some of modern methodologies like agile practices and TDD in particular, but my real-life experience in this area is very limited. I discussed this problem with the project mentor and he promised to provide as much help as will be needed here.
At this point, we have a general plan (see below). It presents several milestones. At the beginning of each iteration we will have a planning session aiming at adjusting our schedule in accordance with current state of the project. Thus, we want to use an iterative/incremental development process. We'll try to keep iterations as short as possible dividing complex tasks into smaller and easier subtasks.
I'd like to use TDD for this project but I'm afraid it will be too complex as (1) a large part of the project is UI development (which is known to be problematic for TDD) and (2) I have not enough experience in TDD. So, we decided to leave this decision until project start and see how it will go with and without TDD.
Suggested timeline and milestones
By the start of the project, I expect to have some basics of presentation framework with the following features:
- Large (eventually, unlimited) workspace (scene)
- API for adding morphs to the scene
- API for moving cam over the scene and showing those morphs
- Cam should support scaling (though currently I have some problems with this feature, I expect to overcome them and finally implement this feature)
- We can script camera movements; basically, this allows us to run presentations
- Presentations are divided into several steps ("slides"): each step moves camera over a predefined path and pauses at the end; to go to the next step a user should press a key
- At any point a user can pause presentation, change it, rewind or forward wind it and continue from that point.
Taking this into account, we plan to complete the following tasks during GSoC:
- Improve camera engine (should be accomplished by 05/28)
- Introduce "animate-by-signal" feature for morphs (e.g., morph should be animated when camera approaches it) (by 06/04)
- A collection of generic components (morphs) commonly used in presentations (by 06/18)
- A palette presenting these components and allowing to drag-n-drop them on scene (by 06/25)
- Code refactoring, introducing tests; perhaps rewriting some code using TDD (by 07/09)
- Implement a control panel to start/pause/continue/rewind/etc. presentations (by 07/16)
- Introduce facilities to structure presentations by tagging particular slides, parts, etc. (by 07/23)
- Document everything (by 08/07)
I take a week as a "buffer" (in case I'm over-optymistic about complexity of these tasks and time needed to fullfil them). If the plan is correct, I'll use this time to introduce additional components, refine code and document.
Where I see the risks
Our estimates might be too optimistic. To avoid problems of this kind, we (together with mentors) will constantly track our progress and change our plans accordingly by choosing tasks with higher priority and putting aside less important ones, re-specifying complex problems by dividing them into simpler subtasks, etc.
I suppose, we can experience technical problems concerning Morphic internals. Here, I rely on Smalltalk openness and power, and anticipate help from mentors and Smalltalk society.
How the results will look like
I intend to create a working prototype of a highly interactive system for creating dynamic and visually appealing presentations. I hope, this system will become a basis for an innovative software to write, explore, evolve and share ideas.