1 [[!meta title="Clockworks"]]
3 Hey guys, I heard there was this app called [Doodle](http://www.doodle.com/main.html). It's closed source. Let's make an open-source Doodle killer and call it Clockworks!
5 We have a mailing list - if you're interested in helping design the
6 app, just [let one of the developers know](mailto:clockworks@mit.edu)
7 and we'll add you to our mailing list, **clockworks**. Or if you just
8 want to hear more about what we're up to, blanche yourself to the
9 public list **clockworks-announce**.
13 Clockworks is in pre-pre-alpha phase; most of the functionality hasn't been done yet.
15 The best way to get started with Clockworks is to get yourself added to the project, grab a copy of the code, get it running on your laptop, and then poke around the source code. We also have a Hiveminder project with bite-sized tasks that you can work on (ping a project maintainer to get invited.)
17 First, make sure you have Git installed on your system. You can grab it [here](http://git-scm.com/download). Verify that it installed by popping open a terminal and running **git --version**
19 Next, grab the source code. If you have Debathena installed on your machine, you can clone the source using **git clone /mit/clockworks/clockworks.git**. If not, you can use a dialup to get to the directory; **git clone ssh://username@linerva.mit.edu/mit/clockworks/clockworks.git** works well. If the clone succeeds, you will now have a folder named "clockworks". **cd clockworks**
21 Now, to install the application. Assuming that you have a reasonable version of Python on your system, running **./nosudo-virtualenv.sh** should set up the environment. If it succeeds, you'll see the help output for a command named paster.
23 Run the application by changing into your environment with **source tg2env/bin/activate** and then typing **paster serve --reload development.ini**. And voila; a very boilerplate TurboGears install should be facing you at http://localhost:8080
25 If these steps fail (which happens on some configurations of OS X and almost invariably on Windows), talk to us and we can get you set up with a copy running on scripts.mit.edu or xvm.mit.edu.
27 Once you're running, here are some paths to take:
29 1. Take a break and read some TurboGears documentation to get a feel for the framework
30 2. Browse through the todo list, pick a task that seems interesting, and start working on figuring out how to make it work
31 3. Browse the source, fiddle with some variables, see what changes
32 4. Decide what clockworks should look like, and take off
37 Our Git repository is located in AFS in the clockworks locker: /mit/clockworks/clockworks.git
41 Doodle clone. 100% duplication of Doodle functionality. Modifications to improve usability as necessary.
45 What do people not like about Doodle?
48 * We can deal with this by collapsing the three-page wizard Doodle has into a single page. Be careful not to sacrifice too much simplicity for such a setup.
49 * No obvious "I can, but would rather not"
50 * Alleviated also by the above; this might want to be the default poll setup.
51 * Trac, one of the first Python web applications to hit mainstream, was long bemoaned for being complex to install. Try not to have the same story
55 * <del>Work through the [TurboGears tutorial](http://docs.turbogears.org/1.0/Wiki20/Page1) (the tutorial seems to focus on SQLObject, which is not necessarily the best thing. Maybe someone can find some better docs?)</del>
56 * <del>Setup database configuration and installer (an auxiliary issue is the presence of an installer for people). (**ezyang**)</del>
57 * Learn SQLAlchemy (**ezyang**)
58 * <del>Make sure the default scaffolding works on Scripts (this includes running TurboGears as CGI). Any work done here should be considered for a TurboGears auto-installer, the equivalent of tgsetup) (**ezyang**)</del>
59 * <del>Write a .gitignore file for generated/not versionable items</del>
60 * <del>Get friendly URLs working</del>
61 * <del>Setup a zephyrbot that watches the repository</del>
62 * [Configure](http://turbogears.org/2.0/docs/main/Config.html) the default TurboGears scaffolding
63 * Learn [Genshi](http://turbogears.org/2.0/docs/main/Genshi.html), the templating engine
64 * Learn [Widgets](http://turbogears.org/2.0/docs/main/ToscaWidgets/forms.html) (we'll be using them for all of the forms in this website)
65 * Polish up and get SSL authentication working with TurboGears Identity (the two should be integrated together in a sane manner.)
66 * Write model classes for all of our tables
67 * Write controllers for each of the pages
71 * **Language**: Python 2.5+
72 * **Framework**: TurboGears 2.0
74 * **JavaScript**: Mochikit
75 * **Database**: SQLite for development, ? for production
77 * **Templating**: Genshi
81 * Use 15 minute timeslices to simplify interface
91 You can view the database schema in *model.py*. Some notable features:
93 * All `user.user_id` foreign keys are paired with an `anon_name` field. If user_id is null, then the associated entity was posted by an anonymous user, and `anon_name` contains the name they submitted for themselves
94 * The current `time_slots` table uses `DateTime` and `Interval` to define events. We should consider whether or not 15 minute timeslices will be the native representation in the database, or simply a simpler model for the interface
95 * `length` is likely common through all possible times for an event, so it's stored in both `time_slots` and `event`
96 * `events.timezone` represents the timezone that the event is occurring in, so we can give user-friendly times. If this field is null, then the creator's `user.timezone` field is used (if that is also null, we should probably use EST)
97 * `key` and `admin_key` in `event` refer to random values that will compose the URLs for events.
98 * For full backwards compatibility, `hidden` and `extended` are stored as boolean attributes (the former refers to hiding the responses of users, the latter refers to allowing Yes/No/IfNeedBe responses). We may want to consider an alternate model for these properties
99 * The schema is not very generalized. Certain parts should definitely be generalized, but let's try to avoid the architecture astronaut syndrome.
103 List of "screens" in Doodle
105 * **/**: Home page (including login)
106 * **/help**: Help pages (screencasts, interactive JavaScript, etc.)
107 * **/new**: Schedule event (should be one-page-able)
108 * General info (title, description, name, email)
109 * Days (calendar, should be AJAX)
110 * Times (timezone (JS fill-in), add more timeslots, copypaste first row)
111 * Options (yes-no-ifneedbe, hidden poll, limit OKs)
112 * Poll created (admin, participant links)
113 * **/events/*event-name***: View poll (timezone, name, times, information, functions)
114 * **/events/*event-name*/edit**: Edit entry (completely wiki!)
116 * **/events/*event-name*/comment**: Add a comment
117 * **/events/*event-name*/export**: Calendar export (both ways)
118 * File export (excel, pdf)
119 * **/events/*event-name*/feed**: Subscribe (atom, and then social feed services)
120 * **/events/*event-name*/embed**: Embed poll (iframe)
121 * **/events/*event-name*/admin**: Admin poll (participation link)
122 * **/events/*event-name*/admin/edit**: Edit poll (all original options)
123 * **/events/*event-name*/admin/history**: History
124 * **/events/*event-name*/admin/reset**: Delete all participants/comments
125 * **/events/*event-name*/admin/delete**: Delete poll
126 * **/signup**: Signup page
127 * **/myclockworks**: List of polls created by user, list of polls the user has participated in, links to creating a new event
128 * **/myclockworks/account** provides links to the following four links
129 * **/myclockworks/changeEmail**
130 * **/myclockworks/changePassword**
131 * **/myclockworks/editInformation**
132 * **/myclockworks/delete**
133 * Note: Doodle functions by creating two links per event: one for the public and one for administrator, but anyone can follow either link if they know what it is
137 Doodle killer. Extra features. Pump it up.
141 * Basic: integration with ICS calendars, GoogleCalendar, Exchange, and TechTime (for faculty)
142 * Advanced: integration with MIT's course schedules, Facebook
143 * Would store persistent profiles of calendar data for users
144 * Automatically prioritize and schedule events for you
145 * Create mobile phone friendly version
146 * View of a single calendar month should show "ghosts" of days from immediately previous and immediately past months, to fill out all the weeks.
147 * Ability to convert Yes/No polls into Yes/Maybe/No polls (and vice versa)
148 * When setting up a new poll, ability to copy-paste the times for any arbitrary row into any number of other arbitrary rows
149 * "Generic week" function
150 * Indicates that the response is for a weekly meeting, not a specific date.
161 * <a href="mailto:clockworks@mit.edu">You?</a>