Tel Aviv University Blavatanik School of Computer Science Google Workshop for Web Technologies, 2009-2010 BIRTHDAY+ Eugene Rozenberg Olga Vingurt Irena Letuchaya Jenia Zilber What’s Birthday+ all about(1) Share your events with your friends. Share your wish list with your friends. Event reminder. If you are looking for a present for your friend and don’t know what to buy, just look in the friend’s wish list. What’s Birthday+ all about(2) Group Gift - participation management ◦ If the present is cheap, you can buy it alone. ◦ If the present is valued, you want to participate partly in selected present with other friends. Look & Feel (1) Events tab ◦ Display future events in a list ◦ Manage your own events ◦ If you click on a friend’s event, you will see his wish list Wish list tab ◦ Manage your wish list Look & Feel (2) I buy tab ◦ Presents I chose to give (alone and as a group member) ◦ You can cancel if you don’t want to give ◦ You can see updates for the item you’re buying as a group ◦ Chat with your group Existing Features View your friends events Manage your events Manage your wish list Reserve and buy a gift for a friend Architecture iGoogle gadget container for the application GWT OpenSocial for retrieving friends AppEngine + BigTable (database + site repository) GQL (work with BigTable) RPC Calls Team work Each member have separate area of expertise ◦ Server side: server logic, GQL, RPC (1 members) ◦ Client side: GWT, Open Social, RPC (3 members) ◦ Build class client/server architecture (2 members) Problems(1) GWT Gadget has huge bug with RPC Calls structure ◦ RemoteServiceProxy does a POST to send data and iGoogle container seems not to support POST anymore. Solution ◦ Make POST request with OpenSocial makeRequest. Problems(2) DAL objects couldn't serialize for GWT ◦ So we had to separate business object to DB objects and data transfer objects. Problems(3) Big Table problem ◦ We have a base class and a child class. ◦ Persist child items only. ◦ Members of base class wasn't saved in the database. ◦ We need two classes, one of them aggregated the other. ◦ The primary key that was suitable for the main class was string. But it didn't allow the aggregated classes to be connected to father. Solution ◦ removing inheritance and partially code duplication ◦ Change primary key to be of type "Key“ Problems(3) Google's JDOQL ◦ Implementation (datanucleous) isn't complaint to a standard. We had issues with parameters passing that work different than in standard. Problems(4) Running in Hosted mode during development - debug as Gadget o Can’t debug in OpenSocial container iGoogle. Solution o Haven't found a solution yet Next Features Improve GUI (work with CSS) Manage a group of friends that want to buy a present together for specific event Calendar reminders for events (AppEngine Google Calendar API) Close group email reminder Work with CRON (remove unclosed groups from database after the event expired) Talkbacks Nice to have features Make virtual money transfer to person that will buy a group present, using Google Checkout. Import friends’ events from other social networks.