User:Johnnorro/GSoC 2012 application

Identity
Name: John Norrington Email: johnnorro@gmail.com Project title: Integrate 'upload from Flickr and Picasa' functionality into UploadWizard

Contact/Working Info
Timezone: BST (UTC+01:00) Typical working hours: Monday - Friday, 9am - 6pm IRC or IM networks/handle(s): johnnorro on Freenode, j.norro on Skype

Project Summary
Photo sharing websites such as Flickr and Picasa have vast quantities of images that are released in the public domain or with attributive licenses. Many of these images would make an excellent addition to Wikimedia Commons.

The purpose of this proposal is to add upload from Flickr and Picasa functionality to the UploadWizard extension. It will maintain the license and metadata information. Furthermore it will permit multiple uploads at once using Picasa albums and Flickr collections and sets, allowing selection, renaming and categorization. This project will also be made extensible by parsing the response from Flickr and Picasa into a common format for use by UploadWizard, this will make the addition of new websites much easier by just adding a parser for their response.

This will benefit Wikimedia by automating a lot of the work in the importing of images that are hosted on photo sharing websites. This will allow contributors to upload many more images, faster.

Required Deliverables

 * Upload a picture from Flickr using UploadWizard, maintaining license and metadata information
 * Upload a picture from Picasa using UploadWizard, maintaining license and metadata information
 * Upload whole/part of a set from Flickr using UploadWizard
 * Upload whole/part of a album from Picasa using UploadWizard

If Time Permits

 * Match MediaWiki categories to Flickr tags
 * Add search functionality for Flickr and Picasa
 * Add other photo-sharing website eg. Photobucket

Project Schedule

 * May 14th: End of university exams
 * May 14th - May 21st: Research developer documentation and APIs before project commencement
 * May 21st: Start coding
 * May 21st - May 23rd: Write scripts to extract photo, license and metadata from Flickr and Picasa
 * Parse XML responses into a common format for use by UploadWizard
 * May 24th - May 25th: Write scripts to convert photo metadata and licenses
 * May 28th - June 6th: Add single image upload from Flickr to UploadWizard with categorization and naming
 * Create HTML elements (form to enter photo id)
 * JavaScript to get image using AJAX and check license
 * Autofill license, title and other metadata
 * PHP to import the image
 * June 7th - June 8th: Extend single upload image to upload from Picasa
 * June 11th - 15th: Write scripts to parse album/collection/set from Picasa/Flickr into a feed
 * Parse XML responses into a common format for use by UploadWizard
 * June 18th - June 28th: Extend UploadWizard to allow upload from multiple files via feed, allow selection, renaming and categorization
 * Extend HTML form to take collection/set/album
 * JavaScript to get images and metadata using AJAX
 * Autofill license, title and other metadata on multiple photos
 * PHP import selected images and store metadata
 * June 29th - July 3rd: Add other photo sharing websites eg. Photobucket
 * July 4th - July 6th: Auto-categorization using tags
 * July 9th - Stop coding new features
 * July 9th - July 13th: Prepare mid-term evaluation
 * July 16th - July 20th: Documentation
 * July 23rd - July 27th: Testing and bugfixing
 * July 30th - Aug 3rd: Pre-deploy review
 * Aug 6th - Aug 10th: Merge with trunk
 * Aug 13th - Aug 20th: Final evaluation

About You
I am in my penultimate year as a Computer Science student at the University of Strathclyde, Glasgow. Over the last three years of my course my coding skills have improved tremendously and I am now confident I can sucessfully deal with the technical challenges involved in a project such as this. I have experience in writing code in many languages including Java, PHP, C and JavaScript. I have completed freelance work for small businesses including the development of an interactive website and a widget for an eBay store, both of which extensively use jQuery. I have also been playing around with functional programming in Haskell and have been finding it a unique and interesting way to solve problems.

I have a passion for doing voluntary work. Over the last three years I have served on the committee of the university skydiving club, including a year at my current position - captain of the club. Working with the committee has helped me to greatly improve my organisation, teamwork, leadership and communication skills. As part of my duties on the committee I have overseen charity events that have raised thousands and I built the current club website with phpBB, Joomla and a few custom modules including a random image generator that uses the Picasa Web Albums API and an event list that uses the Facebook Graph API. Recently I was elected to serve as Media and Communications Officer for the university Sports Union, a position that I accquired due to the previous work that I have put in with the skydiving club.

Getting to work on MediaWiki would mean a lot to me. It would be a summer job that I would enjoy and be truly passionate about. Wikimedia and its various projects have most definitely made an impact on my life. I use Wikipedia to research something almost every day and regularly use other Wikimedia projects and other websites that run a wiki, based on MediaWiki. Over the years I have contributed to numerous articles on various wikis and I would love the chance to work on such a significant project and improve the community that I have become a part of in recent years.

Participation
My usual working hours are 9am-6pm midweek. While I'm working I will be on Freenode as well as contactable via Skype and email. On my non-working hours I am still contactable by email which I am able to respond to fairly quickly (providing I am awake) and on Skype while I am at a desktop.

During coding, if I discover any difficulties that I cannot overcome by reading the documentation or a search on the internet, I intend to then use the vast amount of help and support that is available to me from MediaWiki, including the IRC channel, mailing lists and talking to my mentor. I will be keeping regular contact with my mentor to ensure he or she are kept up to date with the project progression and of any problems that I have encountered. My MediaWiki user page will get a weekly update showing the progress that has been made.

The source code will be available on a GitHub repository which I will be keeping up to date every day of the project. A great benefit of this is that my mentor and others will be able to quickly view the source code that I am working on and view the changes and progress that I have made, for themselves.

Past Open Source Experience
I use a lot of open source software in my day to day business. From desktop programs to web applications such as PhpBB, Joomla and of course, MediaWiki. Over the last few months I have studied a lot of the code of MediaWiki in order help me better learn and understand it, and have submitted two patches in that time. (12021, 29236)

APIs

 * Flickr API
 * Picasa Web Albums Data API

Relevant Work

 * Mass uploading your Flickr photos to Wikimedia Commons
 * Converting Flickr license into Creative Commons
 * Flickr upload bot
 * Permitted Licenses Reference