# 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>