diff --git a/MeetingAgendasNotes.md b/MeetingAgendasNotes.md
new file mode 100644
index 0000000..d59c56f
--- /dev/null
+++ b/MeetingAgendasNotes.md
@@ -0,0 +1,2477 @@
+# Meeting Agendas and Call Notes
+
+The Melange developer team holds a weekly meeting via Skype conference each Monday at 17:30 UTC. This page serves as a collection point for meeting agendas and the notes resulting from each call.
+
+# Latest Meeting Agenda & Call Notes
+
+
+
+# Past Meeting Agendas & Call Notes
+
+
+
+## 17 Oct 2011 Team Conference Call
+**Chaired by:** Sverre
+
+**Notes taken by:** Akeda
+
+  * Mario and Orcun were absent.
+  * Akeda is working on participant dashboard and will add missing links.
+  * Sverre won't able to attend to the All-Hands and has issue with his thesis.
+  * Lennard and Madhu have been working a lot on GCI as seen on commit logs.
+  * Leo will help Madhu and Lennie in case need to add more test.
+  * Daniel will work on invites/requests and ranking over the next week.
+  * Praveen is likely won't able to attend to All-Hands too, has some issue with his visa.
+
+## 26 Sept 2011 Team Conference Call
+**Chaired by:** Sverre
+
+**Notes taken by:** Praveen
+
+  * Mario, Madhu and Orcun were absent.
+  * Akeda will work on the initial admin dashboard for GCI.
+  * Sverre is still working on GCI Forms.
+  * Lennard is working on GCI data conversion.
+  * Leo still has some problem with the test utilities. He will work with Lennard to sort out the issue.
+  * Daniel is still working on the GCI Profiles that include new template too. He was waiting for the generic template that Madhu was working on.
+  * Praveen has his interview regarding visa scheduled for Thursday after being refused the first time.
+
+## 19 Sept 2011 Team Conference Call
+**Medium:** Skype
+
+**Chaired by:** Sverre
+
+**Notes taken by:** Orcun
+
+  * Madhusudan, Daniel were not present. Praveen had connection problems on his device and couldn't attend the meeting properly.
+  * Leo have finished base Django test case for GCI.
+  * Lennard fixed some conversion tasks.There are some open issues blocking his works. He wrote an email to Madhu for them.
+  * Akeda was busy with his school works and visa. He is going to go for the visa interview and will catch up after then.
+  * Orcun is waiting for review of his patches. He is reading commit logs to understand the GCI.
+  * Mario was busy with interview for job conversion after his internship with Google.
+  * Sverre worked on documents and program stuff. But forms are not ready so they're not useful yet. He and Daniel will work on forms together.
+
+## 12 Sept 2011 Team Conference Call
+
+**Chaired by:** Sverre
+
+**Notes taken by:** Akeda
+  * Praveen, Leo and Madhu were absent.
+  * GCI was nearly deadline. Sverre warned everyone to catch up his work.
+  * Lennie has been working on template based on the mockup delivered by ED. He will be working on the dashboard and student form.
+  * Sverre will be working on document page, request/invite page and embedding calendar on timeline page.
+  * Mario and Daniel will be started to put their hands on GCI, propbably, next week.
+  * Akeda was preparing his visa and waiting the response for interview schedule. He was assigned in the Phase V of GCI (admin dashboard).
+  * Orcun will be working on the rest of the patches. He also busy with his visa and need to go to Istanbul for visa interview.
+
+## 5 Sept 2011 Team Conference Call
+
+**Chaired by:** Lennard de Rijk
+
+**Notes taken by:** Praveen
+  * Leo has completed the GCI Test setup and he can provide more helper functions in profile utils as the need arises.
+  * Lennie was a bit involved in the paper work for US, so he has scheduled his time to work more on the task view the next day.
+  * Madhu has finished the back end for the task edit page. He needs the front end to be delivered by EchoDitto to complete the view. He will continue to work on the task edit page during the week.
+  * Sverre was unable to work on GCI as he needed the stuff yet to be delivered by EchoDitto. Lennard suggested him that he could work on the program edit page, mentor/admin invites/requests for GCI. Sverre agreed to work on it.
+  * Daniel will work on student/mentor/orgadmin profile edit page.
+  * Orcun did not attend the meeting.
+  * Praveen and Akeda are currently working on to complete their rest of the patches.
+  * Sriharsha Chillara, a new contributor introduced himself to the Melange community. The developers suggested him to read about GAE and Django.
+
+## 29 Aug 2011 Team Conference Call
+
+**Chaired by:** Lennard de Rijk<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Leo is working on profile utils for GCI. He will be able to finish most of it, if not all, before next Monday.
+  * Madhu will continue working on the create task page for now.
+  * Lennie should be able to do more with the task list soon.
+  * A surprise gift was given to GSoC students.
+
+## 15 Aug 2011 Team Conference Call
+
+**Chaired by:** Leo (Chong Liu) <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Orcun finished Spreadsheet Export, will send all patches today, and start to work on Carol's issue. He plans to finish them before the end of gsoc. After gsoc, he will continue to work on other issues assigned to him after one week's break.
+  * Praveen worked on testing gsoc.views.org\_profile, profile\_show, accepted\_orgs, proposal\_review and duplicates. He met some difficulties and will be discussing with Leo about them. Leo suggested him to correct all the pending tests and then submit them for review. After gsoc, he plans to implement functional tests and then work on buildbot.
+  * Akeda revised his patch for account management (already sent to the milist) and program assigned for host (sent to Daniel). He is still working on generic iconic dashboard. Before GSoC ends, he will be delivering generic dashboard, so it can be used for GCI too. He will try to stay after GSoC if there's thing to deliver. Leo told him that there will always be something for him and other gsoc students.
+
+
+## 8 Aug 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Akeda completed account management with the test, adding user as a host and generic dashboard. The changes, however, broke test\_admin.py and test\_dashboard.py. He will fix the tests before sending it for review.
+  * Praveen tested gsoc.views.duplicates, worked on the access check functions, and added a few more tests to gsoc.views.org\_profile and profile\_show. He hopes to finish the tests for all the views by the end term.
+  * Orcun worked on the feature of exporting an empty spreadsheet with "export list" button. After finishing the spreadsheet functionality, he will work on Issue 1239 (on Google Code) and, if time allows, the document list picker for the student proposal page.
+
+
+## 1 Aug 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Akeda is working on doc list, tests for UserEdit page, the function of uploading logos for organization, and clickable timeline wheel on the landing page. He moved the dashboard core to the soc.views.helpers and needs to rewrite the test, adds new tests for regular dashboard. He expects to complete the regular dashboard with iconic only by 6 Aug.
+  * Praveen is working on testing org\_profile, student\_forms and profile\_show views. He expects to finish them by tomorrow.
+  * Orcun is one week behind schedule because of the difficulties posed by the cross-domain policy, which he eventually solved. Sverre suggests him to ask for help instead of spending too much time trying to solve it himself. Orcun will work on exporting lists this week.
+
+
+## 25 Jul 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Akeda missed this week's blog post and he will write it after the meeting. His patches are ready to be reviewed. For iconic dashboard, try his live instance at http://melange-iconic-dashboard.appspot.com/. For toggleable list, try http://melange-new-dashboard.appspot.com/. For uploadable org's logo, try http://melange-upload-logo.appspot.com/. He will register the test account to the last instance as well.
+  * Orcun is implementing SpreadSheet API methods over https protocol. He did not know how to make a token available to JS. Sverre suggested him to send the server side token to the user and then use it client side.
+  * Praveen has not written this week's blog post and was late for the meeting. Leo will talk to him.
+
+
+## 18 Jul 2011 Team Conference Call
+
+**Chaired by:** Lennard de Rijk<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Lennie reminded Orcun of this week's blog post and asked him to be on time next week.
+
+
+## 11 Jul 2011 Team Conference Call
+
+**Chaired by:** Lennard de Rijk<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Praveen has almost completed logic tests and studied view tests with Madhu's help. He will try to complete the view tests by the final evaluations. Leo thinks he has made a good progress so far and there may be not many work for view tests since many views have already had tests. Leo will further discuss the project scope with Praveen after the meeting.
+  * Orcun is on track according to Mario. Mario will review his JS code and Madhu will review his python code. Regarding one-way vs. two-way syncing, Lennie suggests keeping it one-way for simplicity for now.
+  * Akeda pushed the code for admin dashboard, but forgot to post the JS part for rivew. He will do so after the meeting.
+  * Selwyn improved the public task view to have forms to publish comments and to take actions based on the task status, retrieved the work submissions on the page, wrote view for creating and editing a task, and wrote the timeline helper for GCI. He will write tests and run the view locally. Madhu will help him with creating a new datastore. Madhu feels that his progress in this week was ok but he still has much to catch up.
+
+
+## 4 Jul 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Praveen has sent several patches and made a big progress last week. Leo thinks that he can do a great project if he can continue the hard work.
+  * Akeda has also sent several patches and is waiting for review. Daniel will review them later.
+  * Selwyn corrected his patches with respect to reviews. He is currently working on task views. Madhu thinks that he is still behind the schedule. Madhu and Sverre will have a meeting with Selwyn after the conference call to discuss his progress and how to help him catch up.
+  * Orcun could not attend the meeting due to his connection issues.
+
+
+## 27 Jun 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Akeda has made the dashboard view and template ready to review. He is working on a view to trigger accept\_proposal's task and will send the currently available code for review.
+  * Orcun was planing two different proposal pages as he wrote in mailing list. He decided to start coding instead of thinking too much on it. For now, the user can only either choose tinyMCE or GDocs. The feature of allowing them to switch may be added in the future if needed.
+  * Praveen tested soc.logic.tags and corrected his previous tests. He has spent much time on studying the code itself. He will discuss his project plan with Leo and update it by this Sunday with goals that are achievable by midterm.
+  * Selwyn have written the RequestData for GCI, got it reviewed and committed it. He also wrote RedirectHelper, Access Checker and sent them in for review. He has also written the site menus for GCI. He will be working on the task view and will complete it and get it running by tomorrow late or day after. After that he is planing to work on task\_subscription view and views for org\_application, org\_profile and org\_homepage. Sverre suggested him to communicate plenty with madhusudancs and Lennie about the views.
+
+
+## 20 Jun 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Sverre repeated that GSoC students should write a blog post by every Sunday and tell any of their commitment before hand.
+  * Progress of GSoC projects:
+    * Akeda is working on admin dashboard. He demonstrated his work of colorbox on his online instance. It looks nice.
+    * Praveen added tests for only two modules because he had spent some time on ICPC. He will focus on his project this week.
+    * Selwyn has committed the GCIProfile and GCIStudentINfo models and is writing a script to convert GCIStudent data to GCIStudentInfo. Lennie thought Selwynis 4 weeks behind schedule. Lennie, Madhu and Sverre suggested Selwyn to communicate more and try to catch up.
+    * Orcun finished oauth but he will make some modifications later. Madhu will review his code.
+
+
+## 13 Jun 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Sverre stressed that GSoC students should write a blog post at least a day before the conference call every week.
+  * Developers will have a meeting with EchoDitto regarding new UI delivery sometime this week.
+  * Progress of GSoC projects:
+    * Praveen wrote tests on soc.logic.accounts and dicts and sent them to the list for review. Leo will review them these two days. Praveen is behind the schedule and will work hard to catch up.
+    * Akeda is working on admin dashboard and will post initial code for admin dashboard next week. Carol wants to be able to choose different options while staying on the same page. Sverre suggested Akeda to use AJAX request to do the trick. Akeda will focus on admin dashboard and hopes to finish it before mid term, but this will depend on the requirement.
+    * Selwyn will write a blog post; Lennie and Madhu will each review one patch of Selwyn. Madhu thinks that Selwyn may not be able to meet the deadline and he will jump in if necessary.
+    * Orcun is working on gdata and OAuth Roundtrip. Madhu will review Orcun's Python code and Mario will ask Orcun about his blog post.
+
+
+## 6 Jun 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu) with help from Praveen and Akeda <br />
+  * Madhu is working on survey. He has emailed his progress to the list and will talk to Mario about the implementation of javascript for survey. The EST to finish it is 1 Jul.
+  * Progress of GSoC projects:
+    * Praveen is working on the online test runner. Sverre suggested him not to waste too much time on it and to start to write tests ASAP. Leo agreed with Sverre.
+    * Orcun was busy with his exams so he missed writing blog posts. He suggested integrating OAuth roundtrip, which Sverre thinks of a good idea. He had encountered some problems early on, e.g. gae unicode problem, but he has sorted them out.
+    * Akeda is working on admin and regular dashboard's improvement. Sverre suggested using ajax to fetch different pages of dashboard. He will implement list and ask Mario questions about the list code.
+  * Suggestions:
+    * Sverre suggested ccing mails/questions to the list unless it is private so that others can know what's going on as well.
+    * Selwyn was not present. Sverre asked his mentors (Madhu and Lennie) to tell him to be more punctual.
+
+## 30 May 2011 Team Conference Call
+
+**Chaired by:** None (call cancelled) <br />
+**Notes taken by:** All <br />
+**Edited by:**  Leo (Chong Liu)<br />
+  * Lennie fixed Issue 1244 (on Google Code), continued working on the admin functionality with regards to survey results, and expect this to be finished before next call. He has also reviewed patches from Selwynn, but had no response yet.
+  * Sverre started on converting previous year data and ran into old StudentInfo entities that need to be converted to GSoCStudentInfo entities (and have their references updated).
+  * Madhu reviewed the patch written by Selwyn and wrote a detailed reply to ED about the pages that need UI for GCI. He has also resumed the work on surveys form data recording, but has not proceeded much because of the travelling. He has informed others that he has only limited time during the week during All-hands.
+  * Leo had a meeting with Praveen today. Praveen has made some progress, done some useful research on online/web-based test runners but hasn't finished all planned work due to family matters. Because of the time restriction of GSoC, Leo suggested him to either focus on and complete the test runner within this week or move on to testing and treat the test runner task as a side project. As we have seen, Praveen chose the former :-).
+  * Progress of GSoC projects:
+    * Praveen did some research on web-test runners. He studied the code of gaeunit and figured out the magic of how they actually do it. He will spend this week on implementing our own online test runner and after that start adding the unit tests. There are some issues in implementing it because of the restrictions imposed by GAE.
+    * Orcun is working for exams. He will be working on his project between 3-6 June and then study for exams again till June 10. He is aware that he needs to write a blog post.
+    * Selwyn got his patches reviewed, made the suggested changes again and then sent them to the list for review again.The common fields to GSoCProfile and GCIProfile are moved to role.Profile and grade field in GCIStudentInfo to role.StudentInfo. He also modified role\_conversion to convert GCI roles and update references for GCITask.
+    * Akeda discussed the design and requirement for enhanced administration and regular dashboard. He has provided the revised mockup for Updated admin dashboard page, withdrawing or approving students via admin dashboard, proposed solutions for crowded list on regular dashboard, and participants locations on admin dashboard with clusterer map.
+
+
+## 26 May 2011 Team Conference Call
+
+**Chaired by:** Lennard de Rijk <br />
+**Notes taken by:** all <br />
+**Edited by:**  Leo (Chong Liu)<br />
+  * Sverre will be back on the 5th of June and will likely help out Madhusudan who is currently focusing on Surveys. There is no ETA yet for surveys but Madhu will update us once he gets started again.
+  * Progress of GSoC projects:
+    * Akeda is working on redesigning dashboard. Lennie reminded him that there are two dashboards that Carol is faced with. One allows administrative functionality like sending out reminder emails while the other represents not only Carol's role as a Organization Admin for GOSPO but also gives more information than the regular dashboards for other users.The focus should be on improving the usability and functionalities that are exposed to Carol in her daily job as Program Administrator. After the meeting, he emailed Carol to discuss the design of Carol's dashboards.
+    * Praveen is about one week behind his schedule due to his exams etc. He had a meeting with Leo this Wednesday. He will work on an online test runner suggested by Leo for his view task and will also work on testing one logic module, soc.logic.allocations this week. Lennie noted that the logic.models modules will be removed so no need to test them. Focus should be on the newly written code.
+    * Orcun could not attend the meeting because he got confused with the meeting time and assumed 19.30 CEST to be 19.30 UTC. He has added required libraries for GData APIs to Melange and fields for storing OAuth related fields. His project has not progressed as he had planned, so he will modify his schedule on his project wiki page accordingly. Furthermore, he will not be able to work much because he have exams before 10 June.
+    * Selwyn has written GCIProfile and GCIStudentInfo models and the role conversion script which also updates references in the specified models. By this weekend, he will be moving list generator from GSoC module to the core, fixing necessary imports, and writing the GCI specific RequestData object.
+
+## 16 May 2011 Team Conference Call
+
+**Chaired by:** Daniel Hans <br />
+**Notes taken by:** Lennard de Rijk <br />
+  * Selwyn will write blogpost and wiki page after call, due to personal issues. Akeda and Orcun made a wiki page.
+  * Daniel and Akeda will meet with Carol on Wednesday using Skype to brainstorm about their project.
+  * Orcun is working on his view and struggling with the data seeder.
+  * Leo had a meeting with Praveen this morning, Leo has asked him to put up the blogpost and wiki page this morning. They worked out a timeline.
+  * Student's TODO List:
+    * Create the blogpost summarizing last week today.
+    * Have a call with your mentor this week, most of us are in PDT time zone.
+    * Put a link to your GAE instance on the wiki page (and blog if possible)
+    * Don't forget to make your next blogpost before the next meeting.
+    * Get ready to start coding!
+
+## 9 May 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Praveen is busy with his exams and will be free after this Friday.
+  * Selwyn was working on asynchronous file upload for the tax forms, but he met some problems with jQuery. He will try to fix them and will ask for help if he cannot himself.
+  * Orcun had some style problems with his testing code. Lennie and Sverre gave him some advice.
+  * Lennie worked on tests and will work on survey.
+  * Madhu fixed one issue and will work on ecodito delivery and set up a meeting with Selwyn.
+  * Mario is busy with his job and studying for his last exam.
+  * Leo is busy with his thesis.
+  * Some advice and to-do list for GSoC Students:
+    * Set up and run an online GAE instance before Thursday with your "View" from the first week.
+    * Write a blog post about it (and other work you've done) before next Monday so it can be reviewed before our conference call.
+    * Create a wiki page on Melange wiki for recording the progress of your project [0](0.md).
+    * Plan a meeting with your mentor and add notes to your OWN project wiki page.
+    * Send your code to our mailing list for review before committing them.
+    * Follow our python programming style [1](1.md)
+  * [0](0.md) http://code.google.com/p/soc/wiki
+  * [1](1.md) http://code.google.com/p/soc/wiki/PythonStyleGuide
+
+## 2 May 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * To-do list for GSoC students:
+    * Set up an online instance and get it running.
+    * Create a new view, hook it up, make it do something interesting, and show it off online during the conference call next week.
+
+## 27 Apr 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * This year's GSoC Students first introduced themselves.
+  * Orcun is from Turkey and had a party to celebrate GSoC yesterday.
+  * Praveen's mic didn't work, so he has not introduced himself.
+  * Selwyn is from India and very excited about being accepted as a GSoC student.
+  * Akeda is from Jakarta Indonesia.
+  * All Melange developers and Carol then introduced themselves as well.
+  * Some advice for GSoC Students:
+    * Try to work in day one and Sverre will add their google accounts to the committer list in order to ensure their code committed.
+    * Write a blog post on http://melange-dev.blogspot.com/ every week at least hours before the conference call which normally takes place at 18:30 GMT/BST every Monday. They can introduce themselves and their projects in their this week's blog.
+    * Contact their mentors regarding their projects.
+    * Ask for help when they get stuck.
+
+## 20 Apr 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * All submitted GSoC proposals were discussed and scored. Mentors were assigned to accept proposals.
+
+## 13 Apr 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Submitted GSoC proposals were discussed.
+  * Sverre asked about sorting columns by using jquery grid and adding version number in cookie.
+  * Mario will implement filter change.
+  * Madhu has finished the proposal page and will add one function for admin to send requests to Carol.
+  * Daniel will do proposal conversion and work on showing the reviewer and their scores on the proposal page.
+  * Lennie will work on the duplicate task.
+  * Sverre will work on custom columns and other features Carol needs.
+
+## 28 Mar 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Lennie will work on tasks of finding duplicate proposals.
+  * Daniel will work on the conversion of proposals to projects.
+  * Mario will check text editing.
+  * Madhu will work on read-only version of profiles.
+  * Sverre will add score to dashboard and remove ranking in favour of accepting or refusing.
+  * Leo will add search page to the main menu.
+
+## 21 Mar 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Sverre solved a bug with setup tools and bootstrap. He also tried to lobby :-) us to test views by showing us how easy it is to do view tests now. He will add student proposals to dashboard by Wed.
+  * Daniel is working on student proposal page and suggested that it should list student's email. He will work on request page, list org page, Student/Mentor/Org admin detail page, and link page as well as convert proposals to projects.
+  * Madhu will work on org home page, current project, project detail and midterm survey.
+  * Lennie will update task to calculate duplicates.
+  * Leo will add the search page.
+
+## 14 Mar 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * EchoDitto introduced their designs of logos for Melange and asked our feedback. We will give them more feedback later this week.
+  * Lennie was working on list and defined data for buttons together with Mario. He will complete the dashboard this week.
+  * Daniel asked suggestions about url design for comments of proposals.
+  * Madhu will work on org app.
+  * Mario updated javascript, version and css and restructured javascript and jquery. He will work on list and css and will also fix column issues with firefox.
+  * Leo added the usage of the seed functions to the testing wiki page. He will check broken tests, disable old views tests, and fix broken logic tests.
+
+## 7 Mar 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Ideas about the logo were discussed. Conclusion: it should be blue and close to Google logo.
+  * Lennie is working on list and dashboard code.
+  * Lennie and Mario will discuss adding the next starting position of fetch to ListsProtocol together.
+  * Madhu is working on application forms and organization surveys.
+  * Daniel is working on student proposals and review pages and will test the data conversion script.
+  * Sverre will copy data for Daniel to conduct the test.
+  * Leo finished up the seed function and sent a patch to the list for review and will add the usage of the seed functions to the testing wiki page.
+
+## 28 Feb 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Madhu is working on home page and will work on survey and site setting.
+  * Daniel is working on forms and the conversion of data, and will work on the application forms.
+  * Mario is updating the css and javascripts.
+  * Sverre has written and shared the blog post and will ask EchoDitto about css for admin.
+  * Leo was working on the seed function and will finish it up and send a patch to the list.
+
+## 22 Feb 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * The design of lists is discussed.
+  * Lennie is working on dashboard.
+  * Sverre and Daniel are working on forms.
+  * Madhu suggested to use Django RequestContext that enables the reuse of python object and he will send a patch for review.
+  * Leo is working on  the seed function.
+
+## 7 Feb 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Lennard is not present at the meeting, away to theater.
+  * Lennard will look at Leo's comments on the Issue 534 (on Google Code) patch within the next 3 days.
+  * EchoDitto's Round 2 CSS Delivery is discussed.
+  * The issue tracker is checked.
+
+
+## 24 Jan 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * The CSS delivered by EchoDitto is reviewed and Sverre will send our feedback to EchoDitto.
+  * Some issues with high priority are reassigned.
+  * Leo found, with transactional updates of proposal scoring and review, the review didn't show up immediately after the request returns due to the fact htat the review is updated with taskqueue when he tried locally; Sverre and Lennie suggest using a message to inform the user of the situation. Later, Leo tried on his online instant and he found that the situation happens 2 out of his all trials (10+) whereas it's ALMOST 100% locally.
+
+## 17 Jan 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Madhu worked on fixing critical issues related to GCI.
+  * Mario is discussing with his mentor to have Melange as 20% of his project and is working on some issues.
+  * Leo has been working on making tasks transactional, which turns out to be a major pain due to entity groups. He I'll focus on Issue 534 (on Google Code) instead for now and start to work on making tasks transactional after entity groups are integrated to our entities.
+  * Lennard fixed the user\_id issue, so now people will no longer have to email us to get their email address changed if they add a new one to their google accounti. He is going to work on the next issue assigned to him.
+  * Daniel is working on integrating Pavel's work.
+  * Mario suggests a big red danger sign and a big red "Don't do this" (which has already been implemented) or a 1x1 pixels button for confirmation after users' clicking "resign as a [whatever](whatever.md)" in order to make it harder for users to resign by mistake.
+  * Madhu suggests updating the issue tracker with new milestones and shifting focus to GSoC.
+  * Sverre will discuss with Carol about reproiritizing for GSoC 2011.
+  * Sverre confirms that we will use new the UI delivered by EchoDitto for GSoC 2011 and will update our SDK to Appengine SDK 1.4.1.
+
+## 10 Jan 2011 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier and Lennard de Rijk <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * CSS & HTML requirements for Melange are discussed.
+  * Current issues with Milestone 2 or 3 are reviewed.
+  * To set GCI registration deadline to this Fri so that unregistered students can complete their registration.
+  * To sovle the issue of being able to claim tasks after deadline and mark all those tasks claimed after deadline invalid.
+
+
+## 6 Dec 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Current issues with Milestone 2 or 3 are reviewed.
+  * The second revision of the SOC homepage designed by EchoDitto will be delivered soon.
+
+## 29 Nov 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * The first revision of the SOC homepage designed by EchoDitto was viewed and disccused. The first impression is positive.
+  * Issues with Milestone 2 and 3 were discussed to make sure that they are completed in time.
+  * Mario solved the firefox crash problem discussed last week. Well done!
+
+## 22 Nov 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Sverre fixed a problem due to the large number of tags entities have.
+  * When users list or search GCI tasks, their firefox usually crashes because there are too many tasks currently (almost 700) and it would take a while to load all. Some possible solutions were discussed.
+  * We should allow mentors to modify their tasks unless a student is working on it.
+  * New issues were assigned.
+  * Leo will talk with Felix about integrating data seeder with testing.
+
+
+## 15 Nov 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * All issues have been triaged.
+  * Sverre will fix issue 69 (on Google Code), 219 and 967 before Friday.
+  * Lennard will work on issue 999 (on Google Code) and 1000 this week.
+  * Madhu will fix issue 1003 (on Google Code) by Wednesday/Thursday.
+  * Daniel will work on issue 986 (on Google Code) and 988.
+  * Mario will work on CSV export, Google API key (with Sverre) and button reset (with Daniel), from Wednesday on.
+  * Leo will look at the use of the seed function to seed data for testing.
+
+## 18 Oct 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Lennard is back. Welcome back!
+  * Issues in the issue tracker has been reduced to 82 issues from around 200 issues.
+  * The official site of GSoC and GCI will move to http://www.google-melange.com/ from http://socghop.appspot.com/.
+  * GCI has been announced and we are considering to participate, which will be further discussed in next week's meeting.
+
+## 11 Oct 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Sverre talked about the current situation of our issue tracker and asked other developers about their future plans and availabilities.
+  * Daniel will work on the statistics module of GCI. He was very busy recently because he attended two weddings and he was also the best man for one of them.
+  * Mario will also work on integrating statistics into GCI.
+  * Felix will make his GSoC code ready for merging to the trunk.
+  * Leo will continue to work on adding more tests for soc.logic.cleaning module.
+
+## 4 Oct 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Sverre talked to Carol about how to create a GCI program which is only visible to developers and current issues in the issue tracker.
+  * Sverre will merge Leo's testing code added recently.
+
+## 27 Sep 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Sverre has set Milestones on all issues with high priority. Milestone0 issues need to be resolved before the start of GCI (15 Oct 2010), Milestone1 issues resolved before the start of accepting student students (29 Oct 2010), Milestone2 issues resolved before writing up things, Milestone3 issues resolved before next GSoC, Milestone4 issues would be nice to be resolved before next GSoC.
+  * Sverre and Mario have Milestone0 issues which need to be resolved before the start of GCI (15 Oct 2010).
+  * Madhu improved the FAQ of GCI.
+  * Leo tested more functions in soc.logic.cleaning module.
+
+## 20 Sep 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Sverre finished triaging the bug queue and allocated them to developers.
+  * He talked with Daniel, Madhu and Mario about their allocated issues during the meeting.
+  * Carol asked about the response to the GCI testing invitation. At present, there are not a lot of responses.
+  * She will find the moderator of the old GHOP and hope to get more testing responses from the old GHOP communities.
+  * Leo has fixed all style problems with the existing tests code.
+  * He is working on the tests for soc.logic.cleaning.
+
+
+## 13 Sep 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  * Mario committed a fix to enable Update Quota button in Assign Task for GCI correctly.
+  * He can't work much until September 20 because exam is approaching.
+  * Lennard, Daniel, and Sverre have had a bug queue triaging meeting, all issues up to 640 are triaged.
+  * Sverre will finish triaging the bug queue before Friday since we have our initial meeting with EchoDitto (the UI redesign people) then.
+  * Lennard worked on bulk CSV import for GCI, patch in progress. Early version is up on list and to be completed this week.
+  * He is having fun in Sydney :).
+  * Leo has tried GCI, written testing report, added issues found to the project issue tracker and sent in one patch.
+  * He has added information about GCI task to GCIUserManual.
+  * He is fixing all style problems with existing tests code and will push them soon.
+  * He will also clean up, commit and push the rest of the tests for soc.logic.cleaning.
+  * **Important notes:**
+    * Google pays Sverre, Lennard, Daniel to work on Melange. Sverre works 20h/week; Lennard and Daniel both 10h/week.
+    * Focus will be on "Improving the Carol experience", getting GCI ready for prime time, and making Melange faster.
+
+
+## 30 Aug 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier<br />
+**Notes taken by:** Daniel Hans<br />
+  1. GCI: feature complete!
+  1. GCI: Update on the work done in the last week
+  1. GCI: Current rough edges
+  1. GCI: Testing time
+  1. Outcomes of Carol, Sverre and Daniel's meeting
+
+### Meeting notes 30 Aug 2010
+
+  * Mario has some technical problems and could not participate in the actual call, but he was around on chat
+  * From our GSoC students we had Savitha on board. She will try to help with working on a user guide for GCI
+  * Felix joined us at the end of the call, but he was not sure if he would have time.
+  * Carol, Sverre and Daniel's metting had no outcome, as it had been put off
+  * All GCI features are finally completed and in the repository
+  * All modules were properly(?) renamed
+  * GCI Ranking feature will be completed by the end of the week
+  * There are still some minor problems with JavaScript
+  * Madhusudan explained to us how to assign a task quota for organizations
+  * New release should be deployed to Melange-dev
+  * It would be better to do a backup before pushing a new release to socghop
+  * The new release will be pushed on Friday
+  * An email about the tests will be send over the weekend to the mentors lists and to the old GHOP mailing list
+  * Testing period is to be scheduled for the next weekend
+  * Swag will be offered to the most active testers for reports and especially for sending patches
+
+
+## 23 Aug 2010 Team Conference Call
+
+**Chaired by:** Madhusudan C.S<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+  1. Post GSoC: Any progress from GSoC students about their projects last week? What do GSoC students want to work on? Do they want to continue working on their projects or pick something else that interests them? What's the plan for this week?
+  1. GHOP Plan: features from Madhu; work with Mario; work with Daniel
+
+### Meeting notes 23 Aug 2010
+  * Attendance:
+    * Madhu, Mario, Daniel and Leo
+  * Update from Daniel:
+    * Daniel will work on statistics module for GHOP and aim to complete it by Aug 31st.
+  * Update from Leo:
+    * Leo organized all meeting notes of last three weeks and then put them to the wiki meeting notes page.
+    * He added more contents to the GettingStartedOnTesting wiki page, including information about Task queue service and gaetestbed MailTestCase and TaskQueueTestCase as well as more detailed guidelines on how to write tests for Melange and usage of each testing framework for logic, views, mails and task queues tests.
+    * He created a patch for removing cron/job related modules from Melange and then sent it to the list for review.
+    * He continued to work on testing soc.logic.cleaning and will finish it within this week.
+    * He has also discussed with the author of gaetestbed about possible improvement of gaetestbed and will add his suggestions to the issues list of gaetestbed on github.
+    * He has also discussed with Felix about integration of data seeder and testing and is waiting for Felix' reply to Leo's proposal.
+  * Update from Madhu:
+    * Madhu fixed several issues in GHOP module last week.
+    * He introduced some features like "List My Tasks" for mentors and others.
+    * Most of the fixes and features have already been pushed. More will come in this week since they need some clean up.
+    * He proposed a new design for using "history" property in GHOP Tasks, has discussed with Lennard about it, and has sent a mail to Sverre and is waiting for it.
+    * He works very hard to make Melange GHOP-feature complete by August 31st.
+    * He will start working on the User Manual from this weekend since his part of GHOP is almost complete.
+    * He is working with Mario for inline list-editing.
+    * He will help Daniel if necessary for statistics module.
+  * Update from Mario:
+    * The clone for list editing is now in place.
+    * Mario had some issues on getting buildout working. Sverre helped on finding the issue which was an incompatibility between buildout and folders whose names contain spaces. Another issue is lack of builtin Python 2.5 support in Lucid.
+    * Today he committed some basic support for inline editing in the grid (just textboxes).
+    * He will work on sending data back to server (all data or just dirty fields? Need to be decided) and including plugins (such as slider and datepicker) during the week.
+
+  * **Important announcement:**
+    * The name of GHOP has been changed to Google Code In.
+
+  * **Action items:**
+    * All the models and strings in the GHOP module must be renamed because of the change of GHOP name.
+    * Daniel will meet Sverre and Carol tomorrow to discuss about triaging the renaming issues in the issue tracker and then re-prioritizing them.
+    * Madhu would prefer to have a GHOP test week scheduled early in September since he was supposed to give an exam on October 3rd which has been rescheduled to October 13th because of his Melange commitments so availability during last weeks of September upto Mentor summit will be very poor. He asks Daniel to bring this issue of scheduling the GHOP test week when he meets Sverre and Carol tomorrow.
+    * A project owner (Lennie or Sverre) needs to setup a project's clone instead of a user's clone for Madhusudan to commit list editing to the clone.
+
+  * **Important notes:**
+    * Madhusudan and Mario proposed that we should start conference call on time whatever the situation is (unless it's known that someone is coming in a few minutes) to avoid today's situation (the meeting ran late) happening again.
+    * Next week's meeting will start at 17:30 UTC.
+    * Leo won't be able to attend next week's meeting because next Monday is a British bank holiday. But he will put his update to the wave for next week's meeting notes which he will created in advance as well as organize all meeting notes and then put them to our wiki meeting notes page after the meeting.
+
+
+## 16 Aug 2010 Team Conference Call
+
+**Chaired by:** Daniel Hans<br />
+**Notes taken by:** Leo (Chong Liu)<br />
+
+### Meeting notes 16 Aug 2010
+  * Attendance:
+    * All present.
+  * Update on GSoC projects:
+    * Data Seeder:
+      * Latest version is up on http://sttwister-melange.appspot.com/seeder/home
+      * He has configured a configuration sheet that does some seeding of more data, as an example it seeds sponsors, programs, organizations, mentors, students and student proposals.
+      * While the data seeder works pretty well in the current form, there are still some unpolished areas like error reporting and handling, navigation and usability on the web interface, etc.
+      * The web interface might be a bit cryptic and hard to use at this point. It's not obvious at all how to set up references and how to configure them. This part should definitely be properly documented and also some step-by-step guidelines in the web interface itself can't hurt, if not too space-consuming.
+      * He is thinking a good way to learn to use it would be a screencast, but that would best wait until everything is polished enough.
+      * He will also make it easy for tests to make use of the data seeder. He is currently discussing this with Leo so they can decide on the best approach.
+    * Document Editor:
+    * Social Features:
+    * Testing:
+      * Leo has cleaned up, committed and pushed all the tasks testing code to his online clone.
+      * After overcoming many difficulties, he managed to move the the gaetestbed and pymox modules to buildout dependencies and made his testing code ready to merge to the trunk.
+      * He also worked on adding test cases for soc.logic.cleaning with suggestion of Sverre.
+      * He has also uncovered a couple of bugs in the soc.modules.ghop.tasks.task\_update module and sent a patch to the mailing list. Lennard was very kind to help him merge the patch.
+      * He has also uncovered one issue with his test code for soc.modules.gsoc.tasks.accept\_proposals (set the timelimit parameter too small) and then corrected it.
+      * He has also investigated the difference between the console and html coverage report. It seems that the console one counts statements while the html one counts lines.
+      * In the next week, he will add the experience of how to do mail and taskqueue related tests with gaetestbed to the testing wiki page.
+      * He will also make a patch for removing the cron/job related modules and then send it to the list.
+      * He will also continue to work on the testing project after GSoC, i.e. add more test cases for more modules, improve the testing design and code, integrate Felix' data seeder, and so on.
+  * **Action items:**
+    * Students should write on their project wiki pages about what they have done, what they have not done and their plan to bridge the gap after GSoC compared with their original plans.
+  * **Important notes:**
+    * Sverre won't be able to attend next week's meeting.
+    * Daniel will host next week's meeting.
+    * All students are welcome to attend it.
+
+## 09 Aug 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+
+  1. Update on GSoC Projects
+  1. Integration of GSoC projects
+  1. Round the table
+  1. Post-GSOC
+
+### Meeting notes 09 Aug 2010
+  * Attendance:
+    * Felix could not attend.
+  * Update on GSoC projects:
+    * Data Seeder:
+    * Document Editor:
+    * Social Features:
+      * Savitha did the maps view for events and users. It works only for single-word terms at present but will be improved to have multi-word terms and search the data based on those keywords.
+      * Next week, she will be working on writing tests and also testing the workflow of the Calendars feature to ensure that there are no bugs.
+      * She will resolve the Application Read timeout error being caused by appengines short timeout.
+      * She will clean up code and discuss with Madhu options to review code and merge.
+    * Testing:
+      * Leo uncovered a couple of bugs of existing Melange modules with the help of related test cases and has sent pathes to the list.
+      * He also resolved the error "raise self.TranslateError(e.application\_error, e.error\_detail) UnknownQueueError" by adding the path of taskqueue yaml setting file to the instantiation arguments list (root\_path) of taskqueue\_stub.TaskQueueServiceStub.
+      * He added gaetestbed modules to tests and then extended its MailTestCase and TaskQueueTestCase and further put them into tests.util module for testing the mailing and taskqueueing functions.
+      * He has also done some new tests and managed to increase the testing coverage of Melange to 59%.
+      * He found that the coverage report of the html version is different from the console one. He will investigate the difference with suggestion of Sverre.
+      * Next week, he will clean up code and commit and push all uncommited testing code, increase the overall coverage printed in console to over 60%, and make the coverage of most modules over 50%.
+      * He will also move the the gaetestbed and pymox modules to buildout dependency and add the experience of how to do mail and taskqueue related tests with gaetestbed to the testing wiki page.
+  * **Action items:**
+    * Students should talk with their mentors about merging their code to the trunk.
+
+
+## 02 Aug 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+
+  1. Update on GSoC Projects
+  1. Round the table
+  1. New co-lead
+  1. UI redesign help
+
+### Meeting notes 02 Aug 2010
+  * Attendance:
+    * All present.
+  * Update on GSoC projects:
+    * Data Seeder:
+    * Document Editor:
+      * Pavel reimplemented RevisionContent model to store arbitrary number of fields as JSON.
+      * He refactored logic and views to support new revision control architecture.
+      * He will finish revision control for StudentProposal in a couple of days.
+      * He will start working on form auto-saving feature next week.
+    * Social Features:
+      * Savitha Integrated Cal Vis library and UI with the Calendars feature.
+      * She redesigned the CSS of the Calendar to make it look more professional and Google-like.
+      * She added Maps for users to specify location when creating Maps.
+      * She is working on the Maps Feature for displaying all users and events, and filtering. She hopes to complete this by the end of the week.
+      * She is still facing the two API time-out errors and needs to find a way around it.
+    * Testing:
+      * Leo has managed to increase the testing coverage to 57% with the work on low coverage ghop modules.
+      * He found that there is one taskqueue\_stub in google.appengine.api.labs.taskqueue and he registered it to 'taskqueue' service. But another error is raised "raise self.TranslateError(e.application\_error, e.error\_detail) UnknownQueueError". He is working on it.
+      * Next week, he will try to solve the error first and then check in all code.
+      * He will also add more tests and aim to increase the testing coverage of Melange to over 60%.
+      * He will also try to find a good way to test the mailing and taskqueueing functions and make sure the correct mail has been sent out and the correct task has been scheduled.
+  * **Action items:**
+    * Students should continue to add tests to their code.
+  * **Important announcement::**
+    * Daniel will serve as co-lead of Melange.
+    * echoditto will redesign UI for Melange with the request of Carol. Melange will soon have a new feel and look :-).
+
+## 26 Jul 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+
+  1. Update on GSoC Projects
+  1. Round the table
+
+### Meeting notes 26 Jul 2010
+  * Attendance:
+    * Savitha couldn't participate.
+  * Update on GSoC projects:
+    * Data Seeder:
+      * Seeding process is fully functional using a simple view.
+      * Felix is currently attempting to integrate an AppEngine MapReduce framework.
+      * He will mail the dev list and CC durin42@gmail.com about where to place thirdparty libraries (currently in app/).
+    * Document Editor:
+      * Pavel Last week fixed issues in the logic code pointed out by Daniel
+      * He reimplemented "show diff" button using Mario's patch to the lists framework.
+      * He started working on revisions for StudentProposal, but came across the problem
+        * StudentProposal has two fields: "content" and "abstract", which must be versioned.
+        * Current implementation of RevisionContent model allows to store only one field.
+        * Daniel proposed to store multiple fields as a JSON document. This approach is easy to use and scalable.
+      * He will reimplement revisions using JSON and implement revisions for StudentProposals this week.
+      * Sverre is worried about tests for his code. He will add tests this week.
+    * Social Features:
+      * Savitha wound up calendars features mostly. She used the javascript maps package to let users specify exact location of event so it can be used along with CalVis maps features.
+      * She also worked on CSS designs for CalVis Calendars.
+      * She will start to work on Maps feature/view for all users and events this week.
+    * Testing:
+      * Leo mainly worked on low coverage modules, e.g. soc.tasks.surveys, soc.tasks.grading\_survey\_group and etc this week.
+      * He has managed to increase the testing coverage of Melange to over 55%.
+      * He will clean up the code and will commit and push them.
+      * One problem he met is that there is no api proxy stub available for service "taskqueue" yet, so it raises an error "ERROR:root:No api proxy found for service "taskqueue". He is also working on it.
+      * In the next two weeks, He aims to increase the testing coverage of Melange to over 60% and increase the testing coverage of those modules below 50% (40% at least) to over 50%.
+  * **Action items:**
+    * Students should continue/start to add tests to their code.
+    * Mario will try JS-Test-Driver along with YUI Test 3 and see if it works :)
+    * Mario has done some inspecting about JSTestDriver and YUITest. YUITest seems still active (version 3 now), and he prefers this testing framework as it's the one that suits better our needs, especially about testing asynchronous code. He's not sure about the correct integration between JSTestDriver and YUITest, as one post on JTD mailing list says it's not working, but the wiki seems to say the opposite. So he needs to try it out and see if everything works.
+## 19 Jul 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+
+  1. Update on GSoC Projects
+  1. Round the table
+
+### Meeting notes 19 Jul 2010
+  * Attendance:
+    * Pavel couldn't participate due to unknown reason.
+  * Update on GSoC projects:
+    * Data Seeder:
+      * Felix had some problems with client-side JavaScript templating engines, switched a few, found some bugs and finally went with [pure](http://beebole.com/pure/).
+      * He is now working on enhancing the web interface to support references.
+    * Document Editor:
+    * Social Features:
+      * Savitha worked on user authorization for data apis for org\_admin and prog\_admin roles.
+      * She had to make changes to the event logic file to handle different authorizations and storing the token etc.
+      * She has encountered two weird errors from appengine, which is caused by a timeout, will mail dev list detailed traceback.
+      * Calendars UI has been tentatively fixed on CalVis, and she needs to change the design so it looks more slanted towards google's design.
+      * She was supposed to have started on Maps feature this week, but still winding up the Calendars.
+    * Testing:
+      * Leo met one problem that nose tests could not run the GSoC View tests he added. He then solved the problem by adding init.py to the GSoC test packages.
+      * Leo has only managed to add 1% more coverage last week which is far less than the original target 10%.
+      * Sverre thought the original plan was not realistic. Leo agreed and adjusted this week's target to 5% more including last week's 1% more.
+  * **Action items:**
+    * All students should focus on tests this week.
+    * Sverre will merge Leo's test infrastructure code.
+    * Mario will discuss which Javascript testing framework to use (update next week).
+    * All students will update the notes wave with their progress so far.
+    * Daniel will contact Pavel to figure out what's going on, with update next week (at the latest).
+
+
+## 12 Jul 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+
+  1. Update on GSoC Projects
+  1. Round the table
+
+
+### Meeting notes 12 Jul 2010
+  * Felix couldn't participate due to issues with his internet connection.
+  * Update on testing project:
+    * Leo solved the problem that coverage does not track the properties definition of Melange models by  using pymox stubout to stub out nose.plugins.cover.Coverage.begin so that it loads Melange before the testing coverage starts.
+    * The test coverage of Melange is now over 50%.
+    * He further worked on various views, e.g. sponsor, program, student, organization, etc.
+    * He will do more view and logic tests and aim to increase the overall code coverage to over 60%.
+  * Update on document editor project:
+    * Pavel has implemented all functions of revisions, e.g.  "Revert to revision", and uploaded them to his appspot instance.
+    * He managed to make button work with the help of Mario.
+    * He plans to deploy python html diff engine, create view that show diffs for revisions and make code clean-up this week.
+    * Daniel will send Pavel some feedback later.
+  * Update on social features:
+    * Savitha worked on getting the workflow for the Calendars features and uploaded the latest to my appspot, e.g. Progadmin activates Calendars, Orgadmins get notifications, Orgadmins accept, all users can now view all calendars and events, users can add events by selecting which Calendar they want add to (non-owners such as students and mentors will have to wait for approval).
+    * She will work on user authentication (plain text password and user name are currently used) and the synchronizing of calendar events between Melange and Google Calendar.
+    * She considers GData APIs but needs to figure out a way to get Auth token from the user API with Madhu.
+    * She and Madhu are going to go through the workflow, code and integration.
+  * **Important notes:**
+    * Daniel suggested to take meeting notes on Google Wave and Sverre suggested to still put one copy on the wiki. Leo will have a try.
+    * Felix needs to complete a blog post.
+
+## 5 Jul 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+
+  1. Update on GSoC Projects
+  1. Round the table
+
+### Meeting notes 5 Jul 2010
+  * Blog posts: All students have posted their blogs in this week.
+  * Update on data seeder:
+    * The seeder is able to seed models without any references and the data providers work correctly.
+    * Error/progress reporting has been implemented on the backend but not on the web interface frontend.
+    * Mario and Felix think about integrating a client-side HTML templating engine in JavaScript to Melange in order to build HTML on the fly on the client side.
+    * Three options are being considered, i.e. pure, jQuery tempest plugin and DOJO DTL. Mario feels that the third option may be too much messing on the current architecture.
+    * Mario and Felix will further talk about the three options after the meeting, possibly on the list.
+  * Update on testing project:
+    * Leo found that Python coverage does not track the properties definition of models. So, doing model tests adds little testing coverage.
+    * He also found there are not a lot to do logic tests because most methods of other logical are inherited from base logic.
+    * He will focus on doing view tests now, especially on those with low coverage.
+    * He has not done a lot last week due to breakdown of his hard drive and he'll try to do more this week.
+  * Update on document editor project:
+    * Pavel implemented views that show revision with given revision number and lists all the revisions for the given entity and uploaded them to his GAE instance, which looks good.
+    * He met two problems. The first one is to track different key/value pairs for the params dict. He solved it by using a debugger. The second one is to create configuration JSON for buttons and actions with  list framework. With the help of Daniel, Sverre and Mario and reading the JQGrid documentation, he has started to understand the lists and could even create some buttons and associate behaviour.
+    * He will do his best to finish views in a couple of days to start implementing diffs before the midterm evaluation.
+  * Update on social features:
+    * Savitha started working on the Calendars/Events feature: she has created the event data model/logic/views (e.g. list events), and uploaded to her GAE instance http://melange-social.appspot.com/site/show/site.
+    * Two types of events are created, one is the local event\_entity stored in Melange and the other is the one sent to Google Calendar. They are not synchronized until now and Savitha is working on it.
+    * The UI of the calendars is being discussed on the mailing list and not decided yet. Google Calendar UI is currently used.
+    * User Page has been mostly done. The new CSS designs will be uploaded by this wednesday.
+    * There are no restrictions for different user roles at present, e.g. everyone could create their User Pages and the go on to add events to the Calendar. Savitha is working on it and will get it done hopefully by this weekend.
+    * Savitha decided to get the Key for the JS API maps following Mario's advice.
+  * **Important notes:**
+    * Pavel and Felix found the params mechanism a bit hard to understand, especially combined with other things such as patterns and checking access etc. Felix thinks more documentation is needed. Sverre encourages students to add their findings to the params wiki page http://code.google.com/p/soc/wiki/SocParams .
+    * Sverre suggests Pavel and Mario together with him to create a wiki page for the list framework.
+    * Mario suggests Pavel to add link of JQGrid documentation that it's not yet linked, if any, inside the text of the ListsProtocol wiki page.
+
+## 28 Jun 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Leo (Chong Liu)<br />
+
+  1. Blog posts (where are they?)
+  1. Update on GSoC Projects
+  1. Round the table
+
+### Meeting notes 28 Jun 2010
+  * Felix couldn't participate because he was taking an interview.
+  * Blog posts: Savitha and Leo will make a post later today.
+  * Update on testing project:
+    * Leo has added content to the wiki page GettingStartedOnTesting and asked for feedbacks. Sverre has had a look at it and thinks that it should be extended, though it looks good. Sverre will help Leo extend it if time allows.
+    * The coverage of the test is still low. Sverre suggests Leo to focus the modules with low coverage next week, e.g. do some tests on the models.
+  * Update on document editor project:
+    * Pavel made some changes on the revision models, implemented a few revisions for documents and will push his code later.
+    * The revision control currently only works on backend not on front side.
+    * Pavel will add others as a developer on his Appspot instance
+    * He is implementing the view which helps to work with revisions. He find some cool features of Melange, e.g. Button, checkbox etc. which can be used in his work.
+    * Pavel and Danial will interact and discuss more about the project.
+  * Update on social features:
+    * Savitha made changes to user pages, e.g. add new jobs and educations but could not deploy it to her Appspot instance because she could not access app engine on weekend, which is quite normal in India according to Madhusudan.
+    * She is able to have access to it today and will deploy later.
+    * She will work on Calenda later.
+    * She is behind the schedule but believes she can catch it up because she has become familiar with the codebase.
+    * She met problems when using blob properties for images and will email the detail of the problem to the Melange list later.
+  * **Important notes:**
+    * Sverre will go to America the day after tomorrow and will spend some quality time with his girlfriend.
+    * Lennard will start his internship in Australia next week.
+    * Students should make their blog posts before the weekly meeting.
+    * All students should add everybody as a developer on their Appspot instance
+    * Students should ask on Melange list as well as their mentors when they meet problems
+
+## 21 Jun 2010 Team Conference Call
+
+**Chaired by:** Lennard de Rijk <br />
+**Notes taken by:** Pavel Klemenkov<br />
+
+  1. Update on GSoC Projects
+  1. Round the table
+
+### Meeting notes 21 Jun 2010
+  * Daniel couldn't participate, cause he is in the US now.
+  * Update on document editor project:
+    * Back-end for revisions is working now. It is deployed at http://melange-editor.appspot.com
+    * View that helps to work with the revisions (show revision, show diff and revert) is going to be implemented on Wednesday.
+    * Need to write script that converts existing entities into the new ones.
+    * It is a good decision to implement property methods in the models, cause it makes rendering templates easier.
+  * Update on testing project:
+    * Last week Leo made Django test client to work with Melange.
+    * This week he plans to write more tests on logic.
+    * Leo also wants to create Wiki page that describes current testing environment.
+    * Lennard wants more tests :)
+  * Update on social features:
+    * Savitha has almost finished user pages. Updated instance is deployed at http://melange-social.appspot.com
+    * Searching users based on tags is to be done.
+    * Savitha starts working on calendars this week.
+    * Savitha needs to add tooltips for new fields.
+    * Lennard notices that "Preferred name" is the same as "Public name" from User model.
+    * Visibility is for entire page now, but it should me made more granular.
+  * Update on data seeder:
+    * Felix is setting views for his module. Melange lacks support for views that are not connected to some model or logic.
+    * Felix thinks that his current solution looks like a hack, but plans to refactor it in the future.
+    * Every model includes all the fields from base models. That's why it is so much JSON right now. Felix needs to take care of it.
+  * **Important notes:**
+    * Lennard leaves and can't be project leader for a while. He will not be able to participate in conference calls. Sverre is our new leader. He is responsible for everything! :)
+    * All students should continue sending updates on mailing list, posting blog updates, contributing code, writing tests and working hard!
+
+## 7 Jun 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier <br />
+**Notes taken by:** Savitha<br />
+
+  1. TODO's from last week
+  1. Update on GSoC Projects
+  1. Round the table
+
+### Meeting notes 7 Jun 2010
+
+  * Lennard is at a friends place and will not be attending today's call.
+  * Pavel is in Syberia regarding his PhD and will be unable to attend.
+
+
+  * Data Seeder Project Update
+    * After IRC discussion with Mario, rewrote/merged AJAX APIs and is okay for now, will discuss further if any problems arise.
+    * Implemented most Data Providers
+    * More or less on schedule, but will put in more hours this week.
+
+  * Testing Project
+    * Leo is on schedule.
+    * Had some problems getting Django's testing client to work with Melange, it is now resolved.
+    * Will be spending more time on the project over the week and weekend.
+
+  * Social Project
+    * Slighly behind schedule, planning to catch up by putting in more work hours this week.
+    * Had some problems with the OS etc. in setting up working environment. Now all set up work is done and ready to do more coding.
+    * Clarified doubts about framework and code as and when with Madhu.
+
+  * Document Editor Project
+    * Pavel is not in town and will update Daniel on his project once he is back
+
+  * TODOs for Students this week
+    * Hang out more on IRC and don't hesitate to ask questions to the rest of the team if your mentor is not around/offline. You can mail the developers-list your questions too.
+    * Keep team updated on project, travel schedules etc.
+
+## 31 May 2010 Team Conference Call
+
+**Chaired by:** Lennard de Rijk <br />
+**Notes taken by:** Felix Kerekes<br />
+
+  1. Planning Q3-Q4, what do you want to do?
+  1. Update all other GSoC Projects
+  1. Round the table
+
+### Meeting notes 31 May 2010
+
+  * New document editor
+    * Pavel's wiki missing timeline for second half
+      * Pavel is not sure about the timeline
+      * Goal for the midterm: finishing revision control
+      * Second part should involve deploying and integrating MarkItUp and Markdown
+    * Pavel would like to discuss possible options (which are posted on the wiki)
+    * Conclusions:
+      * Document model should be refactored: add revisions as a ListProperty
+      * There is no point to create separate model for revision, Work can be refactored
+      * Revision descriptions will be included as StringListProperty in Document model for easy access
+
+  * Social features
+    * Missing second part for timeline
+      * Maps left for second part of the project
+    * Savitha pushed some changes to http://melange-social-features.appspot.com
+      * Would be nice to embed Google Calendar
+      * Tabs will be populated in the next days
+
+  * Data seeder
+    * Felix needs to have a meeting with Mario to discuss the AJAX API
+
+  * Testing
+    * Leo has committed some test which are looking good
+    * Tests should be reviewed and pushed to Melange if everything's fine
+    * Sverre will check coverage and see if important functionality is covered
+
+  * TODO for students
+    * All developers should be added as project members on everyone's clone
+      * "Allow non-members to review code" should be checked
+    * Add "melange-soc-commits@googlegroups.com" to activity notifications
+
+  * Q3-Q4 planning
+    * Mario has enough work to do on the user interface and refactoring JavaScript
+    * Mario would like to postpone designing prototype UI to 31st of August (and edit the wiki page)
+    * Daniel is missing, needs to take a look at this and decides wether he has time for something.
+
+## 24 May 2010 Team Conference Call
+
+**Chaired by:** Lennard de Rijk <br />
+**Notes taken by:** Sverre Rabbelier<br />
+
+  1. Data Seeding Project, ?Script for Fixtures?
+  1. Update on all other GSoC Projects
+  1. Round the table
+
+### Meeting notes 24 May 2010
+
+  * Felix asks how to convert seeding to fixtures
+  * Decision is to convert data to fixtures
+  * First seed data into datastore, optionally mess around with it, then convert to fixture
+  * Tentative timeline posted to wiki
+  * Lennard and Sverre will look at DataProviders
+
+  * Leo worked on adding more testcases, had some trouble, but now has everything set up
+  * Going to work on coding more this week
+  * Noticed the current fixtures don't delete data on tearDown
+  * Sverre remembered (after the talk) that this is not a problem since the datastore is emptied after every task
+
+  * Discussed how to handle Calendars (public/private, one account)
+  * Savitha is planning on finishing early stages of user profile this week, Lennard has asked for a demo on appspot.com for early feedback
+
+  * Going to focus on revision control for now (diffing will be done later)
+  * Trying to figure out how to store documents in the new document model
+  * All current entities will have to be converted
+  * Pavel needs to create his Wiki (and add a timeline)
+  * All students should put a full timeline on their wiki
+
+## 17 May 2010 Team Conference Call
+
+**Chaired by:** Sverre Rabbelier<br />
+**Notes taken by:** Lennard de Rijk<br />
+
+  1. TODO's from last meeting
+  1. Social Features Project update/discussion
+  1. Update on all other GSoC Projects
+  1. Planning Q3-Q4 update
+  1. Round the table
+
+### Meeting notes 17 May 2010
+
+  * Pavel is not here
+  * Felix had a cancelled train :(
+  * Mario and Madhu have no need for access to socghop
+  * Carol will check up on the 4 signees for the Melange CLA
+
+**Social Project**
+  * Profile page
+    * Biography field, no separate education
+    * We want the ability to annotate projects, to make the page look more alive
+    * Blog feed
+    * We would like to give additional projects a try,
+    * Isn't visible by default and contains only public name/link id on default
+    * If all turns out well we need a feature to notify users that they have to fill in their profile
+  * Calendar page
+    * How does the Calendar interact within the users space? Do we/can we force to create calendars on their account? Do we want them to give links to calendar.
+  * Map API use
+    * RSS feeds for events per subject, might leverage NewsFeedFramework from James (talk on list)
+    * Tags on events and users
+    * Users are not forced to publish their location
+    * 3 components of social projects
+      1. User pages, current and past projects (and blog feed if possible)
+      1. Calendar API use, events going on in program as well as organization calenders. Can suggest new events
+      1. Map API use, show users and events.
+
+**Testing Project**
+  * Had meeting with Sverre about project last Friday
+  * This week add more testcases to important module, base Logic and View
+**Document editor**
+  * Emailed Pavel last Friday/Saturday about project, Pavel working on PHD exams over tomorrow.
+  * This week research HTML diff
+
+**Data seeder**
+  * Meeting on Tuesday, notes posted
+  * Blogpost with fancy graphics made
+  * Results of research into YAML, XML, Fixtures for making data models
+
+**What else**
+  * **IMPORTANT** Mails to mentors should be sent ot melange-dev as well, transparency
+  * TODO: Sverre should flesh out the testing part and figure out a date for when tests should be made with each commit
+  * We have no projects from Antartica :(
+  * Meeting about releases with Daniel after this call
+
+## 10 May 2010 Team Conference Call
+
+**Chaired by:** Lennard de Rijk<br />
+**Notes taken by:** carols<br />
+
+  1. TODO's from last meeting
+  1. Statistics module, deployment on socghop
+  1. Testing project by Chong Liu (what/how/focus on/todo?)
+  1. Document editing by Pavel Klemenkov
+  1. Updates on other GSoC projects
+  1. Planning Q3-Q4
+  1. Round the table
+
+### Meeting notes 10 May 2010
+We need to run a script to get the statistics module started<br>
+<blockquote>Carol needs to get Mario, Madhu and Daniel access to the student data <a href='TODO.md'>TODO</a><br>
+Leo is here this week - new student!<br>
+Leo will be working on a test tool; figure out what's important, what we want to test<br>
+Sverre will talk to Leo more this week about getting started and finding things to do<br>
+Document editor is now more stable<br>
+HTML diffs will need to be included in the document editor - Pavel can research this, but doesn't want to do it himself<br>
+Sverre will search for HTML diffs <a href='TODO.md'>TODO</a><br>
+Revision control and autosaving are important<br>
+Felix has been looking at the entities module and created a small tool that extracts the diagrams from the code - Sverre thinks there might already be one of these in the scripts directory<br>
+Felix made some cool .pngs of the relationships and will post on the blog<br>
+Everyone should make a post every week before the end of their Friday so Lennie and      Sverre can review over the weekend<br>
+Mario should update with more concrete UI ideas so Lennie can put it in the grid<br>
+Mario and Lennie will have to have a chat this week <a href='TODO.md'>TODO</a><br>
+Everyone needs to sign the CLA and let us know that they did so <a href='TODO.md'>TODO</a><br></blockquote>
+
+<h2>3 May 2010 Team Conference Call</h2>
+
+<b>Chaired by:</b> Sverre Rabbelier <br />
+<b>Notes taken by:</b> Lennard de Rijk<br />
+
+<ol><li>Introduction, who are you?<br>
+</li><li>Statistics module update<br>
+</li><li>Things students need to do, or we need to do for them (ie. blogging rights)<br>
+</li><li>Testing project by Chong Liu (what/how/focus on/todo?)<br>
+</li><li>Data seeding project by Felix Kerekes<br>
+</li><li>Social Features project by Savitha Raghavendran<br>
+</li><li>Document editing by Pavel Klemenkov<br>
+</li><li>Q3-Q4 planing (and perhaps a bit of Q2)<br>
+</li><li>Round the table</li></ol>
+
+<h3>Meeting notes 3 May 2010</h3>
+
+<blockquote>Not Attended: Daniel Hans, Chong Liu</blockquote>
+
+<ul><li>Carol is out of stroopwafels<br>
+</li><li>Mario is our resident JS expert<br>
+</li><li>Sverre, forgot to tell us about himself<br>
+</li><li>Lennard will head to Sydney in July <sup>_</sup><br>
+</li><li>Pavel is our PHD from Moscow, his Vodka > Polish Vodka<br>
+</li><li>Savitha will work on social features, a Bachelor student<br>
+</li><li>Felix, worked on Pidgin last year and has troubles with Skype :)</li></ul>
+
+On to the real stuff<br>
+<br>
+<ul><li>Todo for our students this week, make a clone on Google code and test/deploy Melange to your own GAE instance.<br>
+</li><li>As well as mailing us the account you would like to use for melange-dev.blogspot.com<br>
+</li><li>Integrate early and often, with tests only :)</li></ul>
+
+Data seeding project:<br>
+<ul><li>IRC meeting after the call to further discuss this project <b>Edit Tomorrow 17.00 CET</b>
+</li><li>Will look at the data seeder code from Daniel this week, try to salvage useful parts<br>
+</li><li>Start on design documents, first up web interface workflow (<b>Lennie suggests using wiki :)</b>)</li></ul>
+
+Social features project:<br>
+<ul><li>Most import features to Savitha are, Map + Event calendar. Secondly the personalized profile page.<br>
+</li><li>Sverre notes that a automated TODO list might be nice, for instance reminding our org admins to update their home page.<br>
+</li><li>Will have meeting on 5th of May at 13:30 (UTC) with Madhu about further details on #melange IRC channel.</li></ul>
+
+Document Editor project:<br>
+<ul><li>Worries about the revision control, makes valid point that storing everything is not nice. However Sverre points out that data is cheap and CPU is expensive on AppEngine.<br>
+</li><li>MarkItUp seems to work</li></ul>
+
+Q3-Q4:<br>
+<ul><li>GHOP, Madhu + Lennie should work on making that more tangible<br>
+</li><li>Usability, Mario needs to work something out for that<br>
+</li><li>Testing, Sverre suggesting getting more time for it. Chong Liu's work should help.<br>
+</li><li>Javascript refactoring, most likely be assigned to Mario</li></ul>
+
+And as last<br>
+<ul><li>Next All-Hands most likely before/after Mentor Summit</li></ul>
+
+
+<h2>26 Apr 2010 Team Conference Call</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Lennard de Rijk<br />
+
+<ol><li>Volcano Fall-Out<br>
+</li><li>Statistics Module<br>
+</li><li>Our GSoC Projects<br>
+</li><li>Round the table</li></ol>
+
+<h3>Meeting notes 26 Apr 2010</h3>
+<ul><li>Everybody is now home safely!<br>
+</li><li>Carol is in need of pictures for the Ashpocalypse blog<br>
+</li><li>Daniel is not here right now, so skipping statistics<br>
+</li><li>GSoC Students will be contacted by their mentors asap<br>
+</li><li>They will be posting their weekly updates on the Melange blogspot page</li></ul>
+
+
+<h2>15 Mar 2010 Team Conference Call</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Sverre Rabbelier <br />
+
+<ol><li>Duplicates handling (Madhu)<br>
+</li><li>StudentProposal Review fixes (Daniel)<br>
+</li><li>Work on the Lists (Mario & Sverre)<br>
+</li><li>Round the table</li></ol>
+
+<h3>Meeting notes 15 Mar 2010</h3>
+
+<ul><li>Duplicate handling: Lennard has taken a look at it, looks pretty good, but we currently show the project is a duplicate as soon as the slot assignment is made public<br>
+</li><li>Duplicates will also be listed on the overview page<br>
+</li><li>Duplicates will include email address of organziation admin<br>
+</li><li>Send new patch where the duplicate status is not shown yet, for now<br>
+</li><li>Will be discussed further on GTalk<br>
+</li><li>Daniel did not have as much time as expected, but hopes to be done tomorrow<br>
+</li><li>Lennard will fix help text<br>
+</li><li>There are some outstanding list issues that Mario and Sverre plan to fix when possible<br>
+</li><li>Leslie will send Lennard edits to organization acceptance email</li></ul>
+
+<h2>15 Feb 2010 Team Conference Call</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Lennard de Rijk<br />
+
+<ol><li>Updates on roadmap assignments (201, Taggable Orgs, Org Applications, Duplicate Proposal Task)<br>
+</li><li>GSoC Testing Week update</li></ol>
+
+
+<h3>Meeting notes 15 Feb 2010</h3>
+<ul><li>Lennard will redo the Notifications page so that the buttons work<br>
+</li><li>Lennard will prepare melange-dev on Saturday<br>
+</li><li>Sverre will be responsible for pushing the tip to melange-dev. Special version numbers for the testing week are r....-gsoc where .... is part of the rev number.<br>
+</li><li>Sverre will continue his work on the lists, a few more to go. Will send overview of which lists need to be done to melange-dev.<br>
+</li><li>Lennard will use his spare account during the test period to play the role of Organizaiton, Sverre will use his to be a Student.</li></ul>
+
+<h2>8 Feb 2010 Team Conference Call</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Leslie Hawthorn <br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>Issue 201 (on Google Code), update<br>
+</li><li>Organization Applications update<br>
+</li><li>Taggable Organizations update<br>
+</li><li>GSoC Testing Week update<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 8 Feb 2010</h3>
+
+Present: Sverre Rabbelier, Daniel Hans, Mario Ferraro, Lennard de Rijk, Leslie Hawthorn, Carol Smith<br>
+Absent: Pawel Solyga, Madhu CS,<br>
+<br>
+<h4>Around the "Room": Lennard</h4>
+<b>Lennard has assigned Madhu to work on duplicate detection of proposals, should be finished next week<br></b> Removed the group application system since new org application system is in place<br>
+<b>Removed ranker system for GHOP organizations</b>
+
+<h4>Around the "Room": Sverre</h4>
+<b>Been working on last five out of 30 lists for Summer of Code, progress has been slow because code base is tortuous; some other lists outstanding for GHOP<br></b> LH to follow up with Sverre on API stuff for automatic acceptance of student projects to get resources from Google to help with this task since lists are taking so long<br>
+<br>
+<h4>Around the "Room": Mario</h4>
+<b>Working on list bugs and ehnancements, externalizing of tooltips and autocomplete JS code from templates, see message to Dev list (Django trouble)<br></b> Writing wiki page on list protocol<br>
+<br>
+<h4>Around the "Room": Daniel</h4>
+<b>Finishing autocomplete list and taggable organizations, working on bug discovered when creating GSOC 2010, scheduled to be done next week</b>
+
+<h4>Around the "Room": Leslie</h4>
+<b>Testing phase starts 22 February, Lennard will write note to dev list to kick off</b>
+
+<h4>Organization Applications Update</h4>
+<b>Lennard has finished basic views, hooking up button to process org apps, e.g. pre-accepted or pre-rejected then gets processed to send emails to org admins who submitted apps; testing system this week</b>
+
+<h4>Testing Week</h4>
+<b>Two week period starts 22 February<br></b> Lennard will work on org views and send mail to the dev list to call for testers<br>
+<b>Sverre will email LH details on API work needed and LH will reprioritize top 10 list</b>
+
+
+<h2>1 Feb 2010 Team Conference Call</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Leslie Hawthorn <br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>Issue 201 (on Google Code), testing update<br>
+</li><li>GSoCX Ideas wiki page feedback<br>
+</li><li>GSoC Testing Week<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 1 Feb 2010</h3>
+Present: Sverre Rabbelier, Mario Ferraro Lennard de Rijk,Madhusudan C.S., Leslie, Pawel Solyga<br>
+Absent: Daniel Hans<br>
+<br>
+<b>Starting today, you can start working off of soc current<br></b> Plan made for week of testing, Lennard has made a schedule; will send it to Leslie for review then publish to Melange Dev list<br>
+<b>Lennard has already made the needed change for participant agreements (labeling the link Full Text (Printable Page) as requested by Google legal</b>
+
+<b>Next Week:<br>
+<ul><li>Sverre will commit new list code today and work on fixing remaining list issues (see "Around the Room")<br>
+</li><li>Lennard is working on org application reviewing process, which will need new list code that Sverre is finishing up;<a href='http://socghop.appspot.com/gsoc/program/accepted_orgs/google/gsoc2009'>Accepted org list</a> on socghop.appspot.com is currently broken; Lennard will cut a new release<br>
+</li><li>Mario will be working from feedback received on his work on Issue 201 (on Google Code), needs to do some refactoring<br>
+</li><li>Madhu will be updating the wiki and will be in touch with Lennard</li></ul></b>
+
+<h4>Around the "Room": Sverre</h4>
+
+<b>Sverre is working on changes to Ajaxy list system as demoed at January All Hands, changes will be committed today; hopes to finish all work on lists this week<br></b> Some lists are more difficult to fix than others since they are embedded, e.g. the "get evaluations list" and "manage student projects" page for org admins; Sverre is figuring out how to fix this<br>
+<br>
+<h4>Around the "Room": Mario</h4>
+<b>Also working on lists with Sverre; Sverre will be making changes based on Mario's current work, cleaning up comment history, etc.</b>
+
+<h4>Around the "Room": Lennard</h4>
+<b>Reviewed Ideas for GSoC 2010 and really likes Mario's ideas.</b>
+
+<h4>Around the "Room": Madhu</h4>
+<b>Not much time this week, will be picking up on testing; working on updates for 2010 program and GHOP to-do's; will ping Lennard offline for more details</b>
+
+<h2>25 Jan 2010 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Google Wave <br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>Issue 201 (on Google Code), testing update<br>
+</li><li>GSoCX Ideas wiki page, bring your ideas to life!<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 25 Jan 2010</h3>
+
+Present: Sverre Rabbelier, Mario Ferraro and Lennard de Rijk<br>
+Absent: Leslie Hawthorn, Daniel Hans and Madhusudan C.S.<br>
+<br>
+<ul><li>Testing and committing of Issue 201 (on Google Code) will be done on/before next Monday. All lists except the two which needs input functionality will have been changed. This change will not be pushed live yet.<br>
+</li><li>Lennard will move the Wiki entry on the GSoCX ideas page. Document editing looks good so does testing. Usability not reviewed yet.<br>
+</li><li>New release by Lennard before next call, will not include Issue 201 (on Google Code).<br>
+</li><li>Mail has been sent to Leslie about when to flip the switch on freezing 2009 data (Lennard stupidly forgot to CC Sverre :P)<br>
+</li><li>For next week, Lennard will fix issues arising with GHOP due to Marcelo and continue work on Org App reviewing. Sverre will work on Issue 201 (on Google Code) and Mario will have to take it easy due to work :).</li></ul>
+
+
+<h2>21 Dec 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Google Wave!<br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>Issue 201 (on Google Code), status?<br>
+</li><li>Freezing a GSoCProgram update<br>
+</li><li>Update on the agenda for the Melange Meeting in January<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 21 Dec 2009</h3>
+
+<ul><li>Paweł fixed an issue with showDuplicates method and is going to fix seed_db, because it is broken as a result of module conversion<br>
+</li><li>A number of import errors were fixed the last week. Also, a new release<br>
+</li><li>Sverre is working on the python side for the Issue 201 (on Google Code)<br>
+</li><li>Mario looked into all issues connected to Issue 201 (on Google Code), and is fixing what is missing as far as possible. Some issues will remain open to be solved after integration.<br>
+</li><li>Lennie and Daniel continued working on freezing a GSoCProgram. There are still some changes that need to be done to the sidebar menu, but they are going to commit it soon.<br>
+</li><li>Melange Meeting in January is going to be split into per-topic sessions<br>
+</li><li>New release is not scheduled for the upcoming week<br>
+</li><li>The new BLOP API (introduced recently to GAE) is going to be discussed in New York (probably during lunch time :-))</li></ul>
+
+<h2>14 Dec 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Google Wave!<br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>Missing Tests from Madhu<br>
+</li><li>Issue 201 (on Google Code), status?<br>
+</li><li>StudentProposal Task API update<br>
+</li><li>Freezing a GSoCProgram update<br>
+</li><li>Topics for the Melange Meeting in January<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 14 Dec 2009</h3>
+
+<ul><li>Madhusudan is absent, so not able to give us the update about the tests<br>
+</li><li>Mario continued his work on Issue 201 (on Google Code) and resolved some technical problems which he had encountered with the JS side.<br>
+</li><li>Sverre mostly worked on module conversion last week and reinstalled his laptop during the weekend.<br>
+</li><li>Sverre expects a lot of backend side work for fixing Issue 201 (on Google Code), deadline still looks good<br>
+</li><li>Paweł was traveling a lot, so his work focused on reviewing the revisions and patches<br>
+</li><li>Paweł is going to work on intoducing Task API to StudentProposal, Lennie suggests he really focusses on it because of the complexity.<br>
+</li><li>All participants of the Melange January meeting have already booked their tickets<br>
+</li><li>Lennie and Daniel worked on entities freezing and are going to actually freeze the GSoC 2009 soon<br>
+</li><li>Leslie wants a walkthrough of Melange on Monday<br>
+</li><li>Dan Bentley is going to join the January meeting too (and will host on Friday) :-)<br>
+</li><li>Lennie will work on the Agenda for the January meeting, will try to have the outline finished on Sunday</li></ul>
+
+<h2>7 Dec 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Google Wave!<br />
+
+<ol><li>Recollection of last week's work (Tests?)<br>
+</li><li>Datastore conversion succeeded, what's next?<br>
+</li><li>Issue 201 (on Google Code) status update<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 7 Dec 2009</h3>
+
+<ul><li>Module conversion done<br>
+</li><li>Mario working on Issue 201 (on Google Code)<br>
+</li><li>We need to move models, logics, and templates to the gsoc folders<br>
+</li><li>Lennard has spoken with Leslie, she's back<br>
+</li><li>Hopefully news on whether Mario and Daniel are attending the NYC meeting<br>
+</li><li>Almost everything functional with mock JSON objects<br>
+</li><li>Multiple tables in one page (loading done asynchronously)<br>
+</li><li>Querying done on keys, we'll need to add indexes as requires<br>
+</li><li>Lennard will be working on module conversion issues that pop up<br>
+</li><li>He'll also work on the entity freezing patch (reviewing the patch he received from Daniel)<br>
+</li><li>Mario will continue to work on 201, and 702 if he has time<br>
+</li><li>Sverre will work on moving the logic and on issue 201 (on Google Code)<br>
+</li><li>Sverre will cut & deploy a new release<br>
+</li><li>Daniel will continue working on whatever comes up and help in the module conversion</li></ul>
+
+<h2>30 Nov 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Google Wave!<br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>Update on planning Q1-Q2 '10<br>
+</li><li>Module Conversion update<br>
+</li><li>Issue 201 (on Google Code) status update<br>
+</li><li>Testing, use of Fixtures?<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 30 Nov 2009</h3>
+<ul><li>Flipping the coin works for choosing notes taker :-)<br>
+</li><li>Madhusudan worked on new fixture module for GHOP which was reviewed by Sverre.<br>
+</li><li>Daniel sent a patch for entity freezing and did a code clean-up based on pylint suggestions.<br>
+</li><li>Module conversion is probably going to happen next weekend. Backup has been completed by Dan Bentley.<br>
+</li><li>Nothing new for issue 201 (on Google Code) was committed last week. Sverre is going to start working on the backend side tomorrow.<br>
+</li><li>We will go ahead with the Fixture framework.<br>
+</li><li>Daniel is going to double check the code changes which concern the module conversion.<br>
+</li><li>Pawel is going to start working on finding duplicates issue soon.<br>
+</li><li>Madhusudan will continue his work on tests and update the wiki with the fixture usage.<br>
+</li><li>Lennard will release the roadmap by the end of Tuesday and will try to push the module conversions onto socghop together with Sverre by this weekend (if it all works).<br>
+</li><li>Issue 225 (on Google Code) marked as fixed by Daniel</li></ul>
+
+<h2>19 Oct 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Sverre Rabbelier <br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>Mario's preview of Issue 201 (on Google Code)<br>
+</li><li>Update on XSS Tokens<br>
+</li><li>Update on GHOP progress<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 19 Oct 2009</h3>
+<ul><li>Lennard tested all module conversions and made fixes where needed<br>
+</li><li>Issue 201 (on Google Code) demo is up, Mario tested with a lot of items in a list which seemed to work<br>
+</li><li>We now have to make sure we can do the incremental fetches (mostly python side work)<br>
+</li><li>Put issue 201 (on Google Code) on hold until after GHOP is working<br>
+</li><li>Mario thinks we have pretty much everything we need on the JS side<br>
+</li><li>Madhusudan fixed issue 694 (on Google Code) and attached the patch to the tracker, Lennard will review.<br>
+</li><li>He had some problems with appspot yesterday so is working mostly locally<br>
+</li><li>During weekdays he will have little time for Melange<br>
+</li><li>Next weekend Madhusudan is totally free to work on Melange<br>
+</li><li>Priority right now is that tasks can be succesfully added, and edited, and that they can be claimed<br>
+</li><li>Madhusudan approves of the new Ajaxy list<br>
+</li><li>No news from Dan on the security issue, will request an update.</li></ul>
+
+Action items:<br>
+<br>
+<ul><li>Sverre will send Dan/Google an email to ask what's going on, would be nice to get an indication<br>
+</li><li>Sverre will make the new views available in the GSoC module tomorrow and fix the url patterns<br>
+</li><li>We will try to redirect old urls to the new urls (if possible) or to a notification page<br>
+</li><li>Lennard will also work on the request system this week so that it will work with the module system<br>
+</li><li>Update from Madhusudan on what is not working in the GHOP workflow by next Sunday<br>
+</li><li>Lennard will have a look at the patch for issue 694 (on Google Code)<br>
+</li><li>Mario's general JS patches will be pushed this week after review<br>
+</li><li>Mario will also write down a protocol for communication between client and server<br>
+</li><li>Pawel will review Mario's JavaScript patches (due in 3 more days)</li></ul>
+
+<h2>5 Oct 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Google Wave :)? <br />
+
+<ol><li>Meeting notes in Wave<br>
+</li><li>Recollection of last week's work<br>
+</li><li>Mario's preview of Issue 201 (on Google Code)<br>
+</li><li>Update on model conversion (1 week left)<br>
+</li><li>Update on XSS Tokens<br>
+</li><li>Update on GHOP progress<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 5 Oct 2009</h3>
+
+<ul><li>Mario needs a wave account invite<br>
+</li><li>Lennard and Sverre have succesfully implemented the 12 steps of awesome<br>
+</li><li>Pawel added the csv export script (and made it generic for all programs) for Organizations and Roles (required to create Google Code GSoC projects)<br>
+</li><li>He is still working on Timeline, Hard deadline tomorrow (6th Oct)<br>
+</li><li>Madhusudan has fixed Issue 693 (on Google Code) and committed<br>
+</li><li>Sent bulk approval patch for review<br>
+</li><li>Mario is working on Issue 201 (on Google Code), no preview this way sadly<br>
+</li><li>We need to have sorting and searching client side; sorting works client side, but we lose paging<br>
+</li><li>It looks like JQGrid is based on a client-server grid more so than doing things server side<br>
+</li><li>Note: main concern is to be able to search, not edit<br>
+</li><li>As such this week it is now time to test the steps<br>
+</li><li>Demo will be ready by next week<br>
+</li><li>If tests are successfull we can start moving the entities<br>
+</li><li>After this is done we'll be a lot closer to running GSoC and GHOP on the same instance<br>
+</li><li>Model conversion is mostly done due to hard work by Lennard<br>
+</li><li>We will add new Middleware to ensure that all POST requests have<br>
+</li><li>Sverre will take a look at adding Token to DynaForm (this week, will report findings to Dan)<br>
+</li><li>We will be able to run GHOP/GSoC simultaneously in 3 weeks, and we will keep the demo site up to date<br>
+</li><li>Sverre will do next week's release<br>
+</li><li>Lennard and Sverre will work on testing the data conversion<br>
+</li><li>Dan will be working on the XSS token system<br>
+</li><li>Madhusudan will be workin on Issue 692 (on Google Code) and will keep testing GHOP functionality<br>
+</li><li>Mario will be preparing his demo on Issue 201 (on Google Code) for next week</li></ul>
+
+<h2>28 Sept 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Sverre Rabbelier<br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>Mario's update on Issue 201 (on Google Code)<br>
+</li><li>Update on model conversion (2 weeks left)<br>
+</li><li>Update on security issues<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 28 Sept 2009</h3>
+
+<ul><li>Pawel reviewed code all week<br>
+</li><li>His csv script will also be commited<br>
+</li><li>Sverre fixed an important security issue, only one more left! (XSS exploits)<br>
+</li><li>Lennard has been working on GHOP fixes and data migration<br>
+</li><li>Madhusudan was out-of-internet for 5 days and 2 days of PyCon.<br>
+</li><li>PyCon was so-so due to unprepared speakers, awr :(.<br>
+</li><li>Merio is better audible when he isn't there but writes an email instead :P.<br>
+</li><li>Main reason of Ajaxy list is ordering and search, which might not be possible in JQGrid<br>
+</li><li>Model conversion: Sverre committed the decorator<br>
+</li><li>Lennard and Sverre are going to implement the 12 steps of awesome<br>
+</li><li>Testing will happen next week<br>
+</li><li>No reply on mail to Google WRT security issues, but Dan Benltey did contact Pawel two days ago<br>
+</li><li>Guido van Rossum recently commited a XSS fixing decorator<br>
+</li><li>SVerre will mail Dan Bentley again to ask about getting help with using that code<br>
+</li><li>Sverre will do the release<br>
+</li><li>Madhusudan will take a look at the recent GHOP breakages (Issue 693 (on Google Code))<br>
+</li><li>He will also be working on Public Task<br>
+</li><li>Lennard will be working on Model conversion<br>
+</li><li>Pawel will work on Timeline this week</li></ul>
+
+<h2>21 Sept 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Sverre Rabbelier<br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>Mario's update on Issue 201 (on Google Code)<br>
+</li><li>Views without specific model/logic (JQGrid examples, seed_db), how to?<br>
+</li><li>Update on model conversion (3 weeks left)<br>
+</li><li>Further actions for Issue 690 (on Google Code)<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 21 Sept 2009</h3>
+
+<ul><li>Mario was busy with his examns and got ill during the weekend (and couldn't attend his examn today)<br>
+</li><li>He did put forth some effort towards issue 201 (on Google Code)<br>
+</li><li>Tried to make a page because there's no way to create a page without a logic or model connected to it<br>
+</li><li>The JQGrid example needs to talk to multiple models<br>
+</li><li>The reason our views are tied to the models are because we never needed a soc.views.base untill now<br>
+</li><li>For now put the demo in the user view, and then we will figure out where to put it<br>
+</li><li>Skype is a pain as usual<br>
+</li><li>Leslie joins the call<br>
+</li><li>Converting the Demo to a final implemetnation will take a lot of time, but that's expected<br>
+</li><li>KML patch looks good, will wait till next week's call to discuss what to do with the file due to Performance Reviews at Google<br>
+</li><li>Sverre will look into key field changing in skip_fields<br>
+</li><li>Sverre will report to Google on oustanding security issues</li></ul>
+
+
+
+<h2>14 Sept 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Sverre Rabbelier<br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>GHOP IRC meeting, goals and required data.<br>
+</li><li>Mario's update on Issue 201 (on Google Code)<br>
+</li><li>Update on model conversion (4 weeks left)<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 14 Sept 2009</h3>
+
+<ul><li>Daniel is not there<br>
+</li><li>schmrz is listening in<br>
+</li><li>Extra bonus agenda item: issues 690 that Erant brought up<br>
+</li><li>Lennard just committed a new access check that makes it impossible to read someone else's information<br>
+</li><li>Want to make a new release since socghop is in maintenance mode now<br>
+</li><li>LH asks to let her know ASAP if there's a (security related) emergency<br>
+</li><li>Sverre will do a new release<br>
+</li><li>Sverre worked on converting decorators.view to Middleware<br>
+</li><li>Sverre also fixed the test suite except  the functional tests, Matthew Willekes pinged<br>
+</li><li>Lennard worked on GHOP, almost everything committed now<br>
+</li><li>Lennard also worked on the task conversion<br>
+</li><li>Madhusudan has been busy with examns<br>
+</li><li>IRC meeting this friday:<br>
+</li><li>implement any needed features to run GHOP<br>
+</li><li>pretty clear idea what we need to do<br>
+</li><li>Madhusudan will clean up his TODO list<br>
+</li><li>we really need to fix the conference-call problem<br>
+</li><li>make sure everything functions as we think it should<br>
+</li><li>we know what work needs to be done, guide and help people to help us by telling them what they can do to help<br>
+</li><li>cleaning out melange-demo datastore<br>
+</li><li>clear message to the community: "GHOP doesn't get run without you"<br>
+</li><li>If the system doesn't meet your needs: you need to write the code to make it meet your needs<br>
+</li><li>We need a clear todo list, and to have clear 'mentors' of each item<br>
+</li><li>Up and running demo<br>
+</li><li>Merio has been busy with examns too, and might be able to do some work, but will have more time after 21st<br>
+</li><li>We can get ready for Model conversion (now we'll have to put the 11 scripts in place)<br>
+</li><li>Would be a good thing for someone from outside to help out with<br>
+</li><li>No commitment on conversion this week (from core devs) due to other activities<br>
+</li><li>Pawel will do a release this week<br>
+</li><li>Lennard will apply Madhu's Student patch<br>
+</li><li>Sverre is working on the export_kml patch</li></ul>
+
+<h2>7 Sept 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Paweł Sołyga<br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>Discussion regarding models conversion<br>
+</li><li>Discussion regarding code samples URLs in StudentProject model and generating links to code samples on Orgs home pages<br>
+</li><li>Open table discussion about GHOP<br>
+</li><li>Mario's update on Issue 201 (on Google Code)<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 7 Sept 2009</h3>
+
+<ul><li>Leslie talked a little bit about GHOP<br>
+</li><li>Leslie received some emails from people interested to help with GHOP<br>
+</li><li>Madhusudan didn't have time to update his tasks<br>
+</li><li>Lennie thinks that there might be some problems with access controls in GHOP code<br>
+</li><li>GHOP demo release hopefully for 18th of September<br>
+</li><li>Melange Team will be working on GHOP during Mentor Summit<br>
+</li><li>We need to push GHOP patches to main repository<br>
+</li><li>Discussion how to get people to help us with GHOP features and GHOP issues<br>
+</li><li>Discussion regarding code samples URLs in StudentProject model and generating links to code samples on Orgs home pages (we won't be doing that)<br>
+</li><li>Melange Developer Meeting hopefully in December<br>
+</li><li>We will try to use hg log for release notes<br>
+</li><li>Pawel updated Google App Engine, created new release and reviewed Mario patch<br>
+</li><li>CSV export that Pawel was working on is coming soon to the repository near you<br>
+</li><li>We decided that we will be doing incremental fixes for GHOP code (Lennie will push the code ASAP)<br>
+</li><li>Sverre was working on profiling and fixing caching issues<br>
+</li><li>Lennie was away didn't work on Melange<br>
+</li><li>Mario was working on Issue 201 (on Google Code),<br>
+</li><li>Mario thinks that jqgrid seems to be more powerful and customizable, he will show demo integration by 28th of September<br>
+</li><li>Models conversion script and view (HTML page) will be worked on after GHOP code is in the repository<br>
+</li><li>Sverre will do the release this upcoming weekend<br>
+</li><li>During the next conference call we will prepare a list of tasks that we can handle to casual contributors<br>
+</li><li>Small discussion regarding KML export (fetching all User entities is bad :-)<br>
+</li><li>Pawel will help Daniel with KML export<br>
+</li><li>4th of October data model conversaion deadline<br>
+</li><li>Lennie will work on data model conversation HTML page web UI<br>
+</li><li>Lennie will work on GHOP patches<br>
+</li><li>Sverre will work on caching if anything comes up, model conversion help and access checks in Statistics module</li></ul>
+
+<h2>31 Aug 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Pawel Solyga<br />
+<b>Notes taken by:</b> Sverre Rabbelier<br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>Discussion regarding models conversion<br>
+</li><li>Melange profiling<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 31 Aug 2009</h3>
+
+<ul><li>Pawel was working on cvs exporting scripts for code.google.com, he will commit it soon<br>
+</li><li>Pawel's mac was out for repair for over 3 weeks<br>
+</li><li>He also worked on fixing the survey exports (adding a link_id and comments column)<br>
+</li><li>Recent export was mailed yesterday, recent code will be committed soon<br>
+</li><li>Patches were not reviewed yet, but exports and cvs exports took priority, will be done asap now<br>
+</li><li>Mario is having connection problems again (very laggy)<br>
+</li><li>Sverre has been working on profiling and optimizing Melange together with Jake McGuire<br>
+</li><li>Sverre will ask Jake to create a wiki page with how to use the profiler<br>
+</li><li>Madhusudan has been working with Lennard on integrating GHoP, all logic and templates have been committed<br>
+</li><li>All view helpers have been committed, and the goal is to commit the last view logic by next week<br>
+</li><li>Madhusudan will be taking a break next week due ot his GRE (not available for next conf call).<br>
+</li><li>Mario has committed JSLint patches and is now comparing datatables and jqgrid for issue 201 (on Google Code) (ajaxy table list)<br>
+</li><li>General rejoicing over working towards getting issue 201 (on Google Code) resolved<br>
+</li><li>We have JSLint checks in place (along with pylint)<br>
+</li><li>About 201 both projects seem useful, with jqgrid seems more powerful on inplace editing of rows<br>
+</li><li>Daniel worked on KML exporting (since the initial script didn't work well), new version has been mailed<br>
+</li><li>Pawel will also review the export script soon<br>
+</li><li>Table discussion wrt model conversion till next week when Lennard gets back<br>
+</li><li>Sverre will continue to work on optimizing and will work with Lennard on model conversion when there is time<br>
+</li><li>Pawel will do code reviews and will work with on model conversion with Lennard and Sverre<br>
+</li><li>Madhusan will work on finishing integration of the GHoP code<br>
+</li><li>Mario will probably be offline on September 2nd (travelling back to Italy for two exams on 15 and 21).<br>
+</li><li>Further he is going to work on 201, and probably with statistics stuff (possibly shrinksafe and jslint)<br>
+</li><li>Daniel will work on integrating the statistics code as soon as we pick a date<br>
+</li><li>Scheduled: meeting to discuss statistics integration now that Sverre is back in UTC+2<br>
+</li><li>No preference for Daniel as to when we hold that meeting<br>
+</li><li>Mario will have limited time due to travelling, but 3, 4 or 6 september; or tomorrow late afternoon<br>
+</li><li>Picked a date: Sunday regular meeting time on #melange (6PM UTC, 8pm UTC+2)</li></ul>
+
+<h2>24 Aug 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Daniel Hans<br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>GSoC Integration Briefing/Update<br>
+</li><li>KML Export update by Daniel<br>
+</li><li>Update on the move to the module system<br>
+</li><li>Update to the latest SDK Release<br>
+</li><li>Task assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 24 Aug 2009</h3>
+
+<ul><li>ALL Melange Google Summer of Code passed final evaluations! :-)<br>
+</li><li>Madhusudan sent some comments to the review of his patches<br>
+</li><li>Daniel finished working on KML export<br>
+</li><li>Paweł is going to: update SDK to 1.2.4 release and push a new Melange release this week<br>
+</li><li>Some of the conference participants had connections problems with Skype; the Melange team considered trying  out some other solutions in the further calls<br>
+</li><li>Lennie said he would not be available from the following Monday through Wednesday due to his school obligations<br>
+</li><li>Sverre and Pawel will work with Mario and Daniel on integrating the statistic module to the Melange repository<br>
+</li><li>Lennie will work with Madhusudan on integrating his code<br>
+</li><li>Lennie will also work on issues 672 and 385 from the Melange issue tracker<br>
+</li><li>Pawel will review Mario's patch JSLint patch which reduces sizes of JavaScript files<br>
+</li><li>James has to talk with Sverre about his news feed patch which he wants to submit as a series of Mercurial Queues patches<br>
+</li><li>Pawel will write a script to create a cvs export that can be used to create the GSoC projects on Google Project Hosting.</li></ul>
+
+<h2>18 Aug 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Pawel Solyga <br />
+<b>Notes taken by:</b> Daniel Hans<br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>GSoC Student Status Update<br>
+</li><li>GSoC Final Evaluations<br>
+</li><li>Tasks assignment for the upcoming week<br>
+</li><li>Contributing to Melange after GSoC<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 18 Aug 2009</h3>
+
+<ul><li>Pawel came back from his vacation (welcome back! :-)<br>
+</li><li>Daniel fixed some bugs in visualizations and added new option to change size of visualizations<br>
+</li><li>Daniel prepared a new series of patches in accordance with Sverre's comments and suggestions<br>
+</li><li>Daniel is now working on KML exporting<br>
+</li><li>Mario also worked on bug fixing and refactoring his code - he sent his patches to the mailing list and is waiting for response from the developers)<br>
+</li><li>Mario sent some patches which introduced JSLint in order to reduce sizes of JS files<br>
+</li><li>Mario worked on exporting a visualizations as JS code - now one can paste some code on his site and a visualization will be displayed on his or the external website.<br>
+</li><li>Madhusudan also worked on bug fixing and new patches<br>
+</li><li>Madhusudan introduced some new features to the GHOP module (for example student grade added when a student is at high school, student type for students)<br>
+</li><li>Madhusudan created a new wiki page with user manual for using the GHOP module for Melange<br>
+</li><li>All GsoC students updated their demo instances<br>
+</li><li>Pawel asked GSoC students if they want to participate in Melange development in the future. As I understand we all want :-)<br>
+</li><li>Pawel will talk to Lennie on what is needed to be done in the upcoming weeks<br>
+</li><li>Pawel will replay to the mailing-list letters received while he was on vacation</li></ul>
+
+<h2>10 Aug 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk <br />
+<b>Notes taken by:</b> Sverre Rabbelier <br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>GSoC Student Status Update<br>
+</li><li>GSoC Final Week Goals and Wrap Up<br>
+</li><li>New Melange release<br>
+</li><li>Tasks assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 10 Aug 2009</h3>
+
+<ul><li>Pawel is on vacation<br>
+</li><li>Sverre has had little to no time last week<br>
+</li><li>Lennard made it possible for admins to see the replies to surveys<br>
+</li><li>Daniel has been working on 'visualize link' page, doesn't work perfectly on dashboard page<br>
+</li><li>Mario has agreed to work on that<br>
+</li><li>Daniel has worked on new patches, Sverre will try to review (or at least answer the question there in) today<br>
+</li><li>We want access checks to be changeable, default should be highest level<br>
+</li><li>James has been refactoring the newsfeed code (now including tests!)<br>
+</li><li>Plan is to implement PubSubHubub this week<br>
+</li><li>He also worked on a new patch for the mail dispatcher this week<br>
+</li><li>Mario mostly worked on the bugfixes for the Dashboard<br>
+</li><li>There are some problems with the JSON format (backend expected string instead of a number)<br>
+</li><li>Also did research on how to seperate our HTML and JS (templating), will send an email to the list<br>
+</li><li>Statistic export is a popup box that shows copy/pasteable code for inclusion in blogpost<br>
+</li><li>Madhusudan worked on supporting selecting Task Type and difficulty level tags while creating/editing tasks<br>
+</li><li>Started work on Task search filter, but stalled (for now) due to GAE limitations<br>
+</li><li>Other than that it is mostly bug fixing<br>
+</li><li>We expect all student's code to be submitted to the ML by the and of GSoC<br>
+</li><li>All demo instances should be up to date (as well as the wiki page listing demo instances)<br>
+</li><li>Sverre did a new release yesterday, Lennard or Sverre will do the next release<br>
+</li><li>We want to have the models converted before GHOP to prevent pain later<br>
+</li><li>Lennard will work out a schedule once the wiki page is updated</li></ul>
+
+<h2>3 Aug 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk <br />
+<b>Notes taken by:</b> Sverre Rabbelier <br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>GSoC Student Status Update<br>
+</li><li>New Melange release<br>
+</li><li>Tasks assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting notes 3 Aug 2009</h3>
+
+<ul><li>Last week, student to mentor maps online<br>
+</li><li>Popular feature<br>
+</li><li>We have started with an overview link for org admins to see whether mid-term/end-term surveys have been taken<br>
+</li><li>Skype is a PITA as usual<br>
+</li><li>Daniel was working on the last few things on his personal goals (multiple visualizations per widget)<br>
+</li><li>New patches will be sent on Wednesday/Thursday<br>
+</li><li>Lennard voices concerns about access control to widgets<br>
+</li><li>Mario has been working on making it possible to integrate statistics in blog posts etc.<br>
+</li><li>Important goal for statistics: access control (the docs access checks are probably reusable)<br>
+</li><li>Madhusudan's task flow is working, he has a few bugfixes left<br>
+</li><li>Sverre is doing the next release<br>
+</li><li>We might want to update getForFields to allow for specifying multiple ancestors<br>
+</li><li>Mario will start new thread about seed_db<br>
+</li><li>Thread about modularization has fallen silent</li></ul>
+
+
+<h2>27 Jul 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Pawel Solyga <br />
+<b>Notes taken by:</b> Lennard de Rijk <br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>GSoC Student Status Update<br>
+</li><li>New Melange release<br>
+</li><li>Tasks assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+Absent: Madhusudan C.S. and Leslie Hawthorn<br>
+<br>
+<ol><li>Pawel has been working CSV export for both Surveys and Student Projects. This code is currently being cleaned up and will be committed before the end of the week.<br /> Lennard has fixed Issue 655 (on Google Code) and has been working, with Mario, on reorganizing the map that links Students and Mentors together. The stored locations for students, mentors and org admins will be changed using remote_api to city level.<br>
+</li><li>Mario has been working on dynamically changing the type of visualization for your statistics, currently there are four different types. However it is easy to add additional types of visualization.<br /> James has been working on getting his NewsFeed code ready and working on the Survey Record view page.<br>
+</li><li>A new Melange version has been successfully deployed by Pawel on the 27th of July. The changelogs will be updated shortly by Sverre.<br>
+</li><li>Lennard will be creating this week's release and will continue his work with Mario on the Organization home page map which might actually be finished this week. Also he will work on listing survey information on the Project manage page for org admins.<br /> Pawel will finish his CSV export and will commit an early version of the File model for others to comment on.<br /> Sverre will update the latest changelog this week and work on a view for the administration team to withdraw students from the program. Also Daniel has asked Sverre to review a set of patches. Sverre acknowledged Daniels request to review them within a few (3-4) days.<br>
+</li><li>We decided that Skype is very unstable :).</li></ol>
+
+<h2>20 Jul 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Pawel Solyga <br />
+<b>Notes taken by:</b> Sverre Rabbelier <br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>GSoC Student Status Update<br>
+</li><li>Task Queue API usage examples<br>
+</li><li>New Melange release<br>
+</li><li>Tasks assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting Notes 20 Jul 2009</h3>
+
+<ul><li>Absent: Leslie, Madhu, Mario<br>
+</li><li>Pawel did not have much time<br>
+</li><li>Worked on nag mails with Lennard<br>
+</li><li>Will work on file model this time<br>
+</li><li>Sverre fixed tests<br>
+</li><li>Did code review<br>
+</li><li>Sverre will try to be more responsive to our students<br>
+</li><li>Daniel mostly worked on the backend side of the statistic module (more generic)<br>
+</li><li>Adding new statistics will need little to none code changes (see blog)<br>
+</li><li>Almost all (backend) goals will be achieved this week<br>
+</li><li>Daniel will try to synchronize with Mario<br>
+</li><li>James just received a code review<br>
+</li><li>Next step is an email notification (including access and preference check)<br>
+</li><li>Blog post from James will follow soon<br>
+</li><li>Good news, ApplicationError 1 should be history<br>
+</li><li>New module for tasks committed by Lennard<br>
+</li><li>No new release yet because there were only a few bug/style fixes<br>
+</li><li>Release postphoned till we have something substantial to push<br>
+</li><li>James will try to get the survey stuff ready (wrt final survey)<br>
+</li><li>Sverre will have a meeting with James to discuss things</li></ul>
+
+<h2>13 Jul 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Pawel Solyga <br />
+
+<ol><li>Missing notes from 7th of July<br>
+</li><li>Recollection of last week's work<br>
+</li><li>Survey improvements before Final Evaluation<br>
+</li><li>Exporting Survey Answers (and other files?)<br>
+</li><li>Survey Processing update<br>
+</li><li>GSoC Student Status Update<br>
+</li><li>New Melange release<br>
+</li><li>Tasks assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting Notes 13 Jul 2009</h3>
+
+Missing notes from 7th of July<br>
+<ul><li>Leslie will post notes soon</li></ul>
+
+Recollection of last week's work<br>
+<ul><li>Lennie was working on nag emails and automatic evaluation of surveys,<br>
+</li><li>Sverre and Pawel had a meeting about Statistics Project final goals,<br>
+</li><li>Pawel was been working on new org propery in ProjectSurveyRecord and GradingProjectSurveyRecord and remote_api function for setting that property in all entities, also worked on possible csv export solutions for Survey results, code reviews, fixing GSoC mentors/students accounts on socghop</li></ul>
+
+Survey improvements before Final Evaluation<br>
+<ul><li>Org admins should be able to see which students and mentors filled in and didn't fill in the survey,<br>
+</li><li>Org admins should be able to see survey content for each student and mentor,<br>
+</li><li>this should be easier to achieve with new org property in ProjectSurveyRecord and GradingProjectSurveyRecord</li></ul>
+
+Exporting Survey Answers<br>
+<ul><li>Mario suggested to look at <a href='http://jquery.tiddlywiki.org/twFile.html'>http://jquery.tiddlywiki.org/twFile.html</a>,<br>
+</li><li>Sverre suggested to use document.write,<br>
+</li><li>Pawel explained how Task Queue API can be used to create files up to 10 Mb of size and suggested new File model for that,<br>
+</li><li>CSV export of all StudentProjects with pass/fail column is needed for GOSPO team to determine who to pay midterm money (Pawel will work on that)</li></ul>
+
+Survey Processing update<br>
+<ul><li>we are almost there,<br>
+</li><li>the tasks needed for that are ready and committed to the repository,<br>
+</li><li>Lennie said he needs one more day to test it and run it on socghop</li></ul>
+
+GSoC Student Status Update<br>
+<ul><li>Madhusudan posted a blog post about the progress,<br>
+</li><li>Daniel posted a blog post about the progress,<br>
+</li><li>Mario and James will blog post about the progress soon,<br>
+</li><li>Pawel will review the Tags patch,<br>
+</li><li>Daniel/Pawel will talk about KML generation using new File storing mechanism,<br>
+</li><li>Mario and Daniel are happy with Stats project final goals,<br>
+</li><li>Mario is busy with exam this and next week (so work time is limited),<br>
+</li><li>Google Chart API will be used to generate static images in Stats project,<br>
+</li><li>Daniel has some problems with creating patches in Mercurial (Pawel can assist),<br>
+</li><li>James met with Sverre this weekend to discuss News Feed module</li></ul>
+
+New Melange release<br>
+<ul><li>Sverre did a release this week,<br>
+</li><li>Pawel will do a release at the end of the week,<br>
+</li><li>Lennie will do release today and probably tomorrow with new features needed for Surveys</li></ul>
+
+Tasks assignment for the upcoming week<br>
+<ul><li>Pawel will be working on new File model and module to save files using tasks<br>
+</li><li>Pawel will work on StudentProject csv export using remote api<br>
+</li><li>Lennie will be working on Surveys/Student Project update,<br>
+</li><li>Lennie will send Leslie the report who didn't fill in the survey yet,<br>
+</li><li>Sverre will fix broken tests,<br>
+</li><li>GSoC students will continue to work on their projects :-)<br>
+</li><li>Next week lets work on unique user ids support, this should be put on agenda,<br>
+</li><li>James will work on the view for Org admins to see ProjectSurveyRecords and GradingSurveyRecords,<br>
+</li><li>James will finish Issue 653 (on Google Code) (they will update the issue Owner),<br>
+</li><li>Pawel suggested that we should show "Survey saved." and he will create an issue for that,<br>
+</li><li>Mario will work on Issue 655 (on Google Code)</li></ul>
+
+
+<h2>7 Jul 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Leslie Hawthorn? <br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>GSoC Surveys TODO's<br>
+</li><li>GSoC Student Status Update, are you ready for reviews?!?<br>
+</li><li>New Melange release<br>
+</li><li>Someone named Ajaksu?<br>
+</li><li>Tasks assignment for the upcoming week<br>
+</li><li>Round of questions</li></ol>
+
+<h3>Meeting Notes 7 Jul 2009</h3>
+TBD<br>
+<br>
+News Feed:<br>
+<ul><li>Module will be posted for code review on July 7th.<br>
+</li><li>Demo will be ready on July 7th, on <a href='http://jamstage.appspot.com'>http://jamstage.appspot.com</a>
+</li><li>Going to talk to Daniel Hans (and use the new Tasks wiki page) for Tasks integration.<br>
+</li><li>Note: let James know if you have any new newsfeed feature requests</li></ul>
+
+<h2>29 Jun 2009 Team Conference Call Agenda</h2>
+
+<b>Chaired by:</b> Pawel Solyga<br />
+<b>Notes taken by:</b> Lennard de Rijk<br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>GSoC Surveys Battle plan<br>
+</li><li>GSoC Student Status Update<br>
+</li><li>New Melange release<br>
+</li><li>Tasks assignment for the upcoming week</li></ol>
+
+<h3>Meeting Notes 29 Jun 2009</h3>
+
+Meeting took place on IRC due to technical difficulties with skype.<br />
+
+<b>Attendees:</b> Daniel Diniz, Daniel Hans, James Levy, Lennard de Rijk, Leslie Hawthorn, Madhusudan C.S., Mario Ferraro , Pawel Solyga, Sverre Rabellier<br>
+<br>
+The logs start here: <a href='http://www.thousandparsec.net/~irc/logm/%23melange.2009-06-29.log.html#t2009-06-29T15:12:04'>http://www.thousandparsec.net/~irc/logm/%23melange.2009-06-29.log.html#t2009-06-29T15:12:04</a> <br />
+The logs end here: <a href='http://www.thousandparsec.net/~irc/logm/%23melange.2009-06-29.log.html#t2009-06-29T16:25:48'>http://www.thousandparsec.net/~irc/logm/%23melange.2009-06-29.log.html#t2009-06-29T16:25:48</a> <br />
+
+Survey TODO list:<br>
+<ul><li>Clean up Survey view main module (Ajaksu, 24h)<br>
+</li><li>Make sure creation for Grading and ProjectSurvey work (Lennard, 48h)<br>
+</li><li>Show view should only show the survey, take view needs to be added to take a survey. (James, reviewed by Sverre, 24h)<br>
+</li><li>Project and Grading surveys need to be administered through the new take view (Lennard)<br>
+</li><li>Results view needs to be introduced to list all results for one survey. URL pattern including %(key_fields) should do the trick. Read-access only? (None)<br>
+</li><li>Fixing layout(CSS) and JS issues (Mario)<br>
+</li><li>Create access check for taking a survey similair to Documents (James and Sverre, 48h)<br>
+</li><li>Code Reviews (Pawel, throughout the week)<br>
+</li><li>Code Testing + reporting failing/missing functionality (Pawel, throughout the Week)</li></ul>
+
+Pawel will be given a more specific task within a few days when the code has cleared up.<br>
+<br>
+Availability upcoming week: <br />
+<ul><li>Sverre 2h/day<br>
+</li><li>Pawel 4h/day till Friday<br>
+</li><li>Lennard 8h/day from Thursday, sporadic untill Wednesday<br>
+</li><li>James ?<br>
+</li><li>Ajaksu ?</li></ul>
+
+Next release will be cut by Sverre Rabbelier during the Weekend if he deems a revision fit enough for it. Will update the list with his decision.<br>
+<br>
+GSoC Students, on target updates can be found on <a href='http://melange-dev.blogspot.com/'>http://melange-dev.blogspot.com/</a>
+
+<h2>22 Jun 2009 Team Conference Call Notes</h2>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Leslie Hawthorn<br />
+<b>Attendees:</b> Daniel Diniz, Daniel Hans, James Levy, Lennard de Rijk, Leslie Hawthorn, Madhusudan C.S., Mario Ferraro , Pawel Solyga<br>
+<br>
+Round the Room (updates from the last week):<br>
+<ul><li>Pawel: updating to Django 1.0, will cut a new release on Friday<br>
+</li><li>Lennard: cut new release this week, fixed issues<br>
+</li><li>James Levy: been working on surveys with Daniel Diniz, see mailing list discussion with James Crook et. al on models<br>
+<ul><li>most features needed for midterm surveys complete, update required to make pass/fail question activate automatically vs. admin intervention<br>
+</li><li>more testing needed<br>
+</li><li>working on nag notification emails as described in <a href='http://code.google.com/p/soc/issues/detail?id=639'>Issue 639</a>
+</li></ul></li><li>James also some issues/work for review on newsfeeds but surveys taking priority<br>
+</li><li>Merio: having meetings and posting notes to the dev list, keeping notes on to do's in the issue tracker, working on integrated test suite and adding exclusion example<br>
+</li><li>Daniel: working on backend of statistics module and working on more sophisticated stats where we do not have pre-determined outcomes (e.g. % of students seeking a PhD degree vs. % of students who are attending the University of Delft), also add in functionality for create/delete/list<br>
+</li><li>Madhu has made it possible to create a GHOP program, all features as described on the wiki page are now implementable but in progress, we have a task quota per org, can create tasks, views of assigned slots but is not using tasks API<br>
+</li><li>Open question: do we need another student model for GHOP?<br>
+</li><li>LH to look for "trusted testers" of midterm survey functionality</li></ul>
+
+General Point about Surveys:<br>
+<br>
+In an ideal world:<br>
+<ul><li>there is a checkbox so that students can share their surveys with the mentors<br>
+</li><li>mentors can share their surveys with their students<br>
+In the real world:<br>
+</li><li>Org admins should have access to all surveys for their org.<br>
+</li><li>Program admins should have access to all surveys for a given program.</li></ul>
+
+<h2>22 Jun 2009 Team Conference Call Agenda</h2>
+
+<ol><li>Recollection of last week's work<br>
+</li><li>GSoC Surveys status update/discussion<br>
+</li><li>GSoC Student Status Update<br>
+</li><li>GSoC Map on organization home page<br>
+</li><li>New Melange release<br>
+</li><li>Changes within Melange (New Project Lead)<br>
+</li><li>Tasks assignment for the upcoming week</li></ol>
+
+<h2>16 June 2009 Team Conference Call</h2>
+
+<h3>Call Agenda</h3>
+
+<b>Chaired by:</b> Lennard de Rijk<br />
+<b>Notes taken by:</b> Sverre<br />
+<b>Attendee's:</b> Pawel, Lennard, Sverre, Merio, (Late: Ajaksu, Daniel, James)<br />
+<b>Absents:</b> Leslie(Meeting), Dan Bentley(Work), Daniel Hans, Madhusudan(Exams)<br />
+
+<ol><li>Recollection of last week's work<br>
+</li><li>GSoC Surveys status update/discussion<br>
+</li><li>Document-like per entity rights dicussion in repsonse to mail from James Crook (<a href='http://groups.google.com/group/melange-soc-dev/browse_thread/thread/7db2f2e52c23fdb0'>http://groups.google.com/group/melange-soc-dev/browse_thread/thread/7db2f2e52c23fdb0</a>)<br>
+</li><li>GSoC Student Status Update<br>
+</li><li>New Melange release<br>
+</li><li>Tasks assignment for the upcoming week</li></ol>
+
+<h3>Call Notes</h3>
+
+<ol><li>Biggest change is fix for broken student page (ninja release)<br>
+</li><li>Pawel was at WWDC<br>
+</li><li>Sverre completed bachelor project<br>
+</li><li>Slow week, not much change<br>
+</li><li>Pawel was concerned that Document Access control might not work for surveys, however the three different kinds of access currently available for surveys (read, write, submit) will cover the necessary access control requirements.<br>
+</li><li>Pawel will reply to James Crook's access control mail<br>
+</li><li>Mario went to a conference (which was great)<br>
+</li><li>Daniel joined the call<br>
+</li><li>Mario met James and they produced an architecture for the Python end to handle customised statistics<br>
+</li><li>Mario met up on IRC today with Daniel and got working on merging their code<br>
+</li><li>Plan for this week is (for Mario) to start on python code (might need some help)<br>
+</li><li>Mario and Daniel will have regular daily IRC meetings starting from today (a quick summary will be posted to the list/wiki)<br>
+</li><li>James joined the call<br>
+</li><li>Mario will be happy with his progress once his code is merged and he has more python done<br>
+</li><li>James made some good progress with newsfeed but some things have come up (mostly access related)<br>
+</li><li>James is also working on surveys a lot because they need to be done soon<br>
+</li><li>PubSub would be interesting but low priority (post mid-term)<br>
+</li><li>Surveys is well on it's way to being done (since James is taking on multiple students per mentor part)<br>
+</li><li>Ajaksu is fixing small bugs and layout related things<br>
+</li><li>Leslie will give some feedback on the surveys<br>
+</li><li>Before the weekend the surveys should be feature complete<br>
+</li><li>Ajaksu will start submitting patches for the stable parts of surveys<br>
+</li><li>No release because there were no changes after the ninja release<br>
+</li><li>Lennard will be doing the release this weekend on Sunday, hopefully incorperating code from Surveys<br>
+</li><li>Lennard is working on his report for bachelor thesis, so he will be busy for the next 2.5 weeks still<br>
+</li><li>He will still try to review as much code as possible and get the surveys bug free<br>
+</li><li>Pawel is going through some issues in the tracker that are assigned to him<br>
+</li><li>He will also go over the survey code and test it if possible<br>
+</li><li>Mario and Pawel will also catch up and get the code reviewed<br>
+</li><li>We do not have to wait to write code for the Task API<br>
+</li><li>Sverre will be off the map till next Monday but will be reading his mail and on GTalk on his G2 (Ion)<br>
+</li><li>Google I/O > WWDC (because: free phone!)<br>
+</li><li>Keep up the good work!<br>
+</li><li>Sverre will mail Dan Bentley to make an appointment to get up to speed with Hg</li></ol>
+
+<h2>8 June 2009 Team Conference Call</h2>
+
+<h3>Call Agenda</h3>
+Short update on work progress of the development team and specifically the students.<br>
+<br>
+<h3>Call Notes</h3>
+Attendees: Sverre Rabbelier, Dan Bentley, Lennard de Rijk, Mario Ferraro, Madhusudan C.S.<br>
+<br>
+Absents:<br>
+Pawel Solyga, Daniel Hans, James Levy<br>
+<br>
+<b>Developers</b>
+Sverre Rabbelier:<br>
+<ul><li>Busy with his final bachelor thesis<br>
+</li><li>Tweaked the module design to facilitate the problems that Madhusudan ran into regarding circular imports. (<a href='http://code.google.com/p/soc/source/detail?r=4f87bab3c'>r4f87bab3c</a>)<br>
+</li><li>Fixed error pages to show HTML output directly instead of redirecting to static page. (<a href='http://code.google.com/p/soc/source/detail?r=7fe19ebfe0'>r7fe19ebfe0</a>)</li></ul>
+
+Dan Bentley:<br>
+<ul><li>Wants to do patch reviews! Sverre will redirect some of his work to him.<br>
+</li><li>Sverre will help him out with "Hg 101"</li></ul>
+
+Lennard de Rijk:<br>
+<ul><li>Fixed Issue 271 (on Google Code) and Issue 630 (on Google Code).<br>
+</li><li>Has reviewed several patches of Madhusudan regarding his GSoC project.<br>
+</li><li>Also busy with final bachelor thesis.</li></ul>
+
+<b>GSoC Students</b>
+
+Daniel Hans:<br>
+<ul><li>Has not been much visible communication.<br>
+</li><li>Merio received mail to discuss the JS layer with him. They decided to meet up on IRC for this, no reaction since 6th of June.</li></ul>
+
+James Levy:<br>
+<ul><li>Working on newsfeed framework regarding news collection. Trouble regarding documents using temporary work arround for missing scope values. Lennard suggest that this be fixed (Issue 637 (on Google Code)).</li></ul>
+
+Mario Ferraro:<br>
+<ul><li>Update on <a href='http://groups.google.com/group/melange-soc-dev/browse_thread/thread/3d5d2d38f95365d8'>http://groups.google.com/group/melange-soc-dev/browse_thread/thread/3d5d2d38f95365d8</a>
+</li><li>Working on basic JS framework for statistics.<br>
+</li><li>The JS skeleton is in place needs about 1-2 days more work.<br>
+</li><li>Added JSUnit framework and sample testcases to his repository.<br>
+</li><li>Wiki has been updated about the use of the tools that have been added to his repository.<br>
+</li><li>Will be AFK for the next 3 days due to attending a conference.<br>
+</li><li>The skeleton JS framework needs to be finished before Mario can attempt Python code, further framework discussions should happen this week. Python should follow soon after.</li></ul>
+
+Madhusudan C.S.:<br>
+<ul><li>Update on <a href='http://melange-dev.blogspot.com/'>http://melange-dev.blogspot.com/</a>
+</li><li>Working on several views. Program View patch has been submitted and will be updated.<br>
+</li><li>Will take a break next week for final bachelor exams, from 12th of June till 19th of June. Will post summary before leaving on the 12th. After exams it's gonna be 120% <code>^_^</code>.</li></ul>
+
+<b>Additional</b>
+Sverre will mail Daniel and James about conference call and summary.<br>
+Lennard will post notes hurray!<br>
+Feel the love...?<br>
+<br>
+<br>
+<br>
+<h2>1 June 2009 Team Conference Call</h2>
+
+<h3>Call Notes</h3>
+<ul><li>All students need to publish status updates on the <a href='http://melange-dev.blogspot.com'>Melange Developer Blog</a> by tomorrow<br>
+<ul><li>It's fine to post a link to posts you've already written for your personal blog.<br>
+</li></ul></li><li>Pawel has reviewed Zachary Voase's Paver build script, needs to do some style fixes to it, is also waiting for some feedback from Zachary but overall script looks good</li></ul>
+
+<ul><li>Developer To Do's This Week<br>
+<ul><li>Sverre will be working on reviewing work on Statistics Module and Surveys this week, as well as James Levy's forthcoming work on News Feeds. Sverre will be doing a release on Wednesday, gated by Pawel fixing Maps bugs (see next point)<br>
+</li><li>Pawel is working on fixing the bug in our patch to display maps on organization pages, will be debugged/fixed by Wednesday or front end code will be backed out so Sverre can do a release<br>
+</li><li>Lennard is busy through 1 July so will be focusing exclusively on mentoring Madhusudan</li></ul></li></ul>
+
+<ul><li>GSOC Developer To Do's This Week<br>
+<ul><li>James Levy is working on News Feeds, will update the wiki page spec and ask for feedback on the developers list once page is updated; James is working on surveys with Ajaksu and learning how to use Mercurial (aka hg); Sverre available to help with hg questions<br>
+</li><li>Madhusudan wonders if taggable will be checked in today. Pawel sez yes, within 2 hours of call; Pawel is committing an extension that allows different tagging models and will post an email to the developers list explaining how to use taggable.<br>
+</li><li>Mario will be working on JavaSscript stuff some more for the next 2-3 days. Will be moving more onto the Python coding side after that.<br>
+</li><li>Daniel needs his code reviewed before he can make progress. Sverre will try to get to it by Wednesday, Pawel has committed to reviewing by Wednesday.</li></ul></li></ul>
+
+<ul><li>Madhusudan wants to know if he should put his code into soc.modules now or later; Sverre says <i>sooner</i> so we can find any errors/problems early. (Release Early, Release Often! :)<br>
+</li><li>James Levy wonders where URL patterns went. Sverre is sending an email to the dev list with details. Short answer:  soc.modules.soc_core.callback.</li></ul>
+
+
+<h3>Call Agenda</h3>
+
+<ol><li>GSoC Status update blog posts<br>
+</li><li>Paver build script discussion<br>
+</li><li>Tasks assignment for the upcoming week<br>
+</li><li>New Melange release</li></ol>
+
+
+<h2>18 May 2009 Team Conference Call</h2>
+
+Attendees: Dan Bentley, Madhusudan CS, Mario Ferraro, James Levy, Sverre Rabbelier, Lennard de Rijk<br>
+<br>
+Absent: Daniel Hans, Leslie Hawthorn<br>
+<br>
+<h3>Call Notes</h3>
+
+<b>Summary</b>
+<ol><li>Unique user ID's will be fixed this week by Pawel<br>
+</li><li>All GSoC students will be given Project Membership Access. Their patches will still need approval before they may be pushed. The main reason for giving access is that issues can be assigned to them.<br>
+</li><li>GSoC Students will need to get their own AppEngine instance so that they can push their own code. The students will be given developer access on melange-dev aswell so they can experience what's going on.<br>
+</li><li>Lennard unfortuneatly will not complete the assigned test due to other project and university obligations, Sverre is helping out the students with writing test as expected and also working on refactoring Melange. James is working on surveys, Merio is working on seed_db and Madhu has just submitted a patch for adding Organization logic tests.<br>
+</li><li>Survey patch will be rebased shortly after the meeting and will then be reviewed by Sverre. According to James the surveys are on track for a solid test run at the end of the week (24th of May).<br>
+</li><li>The all-hands meeting agenda will be posted on the discussion group by Pawel. It will contain references to all the issues in the tracker that need to be discussed. Other items can be suggested/added as well.<br>
+</li><li>The new release/development progress was in need of discussion thanks to the move to HG. Making multiple heads seemed to be favored above branching. Augie will be mailed by Sverre for information.<br>
+</li><li>Dan's patch is not complete yet, however it will not be worked on before the all-hands May meeting so that we might discuss any other viable solutions<br>
+</li><li>The ajaxy list view will be discussed during the all-hand May meeting. James and Merio have expressed interest in it's design they will be added to the meeting when/if that's possible.<br>
+</li><li>Taggable seems a favorite, Lennard still needs to take a good look at the systems. This will be discussed further during the all-hands May meeting.<br>
+</li><li>James is working on surveys expected to have something well-testable by the end of the week. Merio is working with Pawel on seed_db something should be up and running by the end of the week. Madhusudan has just submitted a patch including tests also he's fleshing out the wiki pages regarding GHOP. Our students seem to be happy but they were quiet in Skype :D.</li></ol>
+
+<b>All-hands May</b>
+
+Items certainly on the agenda are:<br>
+<ul><li>GSoC Survery progress, do we feel ready for it?<br>
+</li><li>Plan to make Melange modulair.<br>
+</li><li>Ajaxy list, experiments will be done by Pawel that week. (In combination with the 1000 entity fix)<br>
+</li><li>Discussion about which system to use for tags, Taggable seems a favorite.</li></ul>
+
+<b>Misc</b>
+<ul><li>Seed_db can be called by using the devvin as version name.<br>
+</li><li>Daniel is working on GSD so that he can fully focus on GSoC from the 23rd.<br>
+</li><li>James will be in SF aswell during Google I/O</li></ul>
+
+<b>Action Items (Deadline)</b>
+<ul><li>Pawel will submit fix for unique User ID's (24th of May)<br>
+</li><li>Pawel will send an email about commit access for our students (18th of May)<br>
+</li><li>Pawel will send an email to open the discussion about the all-hand agenda (18th of May)<br>
+</li><li>James will rebase his survery work on Sverre's Git repo (18th of May)<br>
+</li><li>Sverre will mail Augie if the new release process suits a HG-controlled project (18th of May)<br>
+</li><li>Lennard will look at the different tagging systems (24th of May)</li></ul>
+
+<h3>Call Agenda</h3>
+
+<ol><li>Unique user ID's discussion (when we plan to implement that)<br>
+</li><li>Commit access for GSoC students<br>
+</li><li>Developer access to testing instances for GSoC students<br>
+</li><li>Testing month status update<br>
+</li><li>Surveys module patch review<br>
+</li><li>Agenda for all-hands meeting<br>
+</li><li>New release and Melange Development Process using hg (branches, tags)<br>
+</li><li>Update from Dan about his work on 1000 limitation patch<br>
+</li><li>ajaxy list view discussion<br>
+</li><li>Tags support<br>
+</li><li>GSoC Community Bonding period status update</li></ol>
+
+
+<h2>4 May 2009 Team Conference Call</h2>
+
+Attendees: Dan Bentley, Madhusudan CS, Mario Ferraro, Daniel Hans, Leslie Hawthorn, Sverre Rabbelier, Lennard de Rijk<br>
+<br>
+<h3>Call Notes</h3>
+
+<ul><li>1000 entities fix:<br>
+<ul><li>Dan working on learning Hg<br>
+</li><li>Discussion of indexing - specific index for each query, noted exploding indexes problem<br>
+</li><li>Timestamps vs. Names are confusing for users<br>
+</li><li>Team needs to sync up regarding Ajaxy List views<br>
+</li></ul></li><li>Dan is checking on application errors when sending out mass emails (e..g. when students are accepted)<br>
+</li><li>Testing Meeting recap - notes will be sent out (Pawel)<br>
+<ul><li>Need a getting started testing page to document the common challenges when doing testing for Melange<br>
+<ul><li>diones on IRC created a document on getting pylint working in Eclipse, should be pointed to from this wiki page<br>
+</li></ul></li></ul></li><li>Summer of Coder check in<br>
+<ul><li>Madhu is comfortable getting started<br>
+</li><li>Daniel has some questions, emailed them to Sverre<br>
+</li><li>Mario is comfortable working on the JavaScript side of Melange, working on getting up to speed in other areas of the code base<br>
+</li><li>Sverre had first meeting with James Levy and will publish pointer to logs<br>
+</li><li>Pawel will follow up with Daniel and Mario early this week to provide guidance on stats module<br>
+</li></ul></li><li>Team All Hands Meeting at end of May: working session topics<br>
+<ul><li>Discuss refactoring Melange to better support multiple programs<br>
+</li><li>Summer of Code check-in<br>
+</li><li>Usability: how will we get help in this area, options for UI<br>
+</li><li>Ajaxy List View and Survey Modules update<br>
+</li></ul></li><li>Dan will check his schedule to see if he can being all hands meeting on 24 May<br>
+</li><li>Roadmap Owners<br>
+<ul><li>Sverre: Survey support, Testing, feed support<br>
+<ul><li>private feeds on dashboards are a good point for all Summer of Code students to collaborate<br>
+</li></ul></li><li>Lennie: (on list) clubs support, GHOP items<br>
+</li></ul><ul><li>Lots of patches have come in - Dan Bentley is available to help with patch reviews</li></ul></li></ul>
+
+<h3>Call Agenda</h3>
+
+<ul><li>1000 entities fix (need Dan Bentley for this conversation)<br>
+</li><li>Testing Meeting Review (quick sync - do we feel good about current plan? follow up meeting needed / planned?)<br>
+</li><li>Summer of Coder project update<br>
+<ul><li>James & Madhusudan have had initial meetings, Daniel and Merio status updates<br>
+</li></ul></li><li>Team All Hands Meeting in 3 weeks: goals, agenda, planning<br>
+</li><li>Roadmap needs granular owners - <a href='http://groups.google.com/group/melange-soc-dev/browse_thread/thread/41a220951ce2c8bf/677cef96e5700953#677cef96e5700953'>discussion</a>?<br>
+</li><li>Outstanding Patch Reviews<br>
+<ol><li><a href='http://code.google.com/p/soc/issues/detail?id=172'>Issue 172</a> - Date picker (blocked on 263)<br>
+</li><li><a href='http://code.google.com/p/soc/issues/detail?id=263'>Issue 263</a> - IE tooltips<br>
+</li><li><a href='http://code.google.com/p/soc/issues/detail?id=227'>Issue 227</a> - JS help windows<br>
+</li><li><a href='http://code.google.com/p/soc/issues/detail?id=505'>Issue 505</a> - Make student proposal public check box option (patch needs work - what's status?)<br>
+</li><li><a href='http://code.google.com/p/soc/issues/detail?id=538'>Issue 538</a> - Subscriptions to proposals<br>
+</li><li><a href='http://code.google.com/p/soc/issues/detail?id=569'>Issue 569</a> - Clicking cancel returns to previous view (patch just received)<br>
+</li><li>Latest patches from Matthew Wilkes (came in yesterday)</li></ol></li></ul>
+
+
+<h2>28 April 2009 Google Summer of Coder Intro Meeting</h2>
+
+<h3>Meeting Logs</h3>
+
+Meetings starts here<br>
+<a href='http://www.thousandparsec.com/~irc/logm/%23melange.2009-04-28.log.html#t2009-04-28T14:12:55'>http://www.thousandparsec.com/~irc/logm/%23melange.2009-04-28.log.html#t2009-04-28T14:12:55</a>
+
+and ends here<br>
+<a href='http://www.thousandparsec.com/~irc/logm/%23melange.2009-04-28.log.html#t2009-04-28T15:11:00'>http://www.thousandparsec.com/~irc/logm/%23melange.2009-04-28.log.html#t2009-04-28T15:11:00</a>
+
+<h2>28 April 2009 Google Summer of Coder Intro Meeting Agenda</h2>
+
+18:00 UTC in #melange on Freenode<br>
+<br>
+<ul><li>Students will be asked to introduce themselves to the community and provide a brief overview of their projects.<br>
+</li><li>Mentors will briefly introduce themselves too and we will also let students know who is co-mentoring each project<br>
+</li><li>We will discuss expectations for community bonding period, coding period, etc.; things like status reports, help with testing, etc.<br>
+</li><li>We will discuss GSoC students participation in Melange Weekly Monday Conference calls<br>
+</li><li>We will ask GSoC students whether they can participate in Wednesday Testing Meeting on #melange<br>
+</li><li>Following this meeting, mentors should reach out to their student via the dev list to schedule a more in-depth first meeting. If anyone wants to drop to watch the IRC meeting, they are welcome to do so, hence scheduling on the dev list.</li></ul>
+
+
+<h2>27 April 2009 Team Meeting</h2>
+
+<h3>Call Notes</h3>
+
+<ul><li>Tabled for next meeting:<br>
+<ul><li>1000 entities fix (need Dan Bentley for this conversation)<br>
+</li><li>Where to get help on thinking about security</li></ul></li></ul>
+
+Action Item: LH to get Dan's Skype ID to Pawel before next meeting.<br>
+<br>
+<ul><li>We will be tagging issues with DueBy-MONTH-DAY-YEAR and we will never discuss this topic again since everyone is tired of it by now. Fortunately, we've now got it right.</li></ul>
+
+<ul><li>We will use a tag with format ReviewBy-MONTH-DAY-YEAR to tag issues in the tracker that have patches attached so casual contributors know when they can expect their patches to be reviewed.</li></ul>
+
+<ul><li>Discussion of more granular owners/leads for the tasks listed on the current roadmap will happen on the <a href='http://groups.google.com/group/melange-soc-dev'>developers list</a>. Assigning owners and getting these areas fleshed out needs to happen sooner rather than later.</li></ul>
+
+Action Item: LH will start this thread.<br>
+<br>
+<ul><li>We will be spending the next month focusing on testing. An announcement will be sent to the dev list so any users/casual contributors know what our priorities are for the next month.</li></ul>
+
+Action Item: Pawel will send announcement to the list. (done)<br>
+<br>
+<ul><li>We want community help with testing! Specifically we need:<br>
+<ul><li>People to help write tests. (Our Summer of Code students will be working on this as part of their onboarding/community bonding.)<br>
+</li><li>We would like someone who knows Python to add the Python coverage module to Melange. We will bribe with t-shirts or chocolates or a fine glass of iced tea.<br>
+</li><li>Community members who would like to help with writing tests should talk to one of the developers on #melange to discuss ideas or send email to the <a href='http://groups.google.com/group/melange-soc-dev'>dev list</a>.<br>
+</li></ul></li><li>We currently have 40 tests ready, but no other test coverage. We need to give people a pointer to these tests.<br>
+</li><li>We will track tests in progress in the issue tracker. Issues for tests should be labeled as "Tests" for ease of tracking.<br>
+</li><li>We will have a kick off meeting for the month of Melange testing on Wednesday, 29 April 2009 at 18:00 UTC in #melange.</li></ul>
+
+Action Item: Pawel will schedule testing meeting. (done - <a href='http://groups.google.com/group/melange-soc-dev/browse_thread/thread/ca435880649b7c0'>announced on dev list</a>)<br>
+<br>
+<ul><li>Summer of Coder meeting tomorrow in #melange at <a href='http://www.timeanddate.com/worldclock/meetingdetails.html?year=2009&month=4&day=28&hour=18&min=0&sec=0&p1=215&p2=16&p3=224'>18:00 UTC</a>.<br>
+<ul><li>Students will be asked to introduce themselves to the community and provide a brief overview of their projects.<br>
+</li><li>We will discuss expectations for community bonding period, coding period, etc.; things like status reports, help with testing, etc.<br>
+</li><li>Following this meeting, mentors should reach out to their student via the <a href='http://groups.google.com/group/melange-soc-dev'>dev list</a> to schedule a more in-depth first meeting. If anyone wants to drop to watch the IRC meeting, they are welcome to do so, hence scheduling on the dev list.</li></ul></li></ul>
+
+Action Item: Pawel will create agenda for tomorrow's first student meeting. (LH humbly suggests it live on the wiki.) Pawel will also send a welcome email to all students with some "news you can use" following tomorrow's meeting.<br>
+<br>
+Action Item: LH will call James Levy to make sure he knows he was accepted. (done - hi James!)<br>
+<br>
+<ul><li>We want to get <b>a lot</b> better about reviewing and committing patches. Right now we are not doing this well enough. New strategy:<br>
+<ol><li>We quickly sync within 24 hours about who is going to review a patch.<br>
+</li><li>All patches will be ack'ed within 48 hours, which means that we say at least "hey thanks we got your patch." Person ack'ing the patch is the person who will review it.<br>
+</li><li>Patch will be reviewed <b>and</b> feedback sent to submitter <b>and</b> relevant issue in the tracker updated within 5 days (read: 120 hours).<br>
+</li><li>If a patch does not meet our style guidelines, it will be returned to the contributor with a request to fix the style issues.<br>
+</li><li>If patch passes review, it will be committed. If something breaks, the person committing the patch is taking responsibility to babysit the build.<br>
+</li><li>If you take on reviewing a patch and you cannot get to reviewing it within 5 days of ack, it is your responsibility to let the contributor know about the delay <b>and</b> update the relevant issue in the tracker.<br>
+</li><li>If you take on responsibility for reviewing a patch and cannot get to it within 5 days of ack, it is your responsibility to ask for help in getting it reviewed. It is entirely plausible no one is going to have time to help, but you should certainly ask for it.<br>
+</li><li>Each mentor is responsible for reviewing his student's patches, following same process as above.</li></ol></li></ul>
+
+Action Item: All committers will follow process as detailed above.<br>
+<br>
+Action Item: Pawel will review alll outstanding issues noted in the agenda, below,  by end of day Friday, 1 May.<br>
+<br>
+Action Item: LH will go through the issue tracker to make sure that no other outstanding patches are hiding in plain sight. Any outstanding reviews will be assigned to Pawel for action by Friday.<br>
+<br>
+<ul><li>The <a href='http://code.google.com/p/soc/wiki/GHOP'>GHOP specs</a> wiki page needs to be reviewed. We all do not want to have yet another meeting to discuss it unless we really need to have yet another meeting.</li></ul>
+
+Action Item: LH will review the document after posting notes from today's conference call and provide any needed comments/edits, followed by a ping to the <a href='http://groups.google.com/group/melange-soc-dev'>dev list</a> that this review has been done.<br>
+<br>
+Action Item: All interested folks can take a look at the page and discuss further on the <a href='http://groups.google.com/group/melange-soc-dev'>dev list</a>. If we need to schedule yet another meeting, LH will schedule it.<br>
+<br>
+<h2>27 April 2009 Team Meeting Agenda</h2>
+<ul><li>1000 entities fix<br>
+<ol><li>related issue <a href='http://code.google.com/p/soc/issues/detail?id=357'>http://code.google.com/p/soc/issues/detail?id=357</a>
+</li></ol></li><li>Assigning granular owners to items in Roadmap<br>
+<ol><li>Other roadmap discussion items?<br>
+</li></ol></li><li>Month of Testing<br>
+<ol><li>Formal announcement<br>
+</li><li>Who is handling what test creation<br>
+</li><li>How can our Summer of Code students help here?<br>
+</li><li>Related Issue: <a href='http://code.google.com/p/soc/issues/detail?id=5'>http://code.google.com/p/soc/issues/detail?id=5</a>
+</li></ol></li><li>Summer of Coder Meeting Preview - Pawel?<br>
+</li><li>Patch Reviews<br>
+<ol><li>Seems like patches are waiting a long time for review. How can we fix this?<br>
+<ol><li>Related: <a href='http://groups.google.com/group/melange-soc-dev/browse_thread/thread/e89d8efaf903558d'>http://groups.google.com/group/melange-soc-dev/browse_thread/thread/e89d8efaf903558d</a> (7 days to ack)<br>
+</li><li><a href='http://code.google.com/p/soc/issues/detail?id=263'>http://code.google.com/p/soc/issues/detail?id=263</a> (submitted 28 Feb, still not committed?)<br>
+</li><li><a href='http://code.google.com/p/soc/issues/detail?id=172'>http://code.google.com/p/soc/issues/detail?id=172</a> (submitted 30 Jan, still not committed?)<br>
+</li><li><a href='http://groups.google.com/group/melange-soc-dev/browse_thread/thread/44523561cd61e96/2901360614f3b5de'>http://groups.google.com/group/melange-soc-dev/browse_thread/thread/44523561cd61e96/2901360614f3b5de</a> (submitted 18 Mar, still not committed?)<br>
+</li></ol></li></ol></li><li>GHOP Features/Needs Data Dump Meeting<br>
+<ol><li>Lots of items on wiki page, need higher level overview for team - when?<br>
+</li></ol></li><li>Wiki Discussion for Issues<br>
+<ol><li>WikiDiscuss Label<br>
+</li></ol></li><li>Security Help<br>
+<ol><li>James Crook mentioned on list getting help from a security related org in Summer of Code. Any preference who we approach?</li></ol></li></ul>
+
+
+<h2>20 April 2009 Team Meeting</h2>
+
+<h3>Call Notes</h3>
+<ul><li>Everyone agreed that the current roadmap document (currently only available privately) is what we should be working from to flesh out activities for the next 9 months. Interested parties who are not project owners/members are welcome and encouraged to add their thoughts as comments to the roadmap.</li></ul>
+
+Action Items:<br>
+<br>
+Pawel will flesh out roadmap somewhat and publish on Melange project wiki.<br>
+<br>
+All should review roadmap when published in preparation for 27 April team conference call.<br>
+<br>
+LH will add roadmap review to 27 April team call agenda.<br>
+<br>
+<ul><li>We will add a due date for issues to each issue in the issue tracker and we can discuss issues in more detail on the wiki. James Crook is a good resource for talking to folks about effectively fleshing out design from various user issues.</li></ul>
+
+Action Items:<br>
+<br>
+LH will begin assigning due dates, which are of course negotiable, during weekly bug triage. <a href='http://groups.google.com/group/melange-soc-dev/browse_thread/thread/22b6028b45cba979#'>Related mailing list thread</a>.<br>
+<br>
+<ul><li>We have on security issue that has been on file for a month. While users can do no harm even if they exploit the vulnerability, we agreed that we need to be more on top of security issues. Resolve within 2 days, even if that resolution is adding a note along hte lines of "We will fix this but cannot get to it right now. Delay ok'ed because users can do no harm" to the relevant security issue in the tracker.</li></ul>
+
+Action Items:<br>
+<br>
+The Melange team could use some help with security issues. LH will see if it is possible to get help from the security team at Google. (Unlikely, but I will ask.)<br>
+<br>
+<ul><li>Caching stuff is a known issue. We need to update the documentation to reflect that users can expect behavior such as is detaied in <a href='http://code.google.com/p/soc/issues/detail?id=473'>Issue 473</a></li></ul>
+
+Action Items:<br>
+<br>
+LH will update the documentation with this information and solicit technical review of the explanation, update relevant issues with pointer to the documentation.<br>
+<br>
+(Note: If anyone would like to volunteer to take this action item, please do.)<br>
+<br>
+<ul><li>Community bonding period (e.g. until 23 May) will be focused on onboarding Melange's Summer of Code students and creating tests for Melange. Patches will be reviewed, but no work on other features should be expected by the community during this time. Melange Summer of Code students will be asked to help with writing of these tests as part of the onboarding process.</li></ul>
+
+<ul><li>Rather than updating documentation on error messages, we agree that error messages should simply be more useful. This topic tabled until our all hands meeting in May.</li></ul>
+
+
+<h3>20 April 2009 Team Meeting Agenda</h3>
+<ol><li>Roadmap Discussion<br>
+<ul><li>Ensure everyone has agreed to current roadmap<br>
+</li><li>Discuss any additional priorities<br>
+</li><li>Discuss timing/owners for fleshed out roadmap publication (27 April current target)<br>
+</li></ul></li><li>Student proposals after the deadline<br>
+</li><li>Bug Triage<br>
+<ul><li>Do issues assigned to you need to be assigned elsewhere? If so, who?<br>
+</li><li>How to accurately assess when we expect bugs to be closed.<br>
+</li></ul></li><li>Security Bugs<br>
+<ul><li>Discuss and agree on timing for closure of <b>all</b> security related issues.<br>
+</li><li>Related issue: <a href='http://code.google.com/p/soc/issues/detail?id=448'>http://code.google.com/p/soc/issues/detail?id=448</a>
+</li></ul></li><li>Caching Issues<br>
+<ul><li>Several open issues related to page refresh times - document as Known Issue with GAE and call it a day or no?<br>
+</li><li>Sample issue: <a href='http://code.google.com/p/soc/issues/detail?id=473'>http://code.google.com/p/soc/issues/detail?id=473</a>
+</li></ul></li><li>Test Suite<br>
+<ul><li>Update from Sverre on access to machines running buildbot at OSU OSL<br>
+</li><li>Plan to create tests. Timing? Owners? (This may be covered in roadmap discussion.)<br>
+</li></ul></li><li>Documenting Error Messages<br>
+<ul><li>This should be done. Timing? Owner?<br>
+</li></ul></li><li>Any Other Business</li></ol>
+
+<h2>16 April 2009 - Roadmap Review Meeting</h2>
+<ul><li>The roadmap discussed in these notes will be published on 20 April and when it is published it will be linked to here.<br>
+</li><li><a href='http://groups.google.com/group/melange-soc-dev/browse_thread/thread/b62a064390f0de17'>Call Notes</a>
\ No newline at end of file
diff --git a/MeetingAgendasNotes.wiki b/MeetingAgendasNotes.wiki
deleted file mode 100644
index 1880e56..0000000
--- a/MeetingAgendasNotes.wiki
+++ /dev/null
@@ -1,2486 +0,0 @@
-#summary A collection place for team meeting agendas and resulting notes.
-#labels agendas,meetingnotes,Importance-Useful
-
-= Meeting Agendas and Call Notes =
-
-The Melange developer team holds a weekly meeting via Skype conference each Monday at 17:30 UTC. This page serves as a collection point for meeting agendas and the notes resulting from each call.
-
-= Latest Meeting Agenda & Call Notes =
-
-
-
-= Past Meeting Agendas & Call Notes = 
-
-<wiki:toc max_depth="2" />
-
-== 17 Oct 2011 Team Conference Call ==
-*Chaired by:* Sverre
-
-*Notes taken by:* Akeda
-
-  * Mario and Orcun were absent.
-  * Akeda is working on participant dashboard and will add missing links.
-  * Sverre won't able to attend to the All-Hands and has issue with his thesis.
-  * Lennard and Madhu have been working a lot on GCI as seen on commit logs.
-  * Leo will help Madhu and Lennie in case need to add more test.
-  * Daniel will work on invites/requests and ranking over the next week.
-  * Praveen is likely won't able to attend to All-Hands too, has some issue with his visa.
-
-== 26 Sept 2011 Team Conference Call ==
-*Chaired by:* Sverre
-
-*Notes taken by:* Praveen
-
-  * Mario, Madhu and Orcun were absent.
-  * Akeda will work on the initial admin dashboard for GCI.
-  * Sverre is still working on GCI Forms.
-  * Lennard is working on GCI data conversion.
-  * Leo still has some problem with the test utilities. He will work with Lennard to sort out the issue.
-  * Daniel is still working on the GCI Profiles that include new template too. He was waiting for the generic template that Madhu was working on.
-  * Praveen has his interview regarding visa scheduled for Thursday after being refused the first time.
-
-== 19 Sept 2011 Team Conference Call ==
-*Medium:* Skype
-
-*Chaired by:* Sverre
-
-*Notes taken by:* Orcun
-
-  * Madhusudan, Daniel were not present. Praveen had connection problems on his device and couldn't attend the meeting properly.
-  * Leo have finished base Django test case for GCI.
-  * Lennard fixed some conversion tasks.There are some open issues blocking his works. He wrote an email to Madhu for them.
-  * Akeda was busy with his school works and visa. He is going to go for the visa interview and will catch up after then.
-  * Orcun is waiting for review of his patches. He is reading commit logs to understand the GCI.
-  * Mario was busy with interview for job conversion after his internship with Google.
-  * Sverre worked on documents and program stuff. But forms are not ready so they're not useful yet. He and Daniel will work on forms together.
-
-== 12 Sept 2011 Team Conference Call ==
-
-* Chaired by:* Sverre
-
-* Notes taken by:* Akeda
-  * Praveen, Leo and Madhu were absent.
-  * GCI was nearly deadline. Sverre warned everyone to catch up his work.
-  * Lennie has been working on template based on the mockup delivered by ED. He will be working on the dashboard and student form.
-  * Sverre will be working on document page, request/invite page and embedding calendar on timeline page.
-  * Mario and Daniel will be started to put their hands on GCI, propbably, next week. 
-  * Akeda was preparing his visa and waiting the response for interview schedule. He was assigned in the Phase V of GCI (admin dashboard).
-  * Orcun will be working on the rest of the patches. He also busy with his visa and need to go to Istanbul for visa interview.
-
-== 5 Sept 2011 Team Conference Call ==
-
-* Chaired by:* Lennard de Rijk
-
-* Notes taken by:* Praveen
-  * Leo has completed the GCI Test setup and he can provide more helper functions in profile utils as the need arises.
-  * Lennie was a bit involved in the paper work for US, so he has scheduled his time to work more on the task view the next day.
-  * Madhu has finished the back end for the task edit page. He needs the front end to be delivered by EchoDitto to complete the view. He will continue to work on the task edit page during the week.
-  * Sverre was unable to work on GCI as he needed the stuff yet to be delivered by EchoDitto. Lennard suggested him that he could work on the program edit page, mentor/admin invites/requests for GCI. Sverre agreed to work on it.
-  * Daniel will work on student/mentor/orgadmin profile edit page.
-  * Orcun did not attend the meeting.
-  * Praveen and Akeda are currently working on to complete their rest of the patches.
-  * Sriharsha Chillara, a new contributor introduced himself to the Melange community. The developers suggested him to read about GAE and Django.
-
-== 29 Aug 2011 Team Conference Call == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Leo is working on profile utils for GCI. He will be able to finish most of it, if not all, before next Monday.
-  * Madhu will continue working on the create task page for now.
-  * Lennie should be able to do more with the task list soon.
-  * A surprise gift was given to GSoC students.
-
-== 15 Aug 2011 Team Conference Call == 
-
-* Chaired by:* Leo (Chong Liu) <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Orcun finished Spreadsheet Export, will send all patches today, and start to work on Carol's issue. He plans to finish them before the end of gsoc. After gsoc, he will continue to work on other issues assigned to him after one week's break.
-  * Praveen worked on testing gsoc.views.org_profile, profile_show, accepted_orgs, proposal_review and duplicates. He met some difficulties and will be discussing with Leo about them. Leo suggested him to correct all the pending tests and then submit them for review. After gsoc, he plans to implement functional tests and then work on buildbot.
-  * Akeda revised his patch for account management (already sent to the milist) and program assigned for host (sent to Daniel). He is still working on generic iconic dashboard. Before GSoC ends, he will be delivering generic dashboard, so it can be used for GCI too. He will try to stay after GSoC if there's thing to deliver. Leo told him that there will always be something for him and other gsoc students.
-
-
-== 8 Aug 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Akeda completed account management with the test, adding user as a host and generic dashboard. The changes, however, broke test_admin.py and test_dashboard.py. He will fix the tests before sending it for review.
-  * Praveen tested gsoc.views.duplicates, worked on the access check functions, and added a few more tests to gsoc.views.org_profile and profile_show. He hopes to finish the tests for all the views by the end term.
-  * Orcun worked on the feature of exporting an empty spreadsheet with "export list" button. After finishing the spreadsheet functionality, he will work on Issue 1239 and, if time allows, the document list picker for the student proposal page.
-
-
-== 1 Aug 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Akeda is working on doc list, tests for UserEdit page, the function of uploading logos for organization, and clickable timeline wheel on the landing page. He moved the dashboard core to the soc.views.helpers and needs to rewrite the test, adds new tests for regular dashboard. He expects to complete the regular dashboard with iconic only by 6 Aug.
-  * Praveen is working on testing org_profile, student_forms and profile_show views. He expects to finish them by tomorrow.
-  * Orcun is one week behind schedule because of the difficulties posed by the cross-domain policy, which he eventually solved. Sverre suggests him to ask for help instead of spending too much time trying to solve it himself. Orcun will work on exporting lists this week. 
-
-
-== 25 Jul 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Akeda missed this week's blog post and he will write it after the meeting. His patches are ready to be reviewed. For iconic dashboard, try his live instance at http://melange-iconic-dashboard.appspot.com/. For toggleable list, try http://melange-new-dashboard.appspot.com/. For uploadable org's logo, try http://melange-upload-logo.appspot.com/. He will register the test account to the last instance as well.
-  *  Orcun is implementing SpreadSheet API methods over https protocol. He did not know how to make a token available to JS. Sverre suggested him to send the server side token to the user and then use it client side.
-  * Praveen has not written this week's blog post and was late for the meeting. Leo will talk to him.
-
-
-== 18 Jul 2011 Team Conference Call == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Lennie reminded Orcun of this week's blog post and asked him to be on time next week.
-
-
-== 11 Jul 2011 Team Conference Call == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Praveen has almost completed logic tests and studied view tests with Madhu's help. He will try to complete the view tests by the final evaluations. Leo thinks he has made a good progress so far and there may be not many work for view tests since many views have already had tests. Leo will further discuss the project scope with Praveen after the meeting.
-  * Orcun is on track according to Mario. Mario will review his JS code and Madhu will review his python code. Regarding one-way vs. two-way syncing, Lennie suggests keeping it one-way for simplicity for now.
-  * Akeda pushed the code for admin dashboard, but forgot to post the JS part for rivew. He will do so after the meeting.
-  * Selwyn improved the public task view to have forms to publish comments and to take actions based on the task status, retrieved the work submissions on the page, wrote view for creating and editing a task, and wrote the timeline helper for GCI. He will write tests and run the view locally. Madhu will help him with creating a new datastore. Madhu feels that his progress in this week was ok but he still has much to catch up.
-
-
-== 4 Jul 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Praveen has sent several patches and made a big progress last week. Leo thinks that he can do a great project if he can continue the hard work.
-  * Akeda has also sent several patches and is waiting for review. Daniel will review them later.
-  * Selwyn corrected his patches with respect to reviews. He is currently working on task views. Madhu thinks that he is still behind the schedule. Madhu and Sverre will have a meeting with Selwyn after the conference call to discuss his progress and how to help him catch up.
-  * Orcun could not attend the meeting due to his connection issues.
-
-
-== 27 Jun 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Akeda has made the dashboard view and template ready to review. He is working on a view to trigger accept_proposal's task and will send the currently available code for review.
-  * Orcun was planing two different proposal pages as he wrote in mailing list. He decided to start coding instead of thinking too much on it. For now, the user can only either choose tinyMCE or GDocs. The feature of allowing them to switch may be added in the future if needed.
-  * Praveen tested soc.logic.tags and corrected his previous tests. He has spent much time on studying the code itself. He will discuss his project plan with Leo and update it by this Sunday with goals that are achievable by midterm.
-  * Selwyn have written the RequestData for GCI, got it reviewed and committed it. He also wrote RedirectHelper, Access Checker and sent them in for review. He has also written the site menus for GCI. He will be working on the task view and will complete it and get it running by tomorrow late or day after. After that he is planing to work on task_subscription view and views for org_application, org_profile and org_homepage. Sverre suggested him to communicate plenty with madhusudancs and Lennie about the views.
-
-
-== 20 Jun 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Sverre repeated that GSoC students should write a blog post by every Sunday and tell any of their commitment before hand.
-  * Progress of GSoC projects:
-    * Akeda is working on admin dashboard. He demonstrated his work of colorbox on his online instance. It looks nice.
-    * Praveen added tests for only two modules because he had spent some time on ICPC. He will focus on his project this week.
-    * Selwyn has committed the GCIProfile and GCIStudentINfo models and is writing a script to convert GCIStudent data to GCIStudentInfo. Lennie thought Selwynis 4 weeks behind schedule. Lennie, Madhu and Sverre suggested Selwyn to communicate more and try to catch up.
-    * Orcun finished oauth but he will make some modifications later. Madhu will review his code. 
-
-
-== 13 Jun 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Sverre stressed that GSoC students should write a blog post at least a day before the conference call every week.
-  * Developers will have a meeting with EchoDitto regarding new UI delivery sometime this week.
-  * Progress of GSoC projects:
-    * Praveen wrote tests on soc.logic.accounts and dicts and sent them to the list for review. Leo will review them these two days. Praveen is behind the schedule and will work hard to catch up.
-    * Akeda is working on admin dashboard and will post initial code for admin dashboard next week. Carol wants to be able to choose different options while staying on the same page. Sverre suggested Akeda to use AJAX request to do the trick. Akeda will focus on admin dashboard and hopes to finish it before mid term, but this will depend on the requirement.
-    * Selwyn will write a blog post; Lennie and Madhu will each review one patch of Selwyn. Madhu thinks that Selwyn may not be able to meet the deadline and he will jump in if necessary.
-    * Orcun is working on gdata and OAuth Roundtrip. Madhu will review Orcun's Python code and Mario will ask Orcun about his blog post.
-
-
-== 6 Jun 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu) with help from Praveen and Akeda <br/>
-  * Madhu is working on survey. He has emailed his progress to the list and will talk to Mario about the implementation of javascript for survey. The EST to finish it is 1 Jul. 
-  * Progress of GSoC projects:
-    * Praveen is working on the online test runner. Sverre suggested him not to waste too much time on it and to start to write tests ASAP. Leo agreed with Sverre. 
-    * Orcun was busy with his exams so he missed writing blog posts. He suggested integrating OAuth roundtrip, which Sverre thinks of a good idea. He had encountered some problems early on, e.g. gae unicode problem, but he has sorted them out.  
-    * Akeda is working on admin and regular dashboard's improvement. Sverre suggested using ajax to fetch different pages of dashboard. He will implement list and ask Mario questions about the list code.
-  * Suggestions: 
-    * Sverre suggested ccing mails/questions to the list unless it is private so that others can know what's going on as well. 
-    * Selwyn was not present. Sverre asked his mentors (Madhu and Lennie) to tell him to be more punctual. 
-
-== 30 May 2011 Team Conference Call == 
-
-* Chaired by:* None (call cancelled) <br/>
-* Notes taken by:* All <br/>
-* Edited by:*  Leo (Chong Liu)<br/>
-  * Lennie fixed Issue 1244, continued working on the admin functionality with regards to survey results, and expect this to be finished before next call. He has also reviewed patches from Selwynn, but had no response yet.
-  * Sverre started on converting previous year data and ran into old StudentInfo entities that need to be converted to GSoCStudentInfo entities (and have their references updated). 
-  * Madhu reviewed the patch written by Selwyn and wrote a detailed reply to ED about the pages that need UI for GCI. He has also resumed the work on surveys form data recording, but has not proceeded much because of the travelling. He has informed others that he has only limited time during the week during All-hands. 
-  * Leo had a meeting with Praveen today. Praveen has made some progress, done some useful research on online/web-based test runners but hasn't finished all planned work due to family matters. Because of the time restriction of GSoC, Leo suggested him to either focus on and complete the test runner within this week or move on to testing and treat the test runner task as a side project. As we have seen, Praveen chose the former :-). 
-  * Progress of GSoC projects: 
-    * Praveen did some research on web-test runners. He studied the code of gaeunit and figured out the magic of how they actually do it. He will spend this week on implementing our own online test runner and after that start adding the unit tests. There are some issues in implementing it because of the restrictions imposed by GAE. 
-    * Orcun is working for exams. He will be working on his project between 3-6 June and then study for exams again till June 10. He is aware that he needs to write a blog post. 
-    * Selwyn got his patches reviewed, made the suggested changes again and then sent them to the list for review again.The common fields to GSoCProfile and GCIProfile are moved to role.Profile and grade field in GCIStudentInfo to role.StudentInfo. He also modified role_conversion to convert GCI roles and update references for GCITask. 
-    * Akeda discussed the design and requirement for enhanced administration and regular dashboard. He has provided the revised mockup for Updated admin dashboard page, withdrawing or approving students via admin dashboard, proposed solutions for crowded list on regular dashboard, and participants locations on admin dashboard with clusterer map. 
-
-
-== 26 May 2011 Team Conference Call == 
-
-* Chaired by:* Lennard de Rijk <br/>
-* Notes taken by:* all <br/>
-* Edited by:*  Leo (Chong Liu)<br/>
-  * Sverre will be back on the 5th of June and will likely help out Madhusudan who is currently focusing on Surveys. There is no ETA yet for surveys but Madhu will update us once he gets started again. 
-  * Progress of GSoC projects:
-    * Akeda is working on redesigning dashboard. Lennie reminded him that there are two dashboards that Carol is faced with. One allows administrative functionality like sending out reminder emails while the other represents not only Carol's role as a Organization Admin for GOSPO but also gives more information than the regular dashboards for other users.The focus should be on improving the usability and functionalities that are exposed to Carol in her daily job as Program Administrator. After the meeting, he emailed Carol to discuss the design of Carol's dashboards.
-    * Praveen is about one week behind his schedule due to his exams etc. He had a meeting with Leo this Wednesday. He will work on an online test runner suggested by Leo for his view task and will also work on testing one logic module, soc.logic.allocations this week. Lennie noted that the logic.models modules will be removed so no need to test them. Focus should be on the newly written code. 
-    * Orcun could not attend the meeting because he got confused with the meeting time and assumed 19.30 CEST to be 19.30 UTC. He has added required libraries for GData APIs to Melange and fields for storing OAuth related fields. His project has not progressed as he had planned, so he will modify his schedule on his project wiki page accordingly. Furthermore, he will not be able to work much because he have exams before 10 June.
-    * Selwyn has written GCIProfile and GCIStudentInfo models and the role conversion script which also updates references in the specified models. By this weekend, he will be moving list generator from GSoC module to the core, fixing necessary imports, and writing the GCI specific RequestData object. 
-
-== 16 May 2011 Team Conference Call == 
-
-* Chaired by:* Daniel Hans <br/>
-* Notes taken by:* Lennard de Rijk <br/>
-  * Selwyn will write blogpost and wiki page after call, due to personal issues. Akeda and Orcun made a wiki page. 
-  * Daniel and Akeda will meet with Carol on Wednesday using Skype to brainstorm about their project.
-  * Orcun is working on his view and struggling with the data seeder.
-  * Leo had a meeting with Praveen this morning, Leo has asked him to put up the blogpost and wiki page this morning. They worked out a timeline.
-  * Student's TODO List:
-    * Create the blogpost summarizing last week today.
-    * Have a call with your mentor this week, most of us are in PDT time zone.
-    * Put a link to your GAE instance on the wiki page (and blog if possible)
-    * Don't forget to make your next blogpost before the next meeting.
-    * Get ready to start coding!
-
-== 9 May 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Praveen is busy with his exams and will be free after this Friday.
-  * Selwyn was working on asynchronous file upload for the tax forms, but he met some problems with jQuery. He will try to fix them and will ask for help if he cannot himself.
-  * Orcun had some style problems with his testing code. Lennie and Sverre gave him some advice.
-  * Lennie worked on tests and will work on survey.
-  * Madhu fixed one issue and will work on ecodito delivery and set up a meeting with Selwyn.
-  * Mario is busy with his job and studying for his last exam.
-  * Leo is busy with his thesis.
-  * Some advice and to-do list for GSoC Students:
-    * Set up and run an online GAE instance before Thursday with your "View" from the first week. 
-    * Write a blog post about it (and other work you've done) before next Monday so it can be reviewed before our conference call.
-    * Create a wiki page on Melange wiki for recording the progress of your project [0].
-    * Plan a meeting with your mentor and add notes to your OWN project wiki page.
-    * Send your code to our mailing list for review before committing them.
-    * Follow our python programming style [1]
-  * [0] http://code.google.com/p/soc/wiki
-  * [1] http://code.google.com/p/soc/wiki/PythonStyleGuide 
-
-== 2 May 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * To-do list for GSoC students:
-    * Set up an online instance and get it running.
-    * Create a new view, hook it up, make it do something interesting, and show it off online during the conference call next week.
-
-== 27 Apr 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * This year's GSoC Students first introduced themselves.
-  * Orcun is from Turkey and had a party to celebrate GSoC yesterday.
-  * Praveen's mic didn't work, so he has not introduced himself.
-  * Selwyn is from India and very excited about being accepted as a GSoC student.
-  * Akeda is from Jakarta Indonesia.
-  * All Melange developers and Carol then introduced themselves as well.
-  * Some advice for GSoC Students:
-    * Try to work in day one and Sverre will add their google accounts to the committer list in order to ensure their code committed.
-    * Write a blog post on http://melange-dev.blogspot.com/ every week at least hours before the conference call which normally takes place at 18:30 GMT/BST every Monday. They can introduce themselves and their projects in their this week's blog.
-    * Contact their mentors regarding their projects.
-    * Ask for help when they get stuck. 
-
-== 20 Apr 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * All submitted GSoC proposals were discussed and scored. Mentors were assigned to accept proposals. 
-
-== 13 Apr 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Submitted GSoC proposals were discussed.
-  * Sverre asked about sorting columns by using jquery grid and adding version number in cookie.
-  * Mario will implement filter change.
-  * Madhu has finished the proposal page and will add one function for admin to send requests to Carol.
-  * Daniel will do proposal conversion and work on showing the reviewer and their scores on the proposal page.
-  * Lennie will work on the duplicate task. 
-  * Sverre will work on custom columns and other features Carol needs. 
-
-== 28 Mar 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Lennie will work on tasks of finding duplicate proposals.
-  * Daniel will work on the conversion of proposals to projects.
-  * Mario will check text editing.
-  * Madhu will work on read-only version of profiles.
-  * Sverre will add score to dashboard and remove ranking in favour of accepting or refusing.
-  * Leo will add search page to the main menu. 
-
-== 21 Mar 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Sverre solved a bug with setup tools and bootstrap. He also tried to lobby :-) us to test views by showing us how easy it is to do view tests now. He will add student proposals to dashboard by Wed.
-  * Daniel is working on student proposal page and suggested that it should list student's email. He will work on request page, list org page, Student/Mentor/Org admin detail page, and link page as well as convert proposals to projects.
-  * Madhu will work on org home page, current project, project detail and midterm survey.
-  * Lennie will update task to calculate duplicates.
-  * Leo will add the search page. 
-
-== 14 Mar 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * EchoDitto introduced their designs of logos for Melange and asked our feedback. We will give them more feedback later this week.
-  * Lennie was working on list and defined data for buttons together with Mario. He will complete the dashboard this week.
-  * Daniel asked suggestions about url design for comments of proposals.
-  * Madhu will work on org app.
-  * Mario updated javascript, version and css and restructured javascript and jquery. He will work on list and css and will also fix column issues with firefox.
-  * Leo added the usage of the seed functions to the testing wiki page. He will check broken tests, disable old views tests, and fix broken logic tests.  
-
-== 7 Mar 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Ideas about the logo were discussed. Conclusion: it should be blue and close to Google logo.
-  * Lennie is working on list and dashboard code.
-  * Lennie and Mario will discuss adding the next starting position of fetch to ListsProtocol together.
-  * Madhu is working on application forms and organization surveys.
-  * Daniel is working on student proposals and review pages and will test the data conversion script.
-  * Sverre will copy data for Daniel to conduct the test.
-  * Leo finished up the seed function and sent a patch to the list for review and will add the usage of the seed functions to the testing wiki page. 
-
-== 28 Feb 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Madhu is working on home page and will work on survey and site setting.
-  * Daniel is working on forms and the conversion of data, and will work on the application forms.
-  * Mario is updating the css and javascripts.
-  * Sverre has written and shared the blog post and will ask EchoDitto about css for admin.
-  * Leo was working on the seed function and will finish it up and send a patch to the list. 
-
-== 22 Feb 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * The design of lists is discussed.
-  * Lennie is working on dashboard.
-  * Sverre and Daniel are working on forms.
-  * Madhu suggested to use Django RequestContext that enables the reuse of python object and he will send a patch for review.
-  * Leo is working on  the seed function. 
-
-== 7 Feb 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Lennard is not present at the meeting, away to theater.
-  * Lennard will look at Leo's comments on the Issue 534 patch within the next 3 days.
-  * EchoDitto's Round 2 CSS Delivery is discussed.
-  * The issue tracker is checked.
-
-
-== 24 Jan 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * The CSS delivered by EchoDitto is reviewed and Sverre will send our feedback to EchoDitto.
-  * Some issues with high priority are reassigned.
-  * Leo found, with transactional updates of proposal scoring and review, the review didn't show up immediately after the request returns due to the fact htat the review is updated with taskqueue when he tried locally; Sverre and Lennie suggest using a message to inform the user of the situation. Later, Leo tried on his online instant and he found that the situation happens 2 out of his all trials (10+) whereas it's ALMOST 100% locally. 
-
-== 17 Jan 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Madhu worked on fixing critical issues related to GCI.
-  * Mario is discussing with his mentor to have Melange as 20% of his project and is working on some issues.
-  * Leo has been working on making tasks transactional, which turns out to be a major pain due to entity groups. He I'll focus on Issue 534 instead for now and start to work on making tasks transactional after entity groups are integrated to our entities.
-  * Lennard fixed the user_id issue, so now people will no longer have to email us to get their email address changed if they add a new one to their google accounti. He is going to work on the next issue assigned to him.
-  * Daniel is working on integrating Pavel's work.
-  * Mario suggests a big red danger sign and a big red "Don't do this" (which has already been implemented) or a 1x1 pixels button for confirmation after users' clicking "resign as a [whatever]" in order to make it harder for users to resign by mistake.
-  * Madhu suggests updating the issue tracker with new milestones and shifting focus to GSoC.
-  * Sverre will discuss with Carol about reproiritizing for GSoC 2011.
-  * Sverre confirms that we will use new the UI delivered by EchoDitto for GSoC 2011 and will update our SDK to Appengine SDK 1.4.1. 
-
-== 10 Jan 2011 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier and Lennard de Rijk <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * CSS & HTML requirements for Melange are discussed.
-  * Current issues with Milestone 2 or 3 are reviewed. 
-  * To set GCI registration deadline to this Fri so that unregistered students can complete their registration.
-  * To sovle the issue of being able to claim tasks after deadline and mark all those tasks claimed after deadline invalid.
-
-
-== 6 Dec 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Current issues with Milestone 2 or 3 are reviewed.
-  * The second revision of the SOC homepage designed by EchoDitto will be delivered soon.
-
-== 29 Nov 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * The first revision of the SOC homepage designed by EchoDitto was viewed and disccused. The first impression is positive. 
-  * Issues with Milestone 2 and 3 were discussed to make sure that they are completed in time.
-  * Mario solved the firefox crash problem discussed last week. Well done! 
-
-== 22 Nov 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Sverre fixed a problem due to the large number of tags entities have.
-  * When users list or search GCI tasks, their firefox usually crashes because there are too many tasks currently (almost 700) and it would take a while to load all. Some possible solutions were discussed.
-  * We should allow mentors to modify their tasks unless a student is working on it.
-  * New issues were assigned.
-  * Leo will talk with Felix about integrating data seeder with testing.
-
-
-== 15 Nov 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * All issues have been triaged.
-  * Sverre will fix issue 69, 219 and 967 before Friday. 
-  * Lennard will work on issue 999 and 1000 this week. 
-  * Madhu will fix issue 1003 by Wednesday/Thursday. 
-  * Daniel will work on issue 986 and 988. 
-  * Mario will work on CSV export, Google API key (with Sverre) and button reset (with Daniel), from Wednesday on. 
-  * Leo will look at the use of the seed function to seed data for testing. 
-
-== 18 Oct 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Lennard is back. Welcome back!
-  * Issues in the issue tracker has been reduced to 82 issues from around 200 issues.
-  * The official site of GSoC and GCI will move to http://www.google-melange.com/ from http://socghop.appspot.com/.
-  * GCI has been announced and we are considering to participate, which will be further discussed in next week's meeting.
-
-== 11 Oct 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Sverre talked about the current situation of our issue tracker and asked other developers about their future plans and availabilities. 
-  * Daniel will work on the statistics module of GCI. He was very busy recently because he attended two weddings and he was also the best man for one of them. 
-  * Mario will also work on integrating statistics into GCI. 
-  * Felix will make his GSoC code ready for merging to the trunk. 
-  * Leo will continue to work on adding more tests for soc.logic.cleaning module. 
-
-== 4 Oct 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Sverre talked to Carol about how to create a GCI program which is only visible to developers and current issues in the issue tracker.
-  *  Sverre will merge Leo's testing code added recently. 
-
-== 27 Sep 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Sverre has set Milestones on all issues with high priority. Milestone0 issues need to be resolved before the start of GCI (15 Oct 2010), Milestone1 issues resolved before the start of accepting student students (29 Oct 2010), Milestone2 issues resolved before writing up things, Milestone3 issues resolved before next GSoC, Milestone4 issues would be nice to be resolved before next GSoC.
-  * Sverre and Mario have Milestone0 issues which need to be resolved before the start of GCI (15 Oct 2010).
-  * Madhu improved the FAQ of GCI.
-  * Leo tested more functions in soc.logic.cleaning module. 
-
-== 20 Sep 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Sverre finished triaging the bug queue and allocated them to developers.
-  * He talked with Daniel, Madhu and Mario about their allocated issues during the meeting.
-  * Carol asked about the response to the GCI testing invitation. At present, there are not a lot of responses. 
-  * She will find the moderator of the old GHOP and hope to get more testing responses from the old GHOP communities.
-  * Leo has fixed all style problems with the existing tests code.
-  * He is working on the tests for soc.logic.cleaning. 
-
-
-== 13 Sep 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  * Mario committed a fix to enable Update Quota button in Assign Task for GCI correctly. 
-  * He can't work much until September 20 because exam is approaching.
-  * Lennard, Daniel, and Sverre have had a bug queue triaging meeting, all issues up to 640 are triaged.
-  * Sverre will finish triaging the bug queue before Friday since we have our initial meeting with EchoDitto (the UI redesign people) then.
-  * Lennard worked on bulk CSV import for GCI, patch in progress. Early version is up on list and to be completed this week.
-  * He is having fun in Sydney :). 
-  * Leo has tried GCI, written testing report, added issues found to the project issue tracker and sent in one patch.
-  * He has added information about GCI task to GCIUserManual.
-  * He is fixing all style problems with existing tests code and will push them soon.
-  * He will also clean up, commit and push the rest of the tests for soc.logic.cleaning. 
-  * *Important notes:*
-    * Google pays Sverre, Lennard, Daniel to work on Melange. Sverre works 20h/week; Lennard and Daniel both 10h/week.
-    * Focus will be on "Improving the Carol experience", getting GCI ready for prime time, and making Melange faster.
-
-
-== 30 Aug 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier<br/>
-* Notes taken by:* Daniel Hans<br/>
-  # GCI: feature complete!
-  # GCI: Update on the work done in the last week
-  # GCI: Current rough edges
-  # GCI: Testing time
-  # Outcomes of Carol, Sverre and Daniel's meeting
-
-=== Meeting notes 30 Aug 2010 ===
-
- * Mario has some technical problems and could not participate in the actual call, but he was around on chat
- * From our GSoC students we had Savitha on board. She will try to help with working on a user guide for GCI
- * Felix joined us at the end of the call, but he was not sure if he would have time.
- * Carol, Sverre and Daniel's metting had no outcome, as it had been put off
- * All GCI features are finally completed and in the repository
- * All modules were properly(?) renamed
- * GCI Ranking feature will be completed by the end of the week
- * There are still some minor problems with JavaScript
- * Madhusudan explained to us how to assign a task quota for organizations
- * New release should be deployed to Melange-dev
- * It would be better to do a backup before pushing a new release to socghop
- * The new release will be pushed on Friday
- * An email about the tests will be send over the weekend to the mentors lists and to the old GHOP mailing list
- * Testing period is to be scheduled for the next weekend
- * Swag will be offered to the most active testers for reports and especially for sending patches
-
-
-== 23 Aug 2010 Team Conference Call == 
-
-* Chaired by:* Madhusudan C.S<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-  # Post GSoC: Any progress from GSoC students about their projects last week? What do GSoC students want to work on? Do they want to continue working on their projects or pick something else that interests them? What's the plan for this week? 
-  # GHOP Plan: features from Madhu; work with Mario; work with Daniel 
-
-=== Meeting notes 23 Aug 2010 ===
-  * Attendance:
-    * Madhu, Mario, Daniel and Leo
-  * Update from Daniel:
-    * Daniel will work on statistics module for GHOP and aim to complete it by Aug 31st.
-  * Update from Leo:
-    * Leo organized all meeting notes of last three weeks and then put them to the wiki meeting notes page.
-    * He added more contents to the GettingStartedOnTesting wiki page, including information about Task queue service and gaetestbed MailTestCase and TaskQueueTestCase as well as more detailed guidelines on how to write tests for Melange and usage of each testing framework for logic, views, mails and task queues tests.
-    * He created a patch for removing cron/job related modules from Melange and then sent it to the list for review.
-    * He continued to work on testing soc.logic.cleaning and will finish it within this week.
-    * He has also discussed with the author of gaetestbed about possible improvement of gaetestbed and will add his suggestions to the issues list of gaetestbed on github. 
-    * He has also discussed with Felix about integration of data seeder and testing and is waiting for Felix' reply to Leo's proposal. 
-  * Update from Madhu:
-    * Madhu fixed several issues in GHOP module last week.
-    * He introduced some features like "List My Tasks" for mentors and others.
-    * Most of the fixes and features have already been pushed. More will come in this week since they need some clean up.
-    * He proposed a new design for using "history" property in GHOP Tasks, has discussed with Lennard about it, and has sent a mail to Sverre and is waiting for it.
-    * He works very hard to make Melange GHOP-feature complete by August 31st.
-    * He will start working on the User Manual from this weekend since his part of GHOP is almost complete.
-    * He is working with Mario for inline list-editing.
-    * He will help Daniel if necessary for statistics module.
-  * Update from Mario:
-    * The clone for list editing is now in place.
-    * Mario had some issues on getting buildout working. Sverre helped on finding the issue which was an incompatibility between buildout and folders whose names contain spaces. Another issue is lack of builtin Python 2.5 support in Lucid.
-    * Today he committed some basic support for inline editing in the grid (just textboxes).
-    * He will work on sending data back to server (all data or just dirty fields? Need to be decided) and including plugins (such as slider and datepicker) during the week. 
-
-  * *Important announcement:*
-    * The name of GHOP has been changed to Google Code In. 
-
-  * *Action items:*
-    * All the models and strings in the GHOP module must be renamed because of the change of GHOP name.
-    * Daniel will meet Sverre and Carol tomorrow to discuss about triaging the renaming issues in the issue tracker and then re-prioritizing them.
-    * Madhu would prefer to have a GHOP test week scheduled early in September since he was supposed to give an exam on October 3rd which has been rescheduled to October 13th because of his Melange commitments so availability during last weeks of September upto Mentor summit will be very poor. He asks Daniel to bring this issue of scheduling the GHOP test week when he meets Sverre and Carol tomorrow.
-    * A project owner (Lennie or Sverre) needs to setup a project's clone instead of a user's clone for Madhusudan to commit list editing to the clone.
-
-  * *Important notes:*
-    * Madhusudan and Mario proposed that we should start conference call on time whatever the situation is (unless it's known that someone is coming in a few minutes) to avoid today's situation (the meeting ran late) happening again.
-    * Next week's meeting will start at 17:30 UTC.
-    * Leo won't be able to attend next week's meeting because next Monday is a British bank holiday. But he will put his update to the wave for next week's meeting notes which he will created in advance as well as organize all meeting notes and then put them to our wiki meeting notes page after the meeting.
-
-
-== 16 Aug 2010 Team Conference Call == 
-
-* Chaired by:* Daniel Hans<br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-
-=== Meeting notes 16 Aug 2010 ===
-  * Attendance:
-    * All present.
-  * Update on GSoC projects:
-    * Data Seeder: 
-      * Latest version is up on http://sttwister-melange.appspot.com/seeder/home
-      * He has configured a configuration sheet that does some seeding of more data, as an example it seeds sponsors, programs, organizations, mentors, students and student proposals.
-      * While the data seeder works pretty well in the current form, there are still some unpolished areas like error reporting and handling, navigation and usability on the web interface, etc.
-      * The web interface might be a bit cryptic and hard to use at this point. It's not obvious at all how to set up references and how to configure them. This part should definitely be properly documented and also some step-by-step guidelines in the web interface itself can't hurt, if not too space-consuming.
-      * He is thinking a good way to learn to use it would be a screencast, but that would best wait until everything is polished enough.
-      * He will also make it easy for tests to make use of the data seeder. He is currently discussing this with Leo so they can decide on the best approach. 
-    * Document Editor:
-    * Social Features:
-    * Testing:
-      * Leo has cleaned up, committed and pushed all the tasks testing code to his online clone.
-      * After overcoming many difficulties, he managed to move the the gaetestbed and pymox modules to buildout dependencies and made his testing code ready to merge to the trunk.  
-      * He also worked on adding test cases for soc.logic.cleaning with suggestion of Sverre. 
-      * He has also uncovered a couple of bugs in the soc.modules.ghop.tasks.task_update module and sent a patch to the mailing list. Lennard was very kind to help him merge the patch. 
-      * He has also uncovered one issue with his test code for soc.modules.gsoc.tasks.accept_proposals (set the timelimit parameter too small) and then corrected it. 
-      * He has also investigated the difference between the console and html coverage report. It seems that the console one counts statements while the html one counts lines.
-      * In the next week, he will add the experience of how to do mail and taskqueue related tests with gaetestbed to the testing wiki page.
-      * He will also make a patch for removing the cron/job related modules and then send it to the list.
-      * He will also continue to work on the testing project after GSoC, i.e. add more test cases for more modules, improve the testing design and code, integrate Felix' data seeder, and so on.  
-  * *Action items:*
-    * Students should write on their project wiki pages about what they have done, what they have not done and their plan to bridge the gap after GSoC compared with their original plans. 
-  * *Important notes:*
-    * Sverre won't be able to attend next week's meeting.
-    * Daniel will host next week's meeting.
-    * All students are welcome to attend it. 
-
-== 09 Aug 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-
-  # Update on GSoC Projects
-  # Integration of GSoC projects
-  # Round the table
-  # Post-GSOC
-
-=== Meeting notes 09 Aug 2010 ===
-  * Attendance:
-    * Felix could not attend.
-  * Update on GSoC projects:
-    * Data Seeder: 
-    * Document Editor:
-    * Social Features:
-      * Savitha did the maps view for events and users. It works only for single-word terms at present but will be improved to have multi-word terms and search the data based on those keywords.
-      * Next week, she will be working on writing tests and also testing the workflow of the Calendars feature to ensure that there are no bugs.
-      * She will resolve the Application Read timeout error being caused by appengines short timeout.
-      * She will clean up code and discuss with Madhu options to review code and merge.  
-    * Testing:
-      * Leo uncovered a couple of bugs of existing Melange modules with the help of related test cases and has sent pathes to the list.
-      * He also resolved the error "raise self.__TranslateError(e.application_error, e.error_detail) UnknownQueueError" by adding the path of taskqueue yaml setting file to the instantiation arguments list (root_path) of taskqueue_stub.TaskQueueServiceStub.
-      * He added gaetestbed modules to tests and then extended its MailTestCase and TaskQueueTestCase and further put them into tests.util module for testing the mailing and taskqueueing functions.
-      * He has also done some new tests and managed to increase the testing coverage of Melange to 59%.
-      * He found that the coverage report of the html version is different from the console one. He will investigate the difference with suggestion of Sverre.
-      * Next week, he will clean up code and commit and push all uncommited testing code, increase the overall coverage printed in console to over 60%, and make the coverage of most modules over 50%. 
-      * He will also move the the gaetestbed and pymox modules to buildout dependency and add the experience of how to do mail and taskqueue related tests with gaetestbed to the testing wiki page. 
-  * *Action items:*
-    * Students should talk with their mentors about merging their code to the trunk. 
- 
-
-== 02 Aug 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-
-  # Update on GSoC Projects
-  # Round the table
-  # New co-lead
-  # UI redesign help
-
-=== Meeting notes 02 Aug 2010 ===
-  * Attendance:
-    * All present.
-  * Update on GSoC projects:
-    * Data Seeder: 
-    * Document Editor:
-      * Pavel reimplemented RevisionContent model to store arbitrary number of fields as JSON.
-      * He refactored logic and views to support new revision control architecture.
-      * He will finish revision control for StudentProposal in a couple of days.
-      * He will start working on form auto-saving feature next week.
-    * Social Features:
-      * Savitha Integrated Cal Vis library and UI with the Calendars feature.
-      * She redesigned the CSS of the Calendar to make it look more professional and Google-like.
-      * She added Maps for users to specify location when creating Maps.
-      * She is working on the Maps Feature for displaying all users and events, and filtering. She hopes to complete this by the end of the week.
-      * She is still facing the two API time-out errors and needs to find a way around it. 
-    * Testing:
-      * Leo has managed to increase the testing coverage to 57% with the work on low coverage ghop modules.
-      * He found that there is one taskqueue_stub in google.appengine.api.labs.taskqueue and he registered it to 'taskqueue' service. But another error is raised "raise self.__TranslateError(e.application_error, e.error_detail) UnknownQueueError". He is working on it.
-      * Next week, he will try to solve the error first and then check in all code.
-      * He will also add more tests and aim to increase the testing coverage of Melange to over 60%.
-      * He will also try to find a good way to test the mailing and taskqueueing functions and make sure the correct mail has been sent out and the correct task has been scheduled. 
-  * *Action items:*
-    * Students should continue to add tests to their code. 
-  * *Important announcement::*
-    * Daniel will serve as co-lead of Melange.
-    * echoditto will redesign UI for Melange with the request of Carol. Melange will soon have a new feel and look :-). 
-
-== 26 Jul 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-
-  # Update on GSoC Projects
-  # Round the table
-
-=== Meeting notes 26 Jul 2010 ===
-  * Attendance:
-    * Savitha couldn't participate.
-  * Update on GSoC projects:
-    * Data Seeder:
-      * Seeding process is fully functional using a simple view.
-      * Felix is currently attempting to integrate an AppEngine MapReduce framework.
-      * He will mail the dev list and CC durin42@gmail.com about where to place thirdparty libraries (currently in app/). 
-    * Document Editor:
-      * Pavel Last week fixed issues in the logic code pointed out by Daniel
-      * He reimplemented "show diff" button using Mario's patch to the lists framework.
-      * He started working on revisions for StudentProposal, but came across the problem
-        * StudentProposal has two fields: "content" and "abstract", which must be versioned.
-        * Current implementation of RevisionContent model allows to store only one field.
-        * Daniel proposed to store multiple fields as a JSON document. This approach is easy to use and scalable.
-      * He will reimplement revisions using JSON and implement revisions for StudentProposals this week.
-      * Sverre is worried about tests for his code. He will add tests this week.
-    * Social Features:
-      * Savitha wound up calendars features mostly. She used the javascript maps package to let users specify exact location of event so it can be used along with CalVis maps features.
-      * She also worked on CSS designs for CalVis Calendars.
-      * She will start to work on Maps feature/view for all users and events this week. 
-    * Testing:
-      * Leo mainly worked on low coverage modules, e.g. soc.tasks.surveys, soc.tasks.grading_survey_group and etc this week.
-      * He has managed to increase the testing coverage of Melange to over 55%.
-      * He will clean up the code and will commit and push them.
-      * One problem he met is that there is no api proxy stub available for service "taskqueue" yet, so it raises an error "ERROR:root:No api proxy found for service "taskqueue". He is also working on it.
-     * In the next two weeks, He aims to increase the testing coverage of Melange to over 60% and increase the testing coverage of those modules below 50% (40% at least) to over 50%. 
-  * *Action items:*
-    * Students should continue/start to add tests to their code. 
-    * Mario will try JS-Test-Driver along with YUI Test 3 and see if it works :) 
-    * Mario has done some inspecting about JSTestDriver and YUITest. YUITest seems still active (version 3 now), and he prefers this testing framework as it's the one that suits better our needs, especially about testing asynchronous code. He's not sure about the correct integration between JSTestDriver and YUITest, as one post on JTD mailing list says it's not working, but the wiki seems to say the opposite. So he needs to try it out and see if everything works.
-== 19 Jul 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-
-  # Update on GSoC Projects
-  # Round the table
-
-=== Meeting notes 19 Jul 2010 ===
-  * Attendance:
-    * Pavel couldn't participate due to unknown reason.
-  * Update on GSoC projects:
-    * Data Seeder:
-      * Felix had some problems with client-side JavaScript templating engines, switched a few, found some bugs and finally went with [http://beebole.com/pure/ pure].
-      * He is now working on enhancing the web interface to support references.
-    * Document Editor:
-    * Social Features:
-      * Savitha worked on user authorization for data apis for org_admin and prog_admin roles.
-      * She had to make changes to the event logic file to handle different authorizations and storing the token etc.
-      * She has encountered two weird errors from appengine, which is caused by a timeout, will mail dev list detailed traceback.
-      * Calendars UI has been tentatively fixed on CalVis, and she needs to change the design so it looks more slanted towards google's design.
-      * She was supposed to have started on Maps feature this week, but still winding up the Calendars.
-    * Testing:
-      * Leo met one problem that nose tests could not run the GSoC View tests he added. He then solved the problem by adding __init__.py to the GSoC test packages.
-      * Leo has only managed to add 1% more coverage last week which is far less than the original target 10%.
-      * Sverre thought the original plan was not realistic. Leo agreed and adjusted this week's target to 5% more including last week's 1% more. 
-  * *Action items:*
-    * All students should focus on tests this week.
-    * Sverre will merge Leo's test infrastructure code.
-    * Mario will discuss which Javascript testing framework to use (update next week).
-    * All students will update the notes wave with their progress so far.
-    * Daniel will contact Pavel to figure out what's going on, with update next week (at the latest).
-
-
-== 12 Jul 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-
-  # Update on GSoC Projects
-  # Round the table
-
-
-=== Meeting notes 12 Jul 2010 ===
-  * Felix couldn't participate due to issues with his internet connection.
-  * Update on testing project:
-    * Leo solved the problem that coverage does not track the properties definition of Melange models by  using pymox stubout to stub out nose.plugins.cover.Coverage.begin so that it loads Melange before the testing coverage starts.
-    * The test coverage of Melange is now over 50%.
-    * He further worked on various views, e.g. sponsor, program, student, organization, etc.
-    * He will do more view and logic tests and aim to increase the overall code coverage to over 60%.
-  * Update on document editor project:
-    *  Pavel has implemented all functions of revisions, e.g.  "Revert to revision", and uploaded them to his appspot instance.
-    * He managed to make button work with the help of Mario.
-    * He plans to deploy python html diff engine, create view that show diffs for revisions and make code clean-up this week.
-    *  Daniel will send Pavel some feedback later.
-  * Update on social features:
-    * Savitha worked on getting the workflow for the Calendars features and uploaded the latest to my appspot, e.g. Progadmin activates Calendars, Orgadmins get notifications, Orgadmins accept, all users can now view all calendars and events, users can add events by selecting which Calendar they want add to (non-owners such as students and mentors will have to wait for approval).
-    * She will work on user authentication (plain text password and user name are currently used) and the synchronizing of calendar events between Melange and Google Calendar.
-    * She considers GData APIs but needs to figure out a way to get Auth token from the user API with Madhu.
-    * She and Madhu are going to go through the workflow, code and integration.
-  * *Important notes:*
-    * Daniel suggested to take meeting notes on Google Wave and Sverre suggested to still put one copy on the wiki. Leo will have a try.
-    * Felix needs to complete a blog post.
-
-== 5 Jul 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-
-  # Update on GSoC Projects
-  # Round the table
-
-=== Meeting notes 5 Jul 2010 ===
-  * Blog posts: All students have posted their blogs in this week.
-  * Update on data seeder:
-    * The seeder is able to seed models without any references and the data providers work correctly.
-    * Error/progress reporting has been implemented on the backend but not on the web interface frontend.
-    * Mario and Felix think about integrating a client-side HTML templating engine in JavaScript to Melange in order to build HTML on the fly on the client side.
-    * Three options are being considered, i.e. pure, jQuery tempest plugin and DOJO DTL. Mario feels that the third option may be too much messing on the current architecture.
-    * Mario and Felix will further talk about the three options after the meeting, possibly on the list.
-  * Update on testing project:
-    * Leo found that Python coverage does not track the properties definition of models. So, doing model tests adds little testing coverage.
-    * He also found there are not a lot to do logic tests because most methods of other logical are inherited from base logic.
-    * He will focus on doing view tests now, especially on those with low coverage.
-    * He has not done a lot last week due to breakdown of his hard drive and he'll try to do more this week.
-  * Update on document editor project:
-    *  Pavel implemented views that show revision with given revision number and lists all the revisions for the given entity and uploaded them to his GAE instance, which looks good.
-    * He met two problems. The first one is to track different key/value pairs for the params dict. He solved it by using a debugger. The second one is to create configuration JSON for buttons and actions with  list framework. With the help of Daniel, Sverre and Mario and reading the JQGrid documentation, he has started to understand the lists and could even create some buttons and associate behaviour.
-    *  He will do his best to finish views in a couple of days to start implementing diffs before the midterm evaluation.
-  * Update on social features:
-    * Savitha started working on the Calendars/Events feature: she has created the event data model/logic/views (e.g. list events), and uploaded to her GAE instance http://melange-social.appspot.com/site/show/site.
-    * Two types of events are created, one is the local event_entity stored in Melange and the other is the one sent to Google Calendar. They are not synchronized until now and Savitha is working on it.
-    * The UI of the calendars is being discussed on the mailing list and not decided yet. Google Calendar UI is currently used.
-    * User Page has been mostly done. The new CSS designs will be uploaded by this wednesday.
-    * There are no restrictions for different user roles at present, e.g. everyone could create their User Pages and the go on to add events to the Calendar. Savitha is working on it and will get it done hopefully by this weekend.
-    * Savitha decided to get the Key for the JS API maps following Mario's advice.
-  * *Important notes:*
-    * Pavel and Felix found the params mechanism a bit hard to understand, especially combined with other things such as patterns and checking access etc. Felix thinks more documentation is needed. Sverre encourages students to add their findings to the params wiki page http://code.google.com/p/soc/wiki/SocParams .
-    * Sverre suggests Pavel and Mario together with him to create a wiki page for the list framework.
-    * Mario suggests Pavel to add link of JQGrid documentation that it's not yet linked, if any, inside the text of the ListsProtocol wiki page.
-
-== 28 Jun 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Leo (Chong Liu)<br/>
-
-  # Blog posts (where are they?)
-  # Update on GSoC Projects
-  # Round the table
-
-=== Meeting notes 28 Jun 2010 ===
-  * Felix couldn't participate because he was taking an interview.
-  * Blog posts: Savitha and Leo will make a post later today.
-  * Update on testing project:
-    * Leo has added content to the wiki page GettingStartedOnTesting and asked for feedbacks. Sverre has had a look at it and thinks that it should be extended, though it looks good. Sverre will help Leo extend it if time allows.
-    * The coverage of the test is still low. Sverre suggests Leo to focus the modules with low coverage next week, e.g. do some tests on the models.
-  * Update on document editor project:
-    *  Pavel made some changes on the revision models, implemented a few revisions for documents and will push his code later.
-    *  The revision control currently only works on backend not on front side.
-    *  Pavel will add others as a developer on his Appspot instance
-    *  He is implementing the view which helps to work with revisions. He find some cool features of Melange, e.g. Button, checkbox etc. which can be used in his work.
-    *  Pavel and Danial will interact and discuss more about the project.
-  * Update on social features:
-    * Savitha made changes to user pages, e.g. add new jobs and educations but could not deploy it to her Appspot instance because she could not access app engine on weekend, which is quite normal in India according to Madhusudan.
-    * She is able to have access to it today and will deploy later.
-    * She will work on Calenda later.
-    * She is behind the schedule but believes she can catch it up because she has become familiar with the codebase.
-    * She met problems when using blob properties for images and will email the detail of the problem to the Melange list later.
-  * *Important notes:*
-    * Sverre will go to America the day after tomorrow and will spend some quality time with his girlfriend.
-    * Lennard will start his internship in Australia next week.
-    * Students should make their blog posts before the weekly meeting.
-    * All students should add everybody as a developer on their Appspot instance
-    * Students should ask on Melange list as well as their mentors when they meet problems
-
-== 21 Jun 2010 Team Conference Call == 
-
-* Chaired by:* Lennard de Rijk <br/>
-* Notes taken by:* Pavel Klemenkov<br/>
-
-  # Update on GSoC Projects
-  # Round the table
-
-=== Meeting notes 21 Jun 2010 ===
- * Daniel couldn't participate, cause he is in the US now.
- * Update on document editor project:
-  * Back-end for revisions is working now. It is deployed at http://melange-editor.appspot.com
-  * View that helps to work with the revisions (show revision, show diff and revert) is going to be implemented on Wednesday.
-  * Need to write script that converts existing entities into the new ones.
-  * It is a good decision to implement property methods in the models, cause it makes rendering templates easier.
- * Update on testing project:
-  * Last week Leo made Django test client to work with Melange.
-  * This week he plans to write more tests on logic.
-  * Leo also wants to create Wiki page that describes current testing environment.
-  * Lennard wants more tests :)
- * Update on social features:
-  * Savitha has almost finished user pages. Updated instance is deployed at http://melange-social.appspot.com
-  * Searching users based on tags is to be done.
-  * Savitha starts working on calendars this week.
-  * Savitha needs to add tooltips for new fields.
-  * Lennard notices that "Preferred name" is the same as "Public name" from User model.
-  * Visibility is for entire page now, but it should me made more granular.
- * Update on data seeder:
-  * Felix is setting views for his module. Melange lacks support for views that are not connected to some model or logic.
-  * Felix thinks that his current solution looks like a hack, but plans to refactor it in the future.
-  * Every model includes all the fields from base models. That's why it is so much JSON right now. Felix needs to take care of it.
- * *Important notes:*
-  * Lennard leaves and can't be project leader for a while. He will not be able to participate in conference calls. Sverre is our new leader. He is responsible for everything! :)
-  * All students should continue sending updates on mailing list, posting blog updates, contributing code, writing tests and working hard!
-
-== 7 Jun 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Savitha<br/>
-
-  # TODO's from last week
-  # Update on GSoC Projects
-  # Round the table
-
-=== Meeting notes 7 Jun 2010 ===
-
-	* Lennard is at a friends place and will not be attending today's call.
-	* Pavel is in Syberia regarding his PhD and will be unable to attend.
-        
- 
-        * Data Seeder Project Update
-               * After IRC discussion with Mario, rewrote/merged AJAX APIs and is okay for now, will discuss further if any problems arise.
-               * Implemented most Data Providers
-               * More or less on schedule, but will put in more hours this week.
-
-        * Testing Project
-               * Leo is on schedule.
-               * Had some problems getting Django's testing client to work with Melange, it is now resolved.
-               * Will be spending more time on the project over the week and weekend.
- 
-        * Social Project
-               * Slighly behind schedule, planning to catch up by putting in more work hours this week.
-               * Had some problems with the OS etc. in setting up working environment. Now all set up work is done and ready to do more coding.
-               * Clarified doubts about framework and code as and when with Madhu.
-
-        * Document Editor Project
-               * Pavel is not in town and will update Daniel on his project once he is back
-
-        * TODOs for Students this week
-               * Hang out more on IRC and don't hesitate to ask questions to the rest of the team if your mentor is not around/offline. You can mail the developers-list your questions too.
-               * Keep team updated on project, travel schedules etc.
-
-== 31 May 2010 Team Conference Call == 
-
-* Chaired by:* Lennard de Rijk <br/>
-* Notes taken by:* Felix Kerekes<br/>
-
-  # Planning Q3-Q4, what do you want to do?
-  # Update all other GSoC Projects
-  # Round the table
-
-=== Meeting notes 31 May 2010 ===
-
-	* New document editor
-		* Pavel's wiki missing timeline for second half
-			* Pavel is not sure about the timeline
-			* Goal for the midterm: finishing revision control
-			* Second part should involve deploying and integrating MarkItUp and Markdown
-		* Pavel would like to discuss possible options (which are posted on the wiki)
-		* Conclusions:
-			* Document model should be refactored: add revisions as a ListProperty
-			* There is no point to create separate model for revision, Work can be refactored
-			* Revision descriptions will be included as StringListProperty in Document model for easy access
-
-	* Social features
-		* Missing second part for timeline
-			* Maps left for second part of the project
-		* Savitha pushed some changes to http://melange-social-features.appspot.com
-			* Would be nice to embed Google Calendar
-			* Tabs will be populated in the next days
-
-	* Data seeder
-		* Felix needs to have a meeting with Mario to discuss the AJAX API
-
-	* Testing
-		* Leo has committed some test which are looking good
-		* Tests should be reviewed and pushed to Melange if everything's fine
-		* Sverre will check coverage and see if important functionality is covered
-
-	* TODO for students
-		* All developers should be added as project members on everyone's clone
-			* "Allow non-members to review code" should be checked
-		* Add "melange-soc-commits@googlegroups.com" to activity notifications
-
-	* Q3-Q4 planning
-		* Mario has enough work to do on the user interface and refactoring JavaScript
-		* Mario would like to postpone designing prototype UI to 31st of August (and edit the wiki page)
-		* Daniel is missing, needs to take a look at this and decides wether he has time for something.
-
-== 24 May 2010 Team Conference Call == 
-
-* Chaired by:* Lennard de Rijk <br/>
-* Notes taken by:* Sverre Rabbelier<br/>
-
-  # Data Seeding Project, ?Script for Fixtures?
-  # Update on all other GSoC Projects
-  # Round the table
-
-=== Meeting notes 24 May 2010 ===
-
-  * Felix asks how to convert seeding to fixtures
-  * Decision is to convert data to fixtures
-  * First seed data into datastore, optionally mess around with it, then convert to fixture
-  * Tentative timeline posted to wiki
-  * Lennard and Sverre will look at DataProviders
-
-  * Leo worked on adding more testcases, had some trouble, but now has everything set up
-  * Going to work on coding more this week
-  * Noticed the current fixtures don't delete data on tearDown
-  * Sverre remembered (after the talk) that this is not a problem since the datastore is emptied after every task
-
-  * Discussed how to handle Calendars (public/private, one account)
-  * Savitha is planning on finishing early stages of user profile this week, Lennard has asked for a demo on appspot.com for early feedback
-
-  * Going to focus on revision control for now (diffing will be done later)
-  * Trying to figure out how to store documents in the new document model
-  * All current entities will have to be converted
-  * Pavel needs to create his Wiki (and add a timeline)
-  * All students should put a full timeline on their wiki
-
-== 17 May 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier<br/>
-* Notes taken by:* Lennard de Rijk<br/>
-
-  # TODO's from last meeting
-  # Social Features Project update/discussion
-  # Update on all other GSoC Projects
-  # Planning Q3-Q4 update
-  # Round the table
-
-=== Meeting notes 17 May 2010 ===
-
-  * Pavel is not here
-  * Felix had a cancelled train :(
-  * Mario and Madhu have no need for access to socghop
-  * Carol will check up on the 4 signees for the Melange CLA
-
-*Social Project*
-  * Profile page
-    * Biography field, no separate education
-    * We want the ability to annotate projects, to make the page look more alive
-    * Blog feed
-    * We would like to give additional projects a try, 
-    * Isn't visible by default and contains only public name/link id on default
-    * If all turns out well we need a feature to notify users that they have to fill in their profile
-  * Calendar page
-    * How does the Calendar interact within the users space? Do we/can we force to create calendars on their account? Do we want them to give links to calendar.
-  * Map API use
-    * RSS feeds for events per subject, might leverage NewsFeedFramework from James (talk on list)
-    * Tags on events and users
-    * Users are not forced to publish their location
-    * 3 components of social projects
-      # User pages, current and past projects (and blog feed if possible)
-      # Calendar API use, events going on in program as well as organization calenders. Can suggest new events 
-      # Map API use, show users and events.
-
-*Testing Project*
-    * Had meeting with Sverre about project last Friday
-    * This week add more testcases to important module, base Logic and View
-*Document editor*
-    * Emailed Pavel last Friday/Saturday about project, Pavel working on PHD exams over tomorrow.
-    * This week research HTML diff
-
-*Data seeder*
-    * Meeting on Tuesday, notes posted
-    * Blogpost with fancy graphics made
-    * Results of research into YAML, XML, Fixtures for making data models
-
-* What else *
-  * *IMPORTANT* Mails to mentors should be sent ot melange-dev as well, transparency 
-  * TODO: Sverre should flesh out the testing part and figure out a date for when tests should be made with each commit
-  * We have no projects from Antartica :(
-  * Meeting about releases with Daniel after this call
-
-== 10 May 2010 Team Conference Call == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* carols<br/>
-
-  # TODO's from last meeting
-  # Statistics module, deployment on socghop
-  # Testing project by Chong Liu (what/how/focus on/todo?)
-  # Document editing by Pavel Klemenkov
-  # Updates on other GSoC projects
-  # Planning Q3-Q4
-  # Round the table
-
-=== Meeting notes 10 May 2010 ===
-We need to run a script to get the statistics module started<br>
- Carol needs to get Mario, Madhu and Daniel access to the student data [TODO]<br>
- Leo is here this week - new student!<br>
- Leo will be working on a test tool; figure out what's important, what we want to test<br>
- Sverre will talk to Leo more this week about getting started and finding things to do<br>
- Document editor is now more stable<br>
- HTML diffs will need to be included in the document editor - Pavel can research this, but doesn't want to do it himself<br>
- Sverre will search for HTML diffs [TODO]<br>
- Revision control and autosaving are important<br>
- Felix has been looking at the entities module and created a small tool that extracts the diagrams from the code - Sverre thinks there might already be one of these in the scripts directory<br>
- Felix made some cool .pngs of the relationships and will post on the blog<br>
- Everyone should make a post every week before the end of their Friday so Lennie and      Sverre can review over the weekend<br>
- Mario should update with more concrete UI ideas so Lennie can put it in the grid
- Mario and Lennie will have to have a chat this week [TODO]<br>
- Everyone needs to sign the CLA and let us know that they did so [TODO]<br>
-
-== 3 May 2010 Team Conference Call == 
-
-* Chaired by:* Sverre Rabbelier <br/>
-* Notes taken by:* Lennard de Rijk<br/>
-
-  # Introduction, who are you?
-  # Statistics module update
-  # Things students need to do, or we need to do for them (ie. blogging rights)
-  # Testing project by Chong Liu (what/how/focus on/todo?)
-  # Data seeding project by Felix Kerekes
-  # Social Features project by Savitha Raghavendran
-  # Document editing by Pavel Klemenkov
-  # Q3-Q4 planing (and perhaps a bit of Q2)
-  # Round the table
-
-=== Meeting notes 3 May 2010 ===
-
- Not Attended: Daniel Hans, Chong Liu
-
- * Carol is out of stroopwafels
- * Mario is our resident JS expert
- * Sverre, forgot to tell us about himself
- * Lennard will head to Sydney in July ^_^
- * Pavel is our PHD from Moscow, his Vodka > Polish Vodka
- * Savitha will work on social features, a Bachelor student
- * Felix, worked on Pidgin last year and has troubles with Skype :)
- 
-On to the real stuff
-
- * Todo for our students this week, make a clone on Google code and test/deploy Melange to your own GAE instance.
- * As well as mailing us the account you would like to use for melange-dev.blogspot.com
- * Integrate early and often, with tests only :)
-
-Data seeding project:
- * IRC meeting after the call to further discuss this project *Edit Tomorrow 17.00 CET*
- * Will look at the data seeder code from Daniel this week, try to salvage useful parts
- * Start on design documents, first up web interface workflow (*Lennie suggests using wiki :)*)
-
-Social features project:
- * Most import features to Savitha are, Map + Event calendar. Secondly the personalized profile page.
- * Sverre notes that a automated TODO list might be nice, for instance reminding our org admins to update their home page.
- * Will have meeting on 5th of May at 13:30 (UTC) with Madhu about further details on #melange IRC channel.
-
-Document Editor project:
- * Worries about the revision control, makes valid point that storing everything is not nice. However Sverre points out that data is cheap and CPU is expensive on AppEngine.
- * MarkItUp seems to work
-
-Q3-Q4:
- * GHOP, Madhu + Lennie should work on making that more tangible
- * Usability, Mario needs to work something out for that
- * Testing, Sverre suggesting getting more time for it. Chong Liu's work should help.
- * Javascript refactoring, most likely be assigned to Mario
-
-And as last
- * Next All-Hands most likely before/after Mentor Summit
-
-
-== 26 Apr 2010 Team Conference Call == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Lennard de Rijk<br/>
-
-  # Volcano Fall-Out
-  # Statistics Module
-  # Our GSoC Projects
-  # Round the table
-
-=== Meeting notes 26 Apr 2010 ===
-  * Everybody is now home safely!
-  * Carol is in need of pictures for the Ashpocalypse blog
-  * Daniel is not here right now, so skipping statistics
-  * GSoC Students will be contacted by their mentors asap
-  * They will be posting their weekly updates on the Melange blogspot page
-
-
-== 15 Mar 2010 Team Conference Call == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Sverre Rabbelier <br/>
-
-  # Duplicates handling (Madhu)
-  # StudentProposal Review fixes (Daniel)
-  # Work on the Lists (Mario & Sverre)
-  # Round the table
-
-=== Meeting notes 15 Mar 2010 ===
-
- * Duplicate handling: Lennard has taken a look at it, looks pretty good, but we currently show the project is a duplicate as soon as the slot assignment is made public
- * Duplicates will also be listed on the overview page 
- * Duplicates will include email address of organziation admin
- * Send new patch where the duplicate status is not shown yet, for now
- * Will be discussed further on GTalk
- * Daniel did not have as much time as expected, but hopes to be done tomorrow
- * Lennard will fix help text
- * There are some outstanding list issues that Mario and Sverre plan to fix when possible
- * Leslie will send Lennard edits to organization acceptance email
-
-== 15 Feb 2010 Team Conference Call == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Lennard de Rijk<br/>
-
-  # Updates on roadmap assignments (201, Taggable Orgs, Org Applications, Duplicate Proposal Task)
-  # GSoC Testing Week update
-
-
-=== Meeting notes 15 Feb 2010 ===
-  * Lennard will redo the Notifications page so that the buttons work
-  * Lennard will prepare melange-dev on Saturday
-  * Sverre will be responsible for pushing the tip to melange-dev. Special version numbers for the testing week are r....-gsoc where .... is part of the rev number.
-  * Sverre will continue his work on the lists, a few more to go. Will send overview of which lists need to be done to melange-dev.
-  * Lennard will use his spare account during the test period to play the role of Organizaiton, Sverre will use his to be a Student.
-
-== 8 Feb 2010 Team Conference Call == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Leslie Hawthorn <br/>
-
-  # Recollection of last week's work
-  # Issue 201, update
-  # Organization Applications update
-  # Taggable Organizations update
-  # GSoC Testing Week update
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 8 Feb 2010 ===
-
-Present: Sverre Rabbelier, Daniel Hans, Mario Ferraro, Lennard de Rijk, Leslie Hawthorn, Carol Smith 
-Absent: Pawel Solyga, Madhu CS, 
-
-==== Around the "Room": Lennard ====
-* Lennard has assigned Madhu to work on duplicate detection of proposals, should be finished next week
-* Removed the group application system since new org application system is in place
-* Removed ranker system for GHOP organizations
-
-==== Around the "Room": Sverre ====
-* Been working on last five out of 30 lists for Summer of Code, progress has been slow because code base is tortuous; some other lists outstanding for GHOP
-* LH to follow up with Sverre on API stuff for automatic acceptance of student projects to get resources from Google to help with this task since lists are taking so long
-
-==== Around the "Room": Mario ====
-* Working on list bugs and ehnancements, externalizing of tooltips and autocomplete JS code from templates, see message to Dev list (Django trouble)
-* Writing wiki page on list protocol
-
-==== Around the "Room": Daniel ====
-* Finishing autocomplete list and taggable organizations, working on bug discovered when creating GSOC 2010, scheduled to be done next week
-
-==== Around the "Room": Leslie ====
-* Testing phase starts 22 February, Lennard will write note to dev list to kick off
-
-==== Organization Applications Update ====
-* Lennard has finished basic views, hooking up button to process org apps, e.g. pre-accepted or pre-rejected then gets processed to send emails to org admins who submitted apps; testing system this week
-
-==== Testing Week ====
-* Two week period starts 22 February
-* Lennard will work on org views and send mail to the dev list to call for testers
-* Sverre will email LH details on API work needed and LH will reprioritize top 10 list
-
-
-== 1 Feb 2010 Team Conference Call == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Leslie Hawthorn <br/>
-
-  # Recollection of last week's work
-  # Issue 201, testing update
-  # GSoCX Ideas wiki page feedback
-  # GSoC Testing Week
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 1 Feb 2010 ===
-Present: Sverre Rabbelier, Mario Ferraro Lennard de Rijk,Madhusudan C.S., Leslie, Pawel Solyga 
-Absent: Daniel Hans 
-
-* Starting today, you can start working off of soc current
-* Plan made for week of testing, Lennard has made a schedule; will send it to Leslie for review then publish to Melange Dev list
-* Lennard has already made the needed change for participant agreements (labeling the link Full Text (Printable Page) as requested by Google legal
-
-* Next Week: 
-  * Sverre will commit new list code today and work on fixing remaining list issues (see "Around the Room")
-  * Lennard is working on org application reviewing process, which will need new list code that Sverre is finishing up;[http://socghop.appspot.com/gsoc/program/accepted_orgs/google/gsoc2009 Accepted org list] on socghop.appspot.com is currently broken; Lennard will cut a new release
-  * Mario will be working from feedback received on his work on Issue 201, needs to do some refactoring 
-  * Madhu will be updating the wiki and will be in touch with Lennard
-
-==== Around the "Room": Sverre ====
-
-* Sverre is working on changes to Ajaxy list system as demoed at January All Hands, changes will be committed today; hopes to finish all work on lists this week
-* Some lists are more difficult to fix than others since they are embedded, e.g. the "get evaluations list" and "manage student projects" page for org admins; Sverre is figuring out how to fix this
-
-==== Around the "Room": Mario ====
-* Also working on lists with Sverre; Sverre will be making changes based on Mario's current work, cleaning up comment history, etc.
-
-==== Around the "Room": Lennard ====
-* Reviewed Ideas for GSoC 2010 and really likes Mario's ideas.
-
-==== Around the "Room": Madhu ====
-* Not much time this week, will be picking up on testing; working on updates for 2010 program and GHOP to-do's; will ping Lennard offline for more details
-
-== 25 Jan 2010 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Google Wave <br/>
-
-  # Recollection of last week's work
-  # Issue 201, testing update
-  # GSoCX Ideas wiki page, bring your ideas to life!
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 25 Jan 2010 ===
-
-Present: Sverre Rabbelier, Mario Ferraro and Lennard de Rijk
-Absent: Leslie Hawthorn, Daniel Hans and Madhusudan C.S.
-
-  * Testing and committing of Issue 201 will be done on/before next Monday. All lists except the two which needs input functionality will have been changed. This change will not be pushed live yet.
-  * Lennard will move the Wiki entry on the GSoCX ideas page. Document editing looks good so does testing. Usability not reviewed yet.
-  * New release by Lennard before next call, will not include Issue 201.
-  * Mail has been sent to Leslie about when to flip the switch on freezing 2009 data (Lennard stupidly forgot to CC Sverre :P)
-  * For next week, Lennard will fix issues arising with GHOP due to Marcelo and continue work on Org App reviewing. Sverre will work on Issue 201 and Mario will have to take it easy due to work :).
-
-
-== 21 Dec 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Google Wave!<br/>
-
-  # Recollection of last week's work
-  # Issue 201, status?
-  # Freezing a GSoCProgram update
-  # Update on the agenda for the Melange Meeting in January  
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 21 Dec 2009 ===
-
-    * Paweł fixed an issue with showDuplicates method and is going to fix seed_db, because it is broken as a result of module conversion
-    * A number of import errors were fixed the last week. Also, a new release
-    * Sverre is working on the python side for the Issue 201
-    * Mario looked into all issues connected to Issue 201, and is fixing what is missing as far as possible. Some issues will remain open to be solved after integration.
-    * Lennie and Daniel continued working on freezing a GSoCProgram. There are still some changes that need to be done to the sidebar menu, but they are going to commit it soon.
-    * Melange Meeting in January is going to be split into per-topic sessions
-    * New release is not scheduled for the upcoming week
-    * The new BLOP API (introduced recently to GAE) is going to be discussed in New York (probably during lunch time :-)) 
-
-== 14 Dec 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Google Wave!<br/>
-
-  # Recollection of last week's work
-  # Missing Tests from Madhu
-  # Issue 201, status?
-  # StudentProposal Task API update
-  # Freezing a GSoCProgram update
-  # Topics for the Melange Meeting in January  
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 14 Dec 2009 ===
-
-    * Madhusudan is absent, so not able to give us the update about the tests
-    * Mario continued his work on Issue 201 and resolved some technical problems which he had encountered with the JS side.
-    * Sverre mostly worked on module conversion last week and reinstalled his laptop during the weekend.
-    * Sverre expects a lot of backend side work for fixing Issue 201, deadline still looks good
-    * Paweł was traveling a lot, so his work focused on reviewing the revisions and patches
-    * Paweł is going to work on intoducing Task API to StudentProposal, Lennie suggests he really focusses on it because of the complexity.
-    * All participants of the Melange January meeting have already booked their tickets
-    * Lennie and Daniel worked on entities freezing and are going to actually freeze the GSoC 2009 soon
-    * Leslie wants a walkthrough of Melange on Monday
-    * Dan Bentley is going to join the January meeting too (and will host on Friday) :-)
-    * Lennie will work on the Agenda for the January meeting, will try to have the outline finished on Sunday 
-
-== 7 Dec 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Google Wave!<br/>
-
-  # Recollection of last week's work (Tests?)
-  # Datastore conversion succeeded, what's next?
-  # Issue 201 status update
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 7 Dec 2009 ===
-
-    * Module conversion done
-    * Mario working on Issue 201
-    * We need to move models, logics, and templates to the gsoc folders
-    * Lennard has spoken with Leslie, she's back
-    * Hopefully news on whether Mario and Daniel are attending the NYC meeting
-    * Almost everything functional with mock JSON objects
-    * Multiple tables in one page (loading done asynchronously)
-    * Querying done on keys, we'll need to add indexes as requires
-    * Lennard will be working on module conversion issues that pop up
-    * He'll also work on the entity freezing patch (reviewing the patch he received from Daniel)
-    * Mario will continue to work on 201, and 702 if he has time
-    * Sverre will work on moving the logic and on issue 201
-    * Sverre will cut & deploy a new release
-    * Daniel will continue working on whatever comes up and help in the module conversion 
-
-== 30 Nov 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Google Wave!<br/>
-
-  # Recollection of last week's work
-  # Update on planning Q1-Q2 '10
-  # Module Conversion update
-  # Issue 201 status update
-  # Testing, use of Fixtures?
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 30 Nov 2009 ===
-    * Flipping the coin works for choosing notes taker :-)
-    * Madhusudan worked on new fixture module for GHOP which was reviewed by Sverre.
-    * Daniel sent a patch for entity freezing and did a code clean-up based on pylint suggestions.
-    * Module conversion is probably going to happen next weekend. Backup has been completed by Dan Bentley.
-    * Nothing new for issue 201 was committed last week. Sverre is going to start working on the backend side tomorrow.
-    * We will go ahead with the Fixture framework.
-    * Daniel is going to double check the code changes which concern the module conversion.
-    * Pawel is going to start working on finding duplicates issue soon.
-    * Madhusudan will continue his work on tests and update the wiki with the fixture usage.
-    * Lennard will release the roadmap by the end of Tuesday and will try to push the module conversions onto socghop together with Sverre by this weekend (if it all works).
-    * Issue 225 marked as fixed by Daniel 
-
-== 19 Oct 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Sverre Rabbelier <br/>
-
-  # Recollection of last week's work
-  # Mario's preview of Issue 201
-  # Update on XSS Tokens
-  # Update on GHOP progress
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 19 Oct 2009 ===
-    * Lennard tested all module conversions and made fixes where needed
-    * Issue 201 demo is up, Mario tested with a lot of items in a list which seemed to work
-    * We now have to make sure we can do the incremental fetches (mostly python side work)
-    * Put issue 201 on hold until after GHOP is working
-    * Mario thinks we have pretty much everything we need on the JS side
-    * Madhusudan fixed issue 694 and attached the patch to the tracker, Lennard will review.
-    * He had some problems with appspot yesterday so is working mostly locally
-    * During weekdays he will have little time for Melange
-    * Next weekend Madhusudan is totally free to work on Melange
-    * Priority right now is that tasks can be succesfully added, and edited, and that they can be claimed
-    * Madhusudan approves of the new Ajaxy list
-    * No news from Dan on the security issue, will request an update.
-
-Action items:
-
-    * Sverre will send Dan/Google an email to ask what's going on, would be nice to get an indication
-    * Sverre will make the new views available in the GSoC module tomorrow and fix the url patterns
-    * We will try to redirect old urls to the new urls (if possible) or to a notification page
-    * Lennard will also work on the request system this week so that it will work with the module system
-    * Update from Madhusudan on what is not working in the GHOP workflow by next Sunday
-    * Lennard will have a look at the patch for issue 694
-    * Mario's general JS patches will be pushed this week after review
-    * Mario will also write down a protocol for communication between client and server
-    * Pawel will review Mario's JavaScript patches (due in 3 more days) 
-
-== 5 Oct 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Google Wave :)? <br/>
-
-  # Meeting notes in Wave
-  # Recollection of last week's work
-  # Mario's preview of Issue 201
-  # Update on model conversion (1 week left)
-  # Update on XSS Tokens
-  # Update on GHOP progress
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 5 Oct 2009 ===
-
- * Mario needs a wave account invite
- * Lennard and Sverre have succesfully implemented the 12 steps of awesome
- * Pawel added the csv export script (and made it generic for all programs) for Organizations and Roles (required to create Google Code GSoC projects)
- * He is still working on Timeline, Hard deadline tomorrow (6th Oct)
- * Madhusudan has fixed Issue 693 and committed
- * Sent bulk approval patch for review
- * Mario is working on Issue 201, no preview this way sadly
- * We need to have sorting and searching client side; sorting works client side, but we lose paging
- * It looks like JQGrid is based on a client-server grid more so than doing things server side
- * Note: main concern is to be able to search, not edit
- * As such this week it is now time to test the steps
- * Demo will be ready by next week
- * If tests are successfull we can start moving the entities
- * After this is done we'll be a lot closer to running GSoC and GHOP on the same instance
- * Model conversion is mostly done due to hard work by Lennard
- * We will add new Middleware to ensure that all POST requests have
- * Sverre will take a look at adding Token to DynaForm (this week, will report findings to Dan)
- * We will be able to run GHOP/GSoC simultaneously in 3 weeks, and we will keep the demo site up to date
- * Sverre will do next week's release
- * Lennard and Sverre will work on testing the data conversion
- * Dan will be working on the XSS token system
- * Madhusudan will be workin on Issue 692 and will keep testing GHOP functionality
- * Mario will be preparing his demo on Issue 201 for next week
-
-== 28 Sept 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Sverre Rabbelier<br/>
-
-  # Recollection of last week's work
-  # Mario's update on Issue 201
-  # Update on model conversion (2 weeks left)
-  # Update on security issues
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 28 Sept 2009 ===
-
- * Pawel reviewed code all week
- * His csv script will also be commited
- * Sverre fixed an important security issue, only one more left! (XSS exploits)
- * Lennard has been working on GHOP fixes and data migration
- * Madhusudan was out-of-internet for 5 days and 2 days of PyCon.
- * PyCon was so-so due to unprepared speakers, awr :(.
- * Merio is better audible when he isn't there but writes an email instead :P.
- * Main reason of Ajaxy list is ordering and search, which might not be possible in JQGrid
- * Model conversion: Sverre committed the decorator
- * Lennard and Sverre are going to implement the 12 steps of awesome
- * Testing will happen next week
- * No reply on mail to Google WRT security issues, but Dan Benltey did contact Pawel two days ago
- * Guido van Rossum recently commited a XSS fixing decorator
- * SVerre will mail Dan Bentley again to ask about getting help with using that code
- * Sverre will do the release
- * Madhusudan will take a look at the recent GHOP breakages (Issue 693)
- * He will also be working on Public Task 
- * Lennard will be working on Model conversion
- * Pawel will work on Timeline this week
-
-== 21 Sept 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Sverre Rabbelier<br/>
-
-  # Recollection of last week's work
-  # Mario's update on Issue 201
-  # Views without specific model/logic (JQGrid examples, seed_db), how to?
-  # Update on model conversion (3 weeks left)
-  # Further actions for Issue 690
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 21 Sept 2009 ===
-
- * Mario was busy with his examns and got ill during the weekend (and couldn't attend his examn today)
- * He did put forth some effort towards issue 201
- * Tried to make a page because there's no way to create a page without a logic or model connected to it
- * The JQGrid example needs to talk to multiple models
- * The reason our views are tied to the models are because we never needed a soc.views.base untill now
- * For now put the demo in the user view, and then we will figure out where to put it
- * Skype is a pain as usual
- * Leslie joins the call
- * Converting the Demo to a final implemetnation will take a lot of time, but that's expected
- * KML patch looks good, will wait till next week's call to discuss what to do with the file due to Performance Reviews at Google
- * Sverre will look into key field changing in skip_fields
- * Sverre will report to Google on oustanding security issues
-
-
-
-== 14 Sept 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Sverre Rabbelier<br/>
-
-  # Recollection of last week's work
-  # GHOP IRC meeting, goals and required data.
-  # Mario's update on Issue 201
-  # Update on model conversion (4 weeks left)
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 14 Sept 2009 ===
-
- * Daniel is not there
- * schmrz is listening in
- * Extra bonus agenda item: issues 690 that Erant brought up 
- * Lennard just committed a new access check that makes it impossible to read someone else's information
- * Want to make a new release since socghop is in maintenance mode now
- * LH asks to let her know ASAP if there's a (security related) emergency
- * Sverre will do a new release
- * Sverre worked on converting decorators.view to Middleware
- * Sverre also fixed the test suite except  the functional tests, Matthew Willekes pinged
- * Lennard worked on GHOP, almost everything committed now
- * Lennard also worked on the task conversion
- * Madhusudan has been busy with examns
- * IRC meeting this friday:
- * implement any needed features to run GHOP
- * pretty clear idea what we need to do
- * Madhusudan will clean up his TODO list
- * we really need to fix the conference-call problem
- * make sure everything functions as we think it should
- * we know what work needs to be done, guide and help people to help us by telling them what they can do to help
- * cleaning out melange-demo datastore
- * clear message to the community: "GHOP doesn't get run without you"
- * If the system doesn't meet your needs: you need to write the code to make it meet your needs
- * We need a clear todo list, and to have clear 'mentors' of each item
- * Up and running demo
- * Merio has been busy with examns too, and might be able to do some work, but will have more time after 21st
- * We can get ready for Model conversion (now we'll have to put the 11 scripts in place)
- * Would be a good thing for someone from outside to help out with
- * No commitment on conversion this week (from core devs) due to other activities
- * Pawel will do a release this week
- * Lennard will apply Madhu's Student patch
- * Sverre is working on the export_kml patch
-
-== 7 Sept 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Paweł Sołyga<br/>
-
-  # Recollection of last week's work
-  # Discussion regarding models conversion
-  # Discussion regarding code samples URLs in StudentProject model and generating links to code samples on Orgs home pages
-  # Open table discussion about GHOP
-  # Mario's update on Issue 201
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 7 Sept 2009 ===
-
- * Leslie talked a little bit about GHOP
- * Leslie received some emails from people interested to help with GHOP
- * Madhusudan didn't have time to update his tasks
- * Lennie thinks that there might be some problems with access controls in GHOP code
- * GHOP demo release hopefully for 18th of September
- * Melange Team will be working on GHOP during Mentor Summit
- * We need to push GHOP patches to main repository
- * Discussion how to get people to help us with GHOP features and GHOP issues
- * Discussion regarding code samples URLs in StudentProject model and generating links to code samples on Orgs home pages (we won't be doing that)
- * Melange Developer Meeting hopefully in December
- * We will try to use hg log for release notes
- * Pawel updated Google App Engine, created new release and reviewed Mario patch
- * CSV export that Pawel was working on is coming soon to the repository near you
- * We decided that we will be doing incremental fixes for GHOP code (Lennie will push the code ASAP)
- * Sverre was working on profiling and fixing caching issues
- * Lennie was away didn't work on Melange
- * Mario was working on Issue 201, 
- * Mario thinks that jqgrid seems to be more powerful and customizable, he will show demo integration by 28th of September
- * Models conversion script and view (HTML page) will be worked on after GHOP code is in the repository
- * Sverre will do the release this upcoming weekend
- * During the next conference call we will prepare a list of tasks that we can handle to casual contributors
- * Small discussion regarding KML export (fetching all User entities is bad :-)
- * Pawel will help Daniel with KML export
- * 4th of October data model conversaion deadline
- * Lennie will work on data model conversation HTML page web UI
- * Lennie will work on GHOP patches
- * Sverre will work on caching if anything comes up, model conversion help and access checks in Statistics module
-
-== 31 Aug 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Pawel Solyga<br/>
-* Notes taken by:* Sverre Rabbelier<br/>
-
-  # Recollection of last week's work
-  # Discussion regarding models conversion
-  # Melange profiling
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 31 Aug 2009 ===
-
- * Pawel was working on cvs exporting scripts for code.google.com, he will commit it soon
- * Pawel's mac was out for repair for over 3 weeks
- * He also worked on fixing the survey exports (adding a link_id and comments column)
- * Recent export was mailed yesterday, recent code will be committed soon
- * Patches were not reviewed yet, but exports and cvs exports took priority, will be done asap now
- * Mario is having connection problems again (very laggy)
- * Sverre has been working on profiling and optimizing Melange together with Jake McGuire
- * Sverre will ask Jake to create a wiki page with how to use the profiler
- * Madhusudan has been working with Lennard on integrating GHoP, all logic and templates have been committed
- * All view helpers have been committed, and the goal is to commit the last view logic by next week
- * Madhusudan will be taking a break next week due ot his GRE (not available for next conf call).
- * Mario has committed JSLint patches and is now comparing datatables and jqgrid for issue 201 (ajaxy table list)
- * General rejoicing over working towards getting issue 201 resolved
- * We have JSLint checks in place (along with pylint)
- * About 201 both projects seem useful, with jqgrid seems more powerful on inplace editing of rows
- * Daniel worked on KML exporting (since the initial script didn't work well), new version has been mailed
- * Pawel will also review the export script soon
- * Table discussion wrt model conversion till next week when Lennard gets back
- * Sverre will continue to work on optimizing and will work with Lennard on model conversion when there is time
- * Pawel will do code reviews and will work with on model conversion with Lennard and Sverre
- * Madhusan will work on finishing integration of the GHoP code
- * Mario will probably be offline on September 2nd (travelling back to Italy for two exams on 15 and 21). 
- * Further he is going to work on 201, and probably with statistics stuff (possibly shrinksafe and jslint)
- * Daniel will work on integrating the statistics code as soon as we pick a date
- * Scheduled: meeting to discuss statistics integration now that Sverre is back in UTC+2
- * No preference for Daniel as to when we hold that meeting
- * Mario will have limited time due to travelling, but 3, 4 or 6 september; or tomorrow late afternoon
- * Picked a date: Sunday regular meeting time on #melange (6PM UTC, 8pm UTC+2)
-
-== 24 Aug 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Daniel Hans<br/>
-
-  # Recollection of last week's work
-  # GSoC Integration Briefing/Update
-  # KML Export update by Daniel
-  # Update on the move to the module system
-  # Update to the latest SDK Release
-  # Task assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 24 Aug 2009 ===
-
- * ALL Melange Google Summer of Code passed final evaluations! :-)
- * Madhusudan sent some comments to the review of his patches
- * Daniel finished working on KML export
- * Paweł is going to: update SDK to 1.2.4 release and push a new Melange release this week
- * Some of the conference participants had connections problems with Skype; the Melange team considered trying  out some other solutions in the further calls
- * Lennie said he would not be available from the following Monday through Wednesday due to his school obligations
- * Sverre and Pawel will work with Mario and Daniel on integrating the statistic module to the Melange repository
- * Lennie will work with Madhusudan on integrating his code
- * Lennie will also work on issues 672 and 385 from the Melange issue tracker
- * Pawel will review Mario's patch JSLint patch which reduces sizes of JavaScript files
- * James has to talk with Sverre about his news feed patch which he wants to submit as a series of Mercurial Queues patches
- * Pawel will write a script to create a cvs export that can be used to create the GSoC projects on Google Project Hosting.
-
-== 18 Aug 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Pawel Solyga <br/>
-* Notes taken by:* Daniel Hans<br/>
-
-  # Recollection of last week's work
-  # GSoC Student Status Update
-  # GSoC Final Evaluations
-  # Tasks assignment for the upcoming week
-  # Contributing to Melange after GSoC
-  # Round of questions
-
-=== Meeting notes 18 Aug 2009 ===
-
- * Pawel came back from his vacation (welcome back! :-)
- * Daniel fixed some bugs in visualizations and added new option to change size of visualizations
- * Daniel prepared a new series of patches in accordance with Sverre's comments and suggestions
- * Daniel is now working on KML exporting
- * Mario also worked on bug fixing and refactoring his code - he sent his patches to the mailing list and is waiting for response from the developers)
- * Mario sent some patches which introduced JSLint in order to reduce sizes of JS files
- * Mario worked on exporting a visualizations as JS code - now one can paste some code on his site and a visualization will be displayed on his or the external website.
- * Madhusudan also worked on bug fixing and new patches
- * Madhusudan introduced some new features to the GHOP module (for example student grade added when a student is at high school, student type for students)
- * Madhusudan created a new wiki page with user manual for using the GHOP module for Melange
- * All GsoC students updated their demo instances
- * Pawel asked GSoC students if they want to participate in Melange development in the future. As I understand we all want :-)
- * Pawel will talk to Lennie on what is needed to be done in the upcoming weeks
- * Pawel will replay to the mailing-list letters received while he was on vacation
-
-== 10 Aug 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk <br/>
-* Notes taken by:* Sverre Rabbelier <br/>
-
-  # Recollection of last week's work
-  # GSoC Student Status Update
-  # GSoC Final Week Goals and Wrap Up
-  # New Melange release
-  # Tasks assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 10 Aug 2009 ===
-
- * Pawel is on vacation
- * Sverre has had little to no time last week
- * Lennard made it possible for admins to see the replies to surveys
- * Daniel has been working on 'visualize link' page, doesn't work perfectly on dashboard page
- * Mario has agreed to work on that
- * Daniel has worked on new patches, Sverre will try to review (or at least answer the question there in) today
- * We want access checks to be changeable, default should be highest level
- * James has been refactoring the newsfeed code (now including tests!)
- * Plan is to implement PubSubHubub this week
- * He also worked on a new patch for the mail dispatcher this week
- * Mario mostly worked on the bugfixes for the Dashboard
- * There are some problems with the JSON format (backend expected string instead of a number)
- * Also did research on how to seperate our HTML and JS (templating), will send an email to the list
- * Statistic export is a popup box that shows copy/pasteable code for inclusion in blogpost
- * Madhusudan worked on supporting selecting Task Type and difficulty level tags while creating/editing tasks
- * Started work on Task search filter, but stalled (for now) due to GAE limitations
- * Other than that it is mostly bug fixing
- * We expect all student's code to be submitted to the ML by the and of GSoC
- * All demo instances should be up to date (as well as the wiki page listing demo instances)
- * Sverre did a new release yesterday, Lennard or Sverre will do the next release
- * We want to have the models converted before GHOP to prevent pain later
- * Lennard will work out a schedule once the wiki page is updated
-
-== 3 Aug 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk <br/>
-* Notes taken by:* Sverre Rabbelier <br/>
-
-  # Recollection of last week's work
-  # GSoC Student Status Update
-  # New Melange release
-  # Tasks assignment for the upcoming week
-  # Round of questions
-
-=== Meeting notes 3 Aug 2009 ===
-
- * Last week, student to mentor maps online
- * Popular feature
- * We have started with an overview link for org admins to see whether mid-term/end-term surveys have been taken
- * Skype is a PITA as usual
- * Daniel was working on the last few things on his personal goals (multiple visualizations per widget)
- * New patches will be sent on Wednesday/Thursday
- * Lennard voices concerns about access control to widgets
- * Mario has been working on making it possible to integrate statistics in blog posts etc.
- * Important goal for statistics: access control (the docs access checks are probably reusable)
- * Madhusudan's task flow is working, he has a few bugfixes left
- * Sverre is doing the next release
- * We might want to update getForFields to allow for specifying multiple ancestors
- * Mario will start new thread about seed_db
- * Thread about modularization has fallen silent
-
-
-== 27 Jul 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Pawel Solyga <br/>
-* Notes taken by:* Lennard de Rijk <br/>
-
-  # Recollection of last week's work
-  # GSoC Student Status Update
-  # New Melange release
-  # Tasks assignment for the upcoming week
-  # Round of questions
-
-Absent: Madhusudan C.S. and Leslie Hawthorn
-
-  # Pawel has been working CSV export for both Surveys and Student Projects. This code is currently being cleaned up and will be committed before the end of the week.<br/> Lennard has fixed Issue 655 and has been working, with Mario, on reorganizing the map that links Students and Mentors together. The stored locations for students, mentors and org admins will be changed using remote_api to city level.
-  # Mario has been working on dynamically changing the type of visualization for your statistics, currently there are four different types. However it is easy to add additional types of visualization.<br/> James has been working on getting his NewsFeed code ready and working on the Survey Record view page.
-  # A new Melange version has been successfully deployed by Pawel on the 27th of July. The changelogs will be updated shortly by Sverre.
-  # Lennard will be creating this week's release and will continue his work with Mario on the Organization home page map which might actually be finished this week. Also he will work on listing survey information on the Project manage page for org admins.<br/> Pawel will finish his CSV export and will commit an early version of the File model for others to comment on.<br/> Sverre will update the latest changelog this week and work on a view for the administration team to withdraw students from the program. Also Daniel has asked Sverre to review a set of patches. Sverre acknowledged Daniels request to review them within a few (3-4) days.
-  # We decided that Skype is very unstable :).
-
-== 20 Jul 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Pawel Solyga <br/>
-* Notes taken by:* Sverre Rabbelier <br/>
-
-  # Recollection of last week's work
-  # GSoC Student Status Update
-  # Task Queue API usage examples
-  # New Melange release
-  # Tasks assignment for the upcoming week
-  # Round of questions
-
-=== Meeting Notes 20 Jul 2009 ===
-
-	* Absent: Leslie, Madhu, Mario
-	* Pawel did not have much time
-	* Worked on nag mails with Lennard
-	* Will work on file model this time
-	* Sverre fixed tests
-	* Did code review
-	* Sverre will try to be more responsive to our students
-	* Daniel mostly worked on the backend side of the statistic module (more generic)
-	* Adding new statistics will need little to none code changes (see blog)
-	* Almost all (backend) goals will be achieved this week
-	* Daniel will try to synchronize with Mario
-	* James just received a code review
-	* Next step is an email notification (including access and preference check)
-	* Blog post from James will follow soon
-	* Good news, ApplicationError 1 should be history
-	* New module for tasks committed by Lennard
-	* No new release yet because there were only a few bug/style fixes
-	* Release postphoned till we have something substantial to push
-	* James will try to get the survey stuff ready (wrt final survey)
-	* Sverre will have a meeting with James to discuss things
-
-== 13 Jul 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Pawel Solyga <br/>
-
-  # Missing notes from 7th of July
-  # Recollection of last week's work
-  # Survey improvements before Final Evaluation
-  # Exporting Survey Answers (and other files?)
-  # Survey Processing update
-  # GSoC Student Status Update
-  # New Melange release
-  # Tasks assignment for the upcoming week
-  # Round of questions
-
-=== Meeting Notes 13 Jul 2009 ===
-
-Missing notes from 7th of July
-  * Leslie will post notes soon
-  
-Recollection of last week's work
-  * Lennie was working on nag emails and automatic evaluation of surveys,
-  * Sverre and Pawel had a meeting about Statistics Project final goals,
-  * Pawel was been working on new org propery in ProjectSurveyRecord and GradingProjectSurveyRecord and remote_api function for setting that property in all entities, also worked on possible csv export solutions for Survey results, code reviews, fixing GSoC mentors/students accounts on socghop
-
-Survey improvements before Final Evaluation
-  * Org admins should be able to see which students and mentors filled in and didn't fill in the survey,
-  * Org admins should be able to see survey content for each student and mentor,
-  * this should be easier to achieve with new org property in ProjectSurveyRecord and GradingProjectSurveyRecord
-  
-Exporting Survey Answers
-  * Mario suggested to look at http://jquery.tiddlywiki.org/twFile.html,
-  * Sverre suggested to use document.write,
-  * Pawel explained how Task Queue API can be used to create files up to 10 Mb of size and suggested new File model for that,
-  * CSV export of all StudentProjects with pass/fail column is needed for GOSPO team to determine who to pay midterm money (Pawel will work on that)
-  
-Survey Processing update
-  * we are almost there,
-  * the tasks needed for that are ready and committed to the repository,
-  * Lennie said he needs one more day to test it and run it on socghop
-
-GSoC Student Status Update
-  * Madhusudan posted a blog post about the progress,
-  * Daniel posted a blog post about the progress,
-  * Mario and James will blog post about the progress soon,
-  * Pawel will review the Tags patch,
-  * Daniel/Pawel will talk about KML generation using new File storing mechanism,
-  * Mario and Daniel are happy with Stats project final goals,
-  * Mario is busy with exam this and next week (so work time is limited),
-  * Google Chart API will be used to generate static images in Stats project,
-  * Daniel has some problems with creating patches in Mercurial (Pawel can assist),
-  * James met with Sverre this weekend to discuss News Feed module
-  
-New Melange release
-  * Sverre did a release this week,
-  * Pawel will do a release at the end of the week,
-  * Lennie will do release today and probably tomorrow with new features needed for Surveys
-
-Tasks assignment for the upcoming week
-  * Pawel will be working on new File model and module to save files using tasks
-  * Pawel will work on StudentProject csv export using remote api
-  * Lennie will be working on Surveys/Student Project update, 
-  * Lennie will send Leslie the report who didn't fill in the survey yet,
-  * Sverre will fix broken tests,
-  * GSoC students will continue to work on their projects :-)
-  * Next week lets work on unique user ids support, this should be put on agenda,
-  * James will work on the view for Org admins to see ProjectSurveyRecords and GradingSurveyRecords,
-  * James will finish Issue 653 (they will update the issue Owner),
-  * Pawel suggested that we should show "Survey saved." and he will create an issue for that,
-  * Mario will work on Issue 655
-
-
-== 7 Jul 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Leslie Hawthorn? <br/>
-
-  # Recollection of last week's work
-  # GSoC Surveys TODO's
-  # GSoC Student Status Update, are you ready for reviews?!?
-  # New Melange release
-  # Someone named Ajaksu?
-  # Tasks assignment for the upcoming week
-  # Round of questions
-
-=== Meeting Notes 7 Jul 2009 ===
-TBD
-
-News Feed: 
- * Module will be posted for code review on July 7th.
- * Demo will be ready on July 7th, on http://jamstage.appspot.com
- * Going to talk to Daniel Hans (and use the new Tasks wiki page) for Tasks integration.
- * Note: let James know if you have any new newsfeed feature requests
-
-== 29 Jun 2009 Team Conference Call Agenda == 
-
-* Chaired by:* Pawel Solyga<br/>
-* Notes taken by:* Lennard de Rijk<br/>
-
-  # Recollection of last week's work
-  # GSoC Surveys Battle plan
-  # GSoC Student Status Update
-  # New Melange release
-  # Tasks assignment for the upcoming week
-
-=== Meeting Notes 29 Jun 2009 ===
-
-Meeting took place on IRC due to technical difficulties with skype.<br/>
-
-* Attendees:* Daniel Diniz, Daniel Hans, James Levy, Lennard de Rijk, Leslie Hawthorn, Madhusudan C.S., Mario Ferraro , Pawel Solyga, Sverre Rabellier
-
-The logs start here: http://www.thousandparsec.net/~irc/logm/%23melange.2009-06-29.log.html#t2009-06-29T15:12:04 <br/>
-The logs end here: http://www.thousandparsec.net/~irc/logm/%23melange.2009-06-29.log.html#t2009-06-29T16:25:48 <br/>
-
-Survey TODO list:
-  * Clean up Survey view main module (Ajaksu, 24h)
-  * Make sure creation for Grading and ProjectSurvey work (Lennard, 48h)
-  * Show view should only show the survey, take view needs to be added to take a survey. (James, reviewed by Sverre, 24h)
-  * Project and Grading surveys need to be administered through the new take view (Lennard)
-  * Results view needs to be introduced to list all results for one survey. URL pattern including %(key_fields) should do the trick. Read-access only? (None)
-  * Fixing layout(CSS) and JS issues (Mario)
-  * Create access check for taking a survey similair to Documents (James and Sverre, 48h)
-  * Code Reviews (Pawel, throughout the week)
-  * Code Testing + reporting failing/missing functionality (Pawel, throughout the Week)
-
-Pawel will be given a more specific task within a few days when the code has cleared up.
-
-Availability upcoming week: <br/>
-  * Sverre 2h/day
-  * Pawel 4h/day till Friday
-  * Lennard 8h/day from Thursday, sporadic untill Wednesday
-  * James ?
-  * Ajaksu ?
-
-Next release will be cut by Sverre Rabbelier during the Weekend if he deems a revision fit enough for it. Will update the list with his decision.
-
-GSoC Students, on target updates can be found on http://melange-dev.blogspot.com/
-
-== 22 Jun 2009 Team Conference Call Notes == 
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Leslie Hawthorn<br/>
-* Attendees:* Daniel Diniz, Daniel Hans, James Levy, Lennard de Rijk, Leslie Hawthorn, Madhusudan C.S., Mario Ferraro , Pawel Solyga
-
-Round the Room (updates from the last week):
-  * Pawel: updating to Django 1.0, will cut a new release on Friday
-  * Lennard: cut new release this week, fixed issues
-  * James Levy: been working on surveys with Daniel Diniz, see mailing list discussion with James Crook et. al on models
-    * most features needed for midterm surveys complete, update required to make pass/fail question activate automatically vs. admin intervention
-    * more testing needed
-    * working on nag notification emails as described in [http://code.google.com/p/soc/issues/detail?id=639 Issue 639]
-  * James also some issues/work for review on newsfeeds but surveys taking priority
-  * Merio: having meetings and posting notes to the dev list, keeping notes on to do's in the issue tracker, working on integrated test suite and adding exclusion example
-  * Daniel: working on backend of statistics module and working on more sophisticated stats where we do not have pre-determined outcomes (e.g. % of students seeking a PhD degree vs. % of students who are attending the University of Delft), also add in functionality for create/delete/list
-  * Madhu has made it possible to create a GHOP program, all features as described on the wiki page are now implementable but in progress, we have a task quota per org, can create tasks, views of assigned slots but is not using tasks API
-  * Open question: do we need another student model for GHOP?
-  * LH to look for "trusted testers" of midterm survey functionality
- 
-General Point about Surveys: 
-
-In an ideal world:
-  * there is a checkbox so that students can share their surveys with the mentors
-  * mentors can share their surveys with their students
-In the real world:
-  * Org admins should have access to all surveys for their org. 
-  * Program admins should have access to all surveys for a given program.
-
-== 22 Jun 2009 Team Conference Call Agenda == 
-
-  # Recollection of last week's work
-  # GSoC Surveys status update/discussion
-  # GSoC Student Status Update
-  # GSoC Map on organization home page
-  # New Melange release
-  # Changes within Melange (New Project Lead)
-  # Tasks assignment for the upcoming week
-
-== 16 June 2009 Team Conference Call ==
-
-=== Call Agenda ===
-
-* Chaired by:* Lennard de Rijk<br/>
-* Notes taken by:* Sverre<br/>
-* Attendee's:* Pawel, Lennard, Sverre, Merio, (Late: Ajaksu, Daniel, James)<br/>
-* Absents:* Leslie(Meeting), Dan Bentley(Work), Daniel Hans, Madhusudan(Exams)<br/>
-
-  # Recollection of last week's work
-  # GSoC Surveys status update/discussion
-  # Document-like per entity rights dicussion in repsonse to mail from James Crook (http://groups.google.com/group/melange-soc-dev/browse_thread/thread/7db2f2e52c23fdb0)
-  # GSoC Student Status Update
-  # New Melange release
-  # Tasks assignment for the upcoming week
-
-=== Call Notes ===
-
- # Biggest change is fix for broken student page (ninja release)
- # Pawel was at WWDC
- # Sverre completed bachelor project
- # Slow week, not much change
- # Pawel was concerned that Document Access control might not work for surveys, however the three different kinds of access currently available for surveys (read, write, submit) will cover the necessary access control requirements.
- # Pawel will reply to James Crook's access control mail
- # Mario went to a conference (which was great)
- # Daniel joined the call
- # Mario met James and they produced an architecture for the Python end to handle customised statistics
- # Mario met up on IRC today with Daniel and got working on merging their code
- # Plan for this week is (for Mario) to start on python code (might need some help)
- # Mario and Daniel will have regular daily IRC meetings starting from today (a quick summary will be posted to the list/wiki)
- # James joined the call
- # Mario will be happy with his progress once his code is merged and he has more python done
- # James made some good progress with newsfeed but some things have come up (mostly access related)
- # James is also working on surveys a lot because they need to be done soon
- # PubSub would be interesting but low priority (post mid-term)
- # Surveys is well on it's way to being done (since James is taking on multiple students per mentor part)
- # Ajaksu is fixing small bugs and layout related things
- # Leslie will give some feedback on the surveys
- # Before the weekend the surveys should be feature complete
- # Ajaksu will start submitting patches for the stable parts of surveys
- # No release because there were no changes after the ninja release
- # Lennard will be doing the release this weekend on Sunday, hopefully incorperating code from Surveys
- # Lennard is working on his report for bachelor thesis, so he will be busy for the next 2.5 weeks still
- # He will still try to review as much code as possible and get the surveys bug free
- # Pawel is going through some issues in the tracker that are assigned to him
- # He will also go over the survey code and test it if possible
- # Mario and Pawel will also catch up and get the code reviewed
- # We do not have to wait to write code for the Task API
- # Sverre will be off the map till next Monday but will be reading his mail and on GTalk on his G2 (Ion)
- # Google I/O > WWDC (because: free phone!)
- # Keep up the good work!
- # Sverre will mail Dan Bentley to make an appointment to get up to speed with Hg
-
-== 8 June 2009 Team Conference Call ==
-
-=== Call Agenda ===
-Short update on work progress of the development team and specifically the students.
-
-=== Call Notes ===
-Attendees: Sverre Rabbelier, Dan Bentley, Lennard de Rijk, Mario Ferraro, Madhusudan C.S.
-
-Absents:
-Pawel Solyga, Daniel Hans, James Levy
-
-* Developers *
-Sverre Rabbelier:
-  * Busy with his final bachelor thesis
-  * Tweaked the module design to facilitate the problems that Madhusudan ran into regarding circular imports. ([http://code.google.com/p/soc/source/detail?r=4f87bab3c r4f87bab3c])
-  * Fixed error pages to show HTML output directly instead of redirecting to static page. ([http://code.google.com/p/soc/source/detail?r=7fe19ebfe0 r7fe19ebfe0])
-
-Dan Bentley:
-  * Wants to do patch reviews! Sverre will redirect some of his work to him.
-  * Sverre will help him out with "Hg 101"
-
-Lennard de Rijk:
-  * Fixed Issue 271 and Issue 630.
-  * Has reviewed several patches of Madhusudan regarding his GSoC project.
-  * Also busy with final bachelor thesis.
-
-*GSoC Students*
-
-Daniel Hans:
-  * Has not been much visible communication.
-  * Merio received mail to discuss the JS layer with him. They decided to meet up on IRC for this, no reaction since 6th of June.
-
-James Levy:
-  * Working on newsfeed framework regarding news collection. Trouble regarding documents using temporary work arround for missing scope values. Lennard suggest that this be fixed (Issue 637).
-
-Mario Ferraro:
-  * Update on http://groups.google.com/group/melange-soc-dev/browse_thread/thread/3d5d2d38f95365d8
-  * Working on basic JS framework for statistics.
-  * The JS skeleton is in place needs about 1-2 days more work.
-  * Added JSUnit framework and sample testcases to his repository.
-  * Wiki has been updated about the use of the tools that have been added to his repository.
-  * Will be AFK for the next 3 days due to attending a conference.
-  * The skeleton JS framework needs to be finished before Mario can attempt Python code, further framework discussions should happen this week. Python should follow soon after.
-
-Madhusudan C.S.:
-  * Update on http://melange-dev.blogspot.com/
-  * Working on several views. Program View patch has been submitted and will be updated.
-  * Will take a break next week for final bachelor exams, from 12th of June till 19th of June. Will post summary before leaving on the 12th. After exams it's gonna be 120% `^_^`.
-
-*Additional*
-Sverre will mail Daniel and James about conference call and summary.
-Lennard will post notes hurray!
-Feel the love...?
-
-
-
-== 1 June 2009 Team Conference Call ==
-
-=== Call Notes ===
-  * All students need to publish status updates on the [http://melange-dev.blogspot.com Melange Developer Blog] by tomorrow
-    * It's fine to post a link to posts you've already written for your personal blog.
-  * Pawel has reviewed Zachary Voase's Paver build script, needs to do some style fixes to it, is also waiting for some feedback from Zachary but overall script looks good
-    
-  * Developer To Do's This Week
-    * Sverre will be working on reviewing work on Statistics Module and Surveys this week, as well as James Levy's forthcoming work on News Feeds. Sverre will be doing a release on Wednesday, gated by Pawel fixing Maps bugs (see next point)
-    * Pawel is working on fixing the bug in our patch to display maps on organization pages, will be debugged/fixed by Wednesday or front end code will be backed out so Sverre can do a release
-    * Lennard is busy through 1 July so will be focusing exclusively on mentoring Madhusudan
-
-  * GSOC Developer To Do's This Week
-    * James Levy is working on News Feeds, will update the wiki page spec and ask for feedback on the developers list once page is updated; James is working on surveys with Ajaksu and learning how to use Mercurial (aka hg); Sverre available to help with hg questions
-    * Madhusudan wonders if taggable will be checked in today. Pawel sez yes, within 2 hours of call; Pawel is committing an extension that allows different tagging models and will post an email to the developers list explaining how to use taggable.
-    * Mario will be working on JavaSscript stuff some more for the next 2-3 days. Will be moving more onto the Python coding side after that.
-    * Daniel needs his code reviewed before he can make progress. Sverre will try to get to it by Wednesday, Pawel has committed to reviewing by Wednesday.
-
-  * Madhusudan wants to know if he should put his code into soc.modules now or later; Sverre says _sooner_ so we can find any errors/problems early. (Release Early, Release Often! :)
-  * James Levy wonders where URL patterns went. Sverre is sending an email to the dev list with details. Short answer:  soc.modules.soc_core.callback.
-  
-
-=== Call Agenda ===
-
-  # GSoC Status update blog posts
-  # Paver build script discussion
-  # Tasks assignment for the upcoming week
-  # New Melange release
-
-
-== 18 May 2009 Team Conference Call ==
-
-Attendees: Dan Bentley, Madhusudan CS, Mario Ferraro, James Levy, Sverre Rabbelier, Lennard de Rijk 
-
-Absent: Daniel Hans, Leslie Hawthorn
-
-=== Call Notes ===
-
-*Summary*
-  # Unique user ID's will be fixed this week by Pawel
-  # All GSoC students will be given Project Membership Access. Their patches will still need approval before they may be pushed. The main reason for giving access is that issues can be assigned to them.
-  # GSoC Students will need to get their own AppEngine instance so that they can push their own code. The students will be given developer access on melange-dev aswell so they can experience what's going on. 
-  # Lennard unfortuneatly will not complete the assigned test due to other project and university obligations, Sverre is helping out the students with writing test as expected and also working on refactoring Melange. James is working on surveys, Merio is working on seed_db and Madhu has just submitted a patch for adding Organization logic tests.
-  # Survey patch will be rebased shortly after the meeting and will then be reviewed by Sverre. According to James the surveys are on track for a solid test run at the end of the week (24th of May).
-  # The all-hands meeting agenda will be posted on the discussion group by Pawel. It will contain references to all the issues in the tracker that need to be discussed. Other items can be suggested/added as well.
-  # The new release/development progress was in need of discussion thanks to the move to HG. Making multiple heads seemed to be favored above branching. Augie will be mailed by Sverre for information.
-  # Dan's patch is not complete yet, however it will not be worked on before the all-hands May meeting so that we might discuss any other viable solutions
-  # The ajaxy list view will be discussed during the all-hand May meeting. James and Merio have expressed interest in it's design they will be added to the meeting when/if that's possible.
-  # Taggable seems a favorite, Lennard still needs to take a good look at the systems. This will be discussed further during the all-hands May meeting.
-  # James is working on surveys expected to have something well-testable by the end of the week. Merio is working with Pawel on seed_db something should be up and running by the end of the week. Madhusudan has just submitted a patch including tests also he's fleshing out the wiki pages regarding GHOP. Our students seem to be happy but they were quiet in Skype :D.
-
-*All-hands May*
-
-Items certainly on the agenda are:
-  * GSoC Survery progress, do we feel ready for it?
-  * Plan to make Melange modulair.
-  * Ajaxy list, experiments will be done by Pawel that week. (In combination with the 1000 entity fix)
-  * Discussion about which system to use for tags, Taggable seems a favorite. 
-
-*Misc*
-  * Seed_db can be called by using the devvin as version name.
-  * Daniel is working on GSD so that he can fully focus on GSoC from the 23rd.
-  * James will be in SF aswell during Google I/O
-
-*Action Items (Deadline)*
-  * Pawel will submit fix for unique User ID's (24th of May)
-  * Pawel will send an email about commit access for our students (18th of May)
-  * Pawel will send an email to open the discussion about the all-hand agenda (18th of May)
-  * James will rebase his survery work on Sverre's Git repo (18th of May)
-  * Sverre will mail Augie if the new release process suits a HG-controlled project (18th of May)
-  * Lennard will look at the different tagging systems (24th of May)
-
-=== Call Agenda ===
-
-  # Unique user ID's discussion (when we plan to implement that)
-  # Commit access for GSoC students
-  # Developer access to testing instances for GSoC students
-  # Testing month status update
-  # Surveys module patch review
-  # Agenda for all-hands meeting
-  # New release and Melange Development Process using hg (branches, tags)
-  # Update from Dan about his work on 1000 limitation patch
-  # ajaxy list view discussion
-  # Tags support
-  # GSoC Community Bonding period status update
-
-
-== 4 May 2009 Team Conference Call ==
-
-Attendees: Dan Bentley, Madhusudan CS, Mario Ferraro, Daniel Hans, Leslie Hawthorn, Sverre Rabbelier, Lennard de Rijk 
-
-=== Call Notes ===
-
-  * 1000 entities fix:
-    * Dan working on learning Hg
-    * Discussion of indexing - specific index for each query, noted exploding indexes problem
-    * Timestamps vs. Names are confusing for users
-    * Team needs to sync up regarding Ajaxy List views
-  * Dan is checking on application errors when sending out mass emails (e..g. when students are accepted)
-  * Testing Meeting recap - notes will be sent out (Pawel)
-    * Need a getting started testing page to document the common challenges when doing testing for Melange
-      * diones on IRC created a document on getting pylint working in Eclipse, should be pointed to from this wiki page
-  * Summer of Coder check in
-    * Madhu is comfortable getting started
-    * Daniel has some questions, emailed them to Sverre
-    * Mario is comfortable working on the JavaScript side of Melange, working on getting up to speed in other areas of the code base
-    * Sverre had first meeting with James Levy and will publish pointer to logs
-    * Pawel will follow up with Daniel and Mario early this week to provide guidance on stats module
-  * Team All Hands Meeting at end of May: working session topics
-    * Discuss refactoring Melange to better support multiple programs
-    * Summer of Code check-in
-    * Usability: how will we get help in this area, options for UI
-    * Ajaxy List View and Survey Modules update
-  * Dan will check his schedule to see if he can being all hands meeting on 24 May
-  * Roadmap Owners
-    * Sverre: Survey support, Testing, feed support
-      * private feeds on dashboards are a good point for all Summer of Code students to collaborate
-    * Lennie: (on list) clubs support, GHOP items
-   * Lots of patches have come in - Dan Bentley is available to help with patch reviews
-
-=== Call Agenda ===
-
-  * 1000 entities fix (need Dan Bentley for this conversation)
-  * Testing Meeting Review (quick sync - do we feel good about current plan? follow up meeting needed / planned?)
-  * Summer of Coder project update
-    * James & Madhusudan have had initial meetings, Daniel and Merio status updates
-  * Team All Hands Meeting in 3 weeks: goals, agenda, planning
-  * Roadmap needs granular owners - [http://groups.google.com/group/melange-soc-dev/browse_thread/thread/41a220951ce2c8bf/677cef96e5700953#677cef96e5700953 discussion]?
-  * Outstanding Patch Reviews
-    # [http://code.google.com/p/soc/issues/detail?id=172 Issue 172] - Date picker (blocked on 263)
-    # [http://code.google.com/p/soc/issues/detail?id=263 Issue 263] - IE tooltips
-    # [http://code.google.com/p/soc/issues/detail?id=227 Issue 227] - JS help windows
-    # [http://code.google.com/p/soc/issues/detail?id=505 Issue 505] - Make student proposal public check box option (patch needs work - what's status?)
-    # [http://code.google.com/p/soc/issues/detail?id=538 Issue 538] - Subscriptions to proposals
-    # [http://code.google.com/p/soc/issues/detail?id=569 Issue 569] - Clicking cancel returns to previous view (patch just received)
-    # Latest patches from Matthew Wilkes (came in yesterday)
-
-
-== 28 April 2009 Google Summer of Coder Intro Meeting ==
-
-=== Meeting Logs ===
-
-Meetings starts here
-http://www.thousandparsec.com/~irc/logm/%23melange.2009-04-28.log.html#t2009-04-28T14:12:55
-
-and ends here
-http://www.thousandparsec.com/~irc/logm/%23melange.2009-04-28.log.html#t2009-04-28T15:11:00
-
-== 28 April 2009 Google Summer of Coder Intro Meeting Agenda ==
-
-18:00 UTC in #melange on Freenode
-
-  * Students will be asked to introduce themselves to the community and provide a brief overview of their projects.
-  * Mentors will briefly introduce themselves too and we will also let students know who is co-mentoring each project
-  * We will discuss expectations for community bonding period, coding period, etc.; things like status reports, help with testing, etc.
-  * We will discuss GSoC students participation in Melange Weekly Monday Conference calls
-  * We will ask GSoC students whether they can participate in Wednesday Testing Meeting on #melange
-  * Following this meeting, mentors should reach out to their student via the dev list to schedule a more in-depth first meeting. If anyone wants to drop to watch the IRC meeting, they are welcome to do so, hence scheduling on the dev list.
-
-
-== 27 April 2009 Team Meeting ==
-
-=== Call Notes ===
-
-  * Tabled for next meeting:
-    * 1000 entities fix (need Dan Bentley for this conversation)
-    * Where to get help on thinking about security
-
-Action Item: LH to get Dan's Skype ID to Pawel before next meeting.
-
-  * We will be tagging issues with DueBy-MONTH-DAY-YEAR and we will never discuss this topic again since everyone is tired of it by now. Fortunately, we've now got it right.
-
-  * We will use a tag with format ReviewBy-MONTH-DAY-YEAR to tag issues in the tracker that have patches attached so casual contributors know when they can expect their patches to be reviewed.
-
-  * Discussion of more granular owners/leads for the tasks listed on the current roadmap will happen on the [http://groups.google.com/group/melange-soc-dev developers list]. Assigning owners and getting these areas fleshed out needs to happen sooner rather than later.
-
-Action Item: LH will start this thread.
-
-  * We will be spending the next month focusing on testing. An announcement will be sent to the dev list so any users/casual contributors know what our priorities are for the next month.
-
-Action Item: Pawel will send announcement to the list. (done)
-
-  * We want community help with testing! Specifically we need:
-    * People to help write tests. (Our Summer of Code students will be working on this as part of their onboarding/community bonding.)
-    * We would like someone who knows Python to add the Python coverage module to Melange. We will bribe with t-shirts or chocolates or a fine glass of iced tea.
-    * Community members who would like to help with writing tests should talk to one of the developers on #melange to discuss ideas or send email to the [http://groups.google.com/group/melange-soc-dev dev list].
-  * We currently have 40 tests ready, but no other test coverage. We need to give people a pointer to these tests. 
-  * We will track tests in progress in the issue tracker. Issues for tests should be labeled as "Tests" for ease of tracking.
-  * We will have a kick off meeting for the month of Melange testing on Wednesday, 29 April 2009 at 18:00 UTC in #melange.
-
-Action Item: Pawel will schedule testing meeting. (done - [http://groups.google.com/group/melange-soc-dev/browse_thread/thread/ca435880649b7c0 announced on dev list])
-
-  * Summer of Coder meeting tomorrow in #melange at [http://www.timeanddate.com/worldclock/meetingdetails.html?year=2009&month=4&day=28&hour=18&min=0&sec=0&p1=215&p2=16&p3=224 18:00 UTC].
-    * Students will be asked to introduce themselves to the community and provide a brief overview of their projects.
-    * We will discuss expectations for community bonding period, coding period, etc.; things like status reports, help with testing, etc.
-    * Following this meeting, mentors should reach out to their student via the [http://groups.google.com/group/melange-soc-dev dev list] to schedule a more in-depth first meeting. If anyone wants to drop to watch the IRC meeting, they are welcome to do so, hence scheduling on the dev list.
-
-Action Item: Pawel will create agenda for tomorrow's first student meeting. (LH humbly suggests it live on the wiki.) Pawel will also send a welcome email to all students with some "news you can use" following tomorrow's meeting.
-
-Action Item: LH will call James Levy to make sure he knows he was accepted. (done - hi James!)
-
-  * We want to get *a lot* better about reviewing and committing patches. Right now we are not doing this well enough. New strategy:
-    # We quickly sync within 24 hours about who is going to review a patch.
-    # All patches will be ack'ed within 48 hours, which means that we say at least "hey thanks we got your patch." Person ack'ing the patch is the person who will review it.
-    # Patch will be reviewed *and* feedback sent to submitter *and* relevant issue in the tracker updated within 5 days (read: 120 hours).
-    # If a patch does not meet our style guidelines, it will be returned to the contributor with a request to fix the style issues.
-    # If patch passes review, it will be committed. If something breaks, the person committing the patch is taking responsibility to babysit the build.
-    # If you take on reviewing a patch and you cannot get to reviewing it within 5 days of ack, it is your responsibility to let the contributor know about the delay *and* update the relevant issue in the tracker.
-    # If you take on responsibility for reviewing a patch and cannot get to it within 5 days of ack, it is your responsibility to ask for help in getting it reviewed. It is entirely plausible no one is going to have time to help, but you should certainly ask for it.
-    # Each mentor is responsible for reviewing his student's patches, following same process as above.
-
-Action Item: All committers will follow process as detailed above.
-
-Action Item: Pawel will review alll outstanding issues noted in the agenda, below,  by end of day Friday, 1 May. 
-
-Action Item: LH will go through the issue tracker to make sure that no other outstanding patches are hiding in plain sight. Any outstanding reviews will be assigned to Pawel for action by Friday.
-
-   * The [http://code.google.com/p/soc/wiki/GHOP GHOP specs] wiki page needs to be reviewed. We all do not want to have yet another meeting to discuss it unless we really need to have yet another meeting.
-
-Action Item: LH will review the document after posting notes from today's conference call and provide any needed comments/edits, followed by a ping to the [http://groups.google.com/group/melange-soc-dev dev list] that this review has been done.
-
-Action Item: All interested folks can take a look at the page and discuss further on the [http://groups.google.com/group/melange-soc-dev dev list]. If we need to schedule yet another meeting, LH will schedule it.
-
-== 27 April 2009 Team Meeting Agenda ==
-  * 1000 entities fix
-    # related issue http://code.google.com/p/soc/issues/detail?id=357
-  * Assigning granular owners to items in Roadmap
-    # Other roadmap discussion items?
-  * Month of Testing
-    # Formal announcement
-    # Who is handling what test creation
-    # How can our Summer of Code students help here?
-    # Related Issue: http://code.google.com/p/soc/issues/detail?id=5
-  * Summer of Coder Meeting Preview - Pawel?
-  * Patch Reviews
-    # Seems like patches are waiting a long time for review. How can we fix this?
-      # Related: http://groups.google.com/group/melange-soc-dev/browse_thread/thread/e89d8efaf903558d (7 days to ack)
-      # http://code.google.com/p/soc/issues/detail?id=263 (submitted 28 Feb, still not committed?)
-      # http://code.google.com/p/soc/issues/detail?id=172 (submitted 30 Jan, still not committed?)
-      # http://groups.google.com/group/melange-soc-dev/browse_thread/thread/44523561cd61e96/2901360614f3b5de (submitted 18 Mar, still not committed?)
-  * GHOP Features/Needs Data Dump Meeting
-    # Lots of items on wiki page, need higher level overview for team - when?
-  * Wiki Discussion for Issues
-    # WikiDiscuss Label
-  * Security Help
-    # James Crook mentioned on list getting help from a security related org in Summer of Code. Any preference who we approach?
-
-
-== 20 April 2009 Team Meeting ==
-
-=== Call Notes ===
-  * Everyone agreed that the current roadmap document (currently only available privately) is what we should be working from to flesh out activities for the next 9 months. Interested parties who are not project owners/members are welcome and encouraged to add their thoughts as comments to the roadmap.
-
-Action Items:
- 
-Pawel will flesh out roadmap somewhat and publish on Melange project wiki. 
-
-All should review roadmap when published in preparation for 27 April team conference call.
-
-LH will add roadmap review to 27 April team call agenda.
-
-  * We will add a due date for issues to each issue in the issue tracker and we can discuss issues in more detail on the wiki. James Crook is a good resource for talking to folks about effectively fleshing out design from various user issues.
-
-Action Items:
-
-LH will begin assigning due dates, which are of course negotiable, during weekly bug triage. [http://groups.google.com/group/melange-soc-dev/browse_thread/thread/22b6028b45cba979# Related mailing list thread].
-
-  * We have on security issue that has been on file for a month. While users can do no harm even if they exploit the vulnerability, we agreed that we need to be more on top of security issues. Resolve within 2 days, even if that resolution is adding a note along hte lines of "We will fix this but cannot get to it right now. Delay ok'ed because users can do no harm" to the relevant security issue in the tracker.
-
-Action Items:
-
-The Melange team could use some help with security issues. LH will see if it is possible to get help from the security team at Google. (Unlikely, but I will ask.)
-
-  * Caching stuff is a known issue. We need to update the documentation to reflect that users can expect behavior such as is detaied in [http://code.google.com/p/soc/issues/detail?id=473 Issue 473]
-
-Action Items:
-
-LH will update the documentation with this information and solicit technical review of the explanation, update relevant issues with pointer to the documentation.
-
-(Note: If anyone would like to volunteer to take this action item, please do.)
-
-  * Community bonding period (e.g. until 23 May) will be focused on onboarding Melange's Summer of Code students and creating tests for Melange. Patches will be reviewed, but no work on other features should be expected by the community during this time. Melange Summer of Code students will be asked to help with writing of these tests as part of the onboarding process.
-
-  * Rather than updating documentation on error messages, we agree that error messages should simply be more useful. This topic tabled until our all hands meeting in May.
-
-
-=== 20 April 2009 Team Meeting Agenda ===
-  # Roadmap Discussion 
-    * Ensure everyone has agreed to current roadmap
-    * Discuss any additional priorities
-    * Discuss timing/owners for fleshed out roadmap publication (27 April current target)
-  # Student proposals after the deadline
-  # Bug Triage
-    * Do issues assigned to you need to be assigned elsewhere? If so, who?
-    * How to accurately assess when we expect bugs to be closed.
-  # Security Bugs
-    * Discuss and agree on timing for closure of *all* security related issues. 
-    * Related issue: http://code.google.com/p/soc/issues/detail?id=448
-  # Caching Issues
-    * Several open issues related to page refresh times - document as Known Issue with GAE and call it a day or no?
-    * Sample issue: http://code.google.com/p/soc/issues/detail?id=473
-  # Test Suite
-    * Update from Sverre on access to machines running buildbot at OSU OSL
-    * Plan to create tests. Timing? Owners? (This may be covered in roadmap discussion.)
-  # Documenting Error Messages
-    * This should be done. Timing? Owner?
-  # Any Other Business
-
-== 16 April 2009 - Roadmap Review Meeting ==
-  * The roadmap discussed in these notes will be published on 20 April and when it is published it will be linked to here.
-  * [http://groups.google.com/group/melange-soc-dev/browse_thread/thread/b62a064390f0de17 Call Notes]
\ No newline at end of file
