Page MenuHomePhabricator

Easier categorization of pictures in Upload to Commons Android app
Closed, ResolvedPublic

Description

Proposal for the 'Upload To Commons app: Make categorization easy/reliable' project for the Outreachy Dec '15 - Mar '16 internship.

Profile

Name: Josephine Lim
Email: josephinelim86@gmail.com
IRC or IM networks/handle(s): josephine_l
Web Page / Blog / Microblog / Portfolio: I'm misaochan on GitHub. I've also recently created a blog to document my coding progress and things I've learnt.
Location: New Zealand
Typical working hours: 12:00 - 19:00 and 00:00 - 02:00 (GMT+13)

Synopsis

The Upload to Commons app is an Android app that allows users to easily upload pictures from their mobile device to the Wikimedia Commons database.

This project is aimed at improving the photo categorization functionality of the app. This would make it easier and faster for users to upload photos, as well as produce better-categorized photos (which makes it easier to find and re-use them). It should also reduces the need for the difficult and time-wasting task of guessing appropriate categories for uncategorized pictures taken by other people.

This will be achieved through 2 phases:

Phase 1: App should display nearby categories when user uploads a photo

  • Identify the best strategy/APIs to find nearby categories
  • Extract GPS coordinates from the picture
  • Implement asynchronous calls to the APIs
  • Show resulting categories

Phase 2: Category search should be made more "fuzzy" via approximate string matching

  • Identify common patterns of category search near-misses
  • Search for an API that would allow "fuzzy" search, and use it if available
  • If not available, implement it by simple tricks like capitalization/pluralization

Mentors:

  1. @Niedzielski
  2. @Nicolas_Raoul

Deliverables

KEY DATETASKDELIVERABLE
Before Dec 7Community bonding periodBonding period report. Quick list of URLs
Dec 7 - Dec 13Identify the best strategy/APIs to find Commons categories that are within a certain radius of the specified GPS coordinatesWiki memo: cURL requests that provide the rights categories (30% false positives OK) for all possible use cases and edge cases
Dec 14 - Dec 20Find a library to extract GPS coordinates info from a picture, and implement its useCommits, screenshots
Dec 21 - Dec 27Implement asynchronous calls to the APIs to match an uploaded picture's GPS coordinates with nearby Commons categoriesCommits
Dec 28 - Jan 3Display the resulting categories to the user alongside the "previous categories" that are currently already displayedCommits, screenshots
Jan 4 - Jan 10Cache categories, establishing a short-lived area->categories dictionaryCommits
Jan 11 - Jan 17Manual testing of app, bugfixes, release to Google Play. Announce at various appropriate places to recruit testersRelease. App should display nearby categories after user has uploaded a picture and is selecting its category
Jan 18 - Jan 24Identify common patterns of category search near-misses. Search for an API that would allow "fuzzy" searchMid-term evaluation & report. Wiki memo
Jan 25 - Jan 31Test the APIs found or test alternatives solutions, start implementing if time allowsMemo: test results
Feb 1 - Feb 7Implement the fuzzy searchCommits
Feb 8 - Feb 14Manual testing of 'fuzzy search' functionality in appTest memo. App should display relevant categories if the user makes a typo or searches for 'near misses'
Feb 15 - Feb 21If not disabled in preferences, use GPS to find nearby categories even when coordinates are not embedded in pictures (people might have moved, but it will sometimes be useful).(Optional)
Feb 22 - Feb 28Release to Google Play, final tests and bugfixesRelease. App deployed successfully and works as intended with no major bugs
Feb 29 - Mar 6Update app documentation to reflect new enhancements. Work on other issues listed on GitHub if extra timeEnd-of-program evaluation & wrap-up report. App documentation up to date

Participation

This project does not make use of Gerrit, so my source code will be published regularly on GitHub, via pull requests to the main Android Commons repository that is currently maintained by Nicolas_Raoul (mentor). I have used GitHub in the past and have already used this method to complete my microtasks, so I am reasonably familiar with it.

I plan to communicate progress via short daily reports on Phabricator and longer reports at milestones. Aside from that, I will be on IRC in the MediaWiki-General, #wikimedia-dev, #wikimedia- commons and #wikimedia-mobile channels.

I have started a blog in order to document my work in greater detail as well as the things I've learnt through my work on this project, and will continue to update it throughout the internship.

About you

Education completed:
I was working in a different field before making the decision to go into Computer Science (which was a childhood dream of mine). I graduated with a Graduate Diploma in Science (major: Computer Science) from the University of Canterbury, then graduated with a Postgraduate Diploma in Science (major: Computer Science) from the University of Auckland.

How did you hear about this program?
I first heard about Outreachy from a Women in Computer Science group when I was attending the University of Auckland.

Will you have any other time commitments, such as school work, another job, planned vacation, etc., during the duration of the program?
I have no other time commitments between those dates. If possible I would like to take a couple of days off for Christmas and New Year, and will talk to my mentors about making up the work in other weeks if it is granted.

We advise all candidates eligible to Google Summer of Code and Outreachy to apply for both programs. Are you planning to apply to both programs and, if so, with what organization(s)?
No, no longer a student so not eligible for GSoC.

What drives you? What makes you want to make this the most awesomest wiki enhancement ever? What does making this project happen mean to you?
I got hooked on to Android app development when I made my first app as a University project - it was quite challenging, but also great to know that you made this little piece of software that other people can use. I really like how apps have contributed to changing the scene of software development, in that small groups of indie developers can make a really big difference.

I also really wanted to work for Wikimedia as my Outreachy internship, because I strongly identify with making information accessible to everyone, and have been an avid user of Wikipedia for over a decade. So I posted on a Phabricator task about reviving the Upload to Commons app asking if this could work for an Outreachy project, and some helpful souls linked me to Nicolas. He was very encouraging and helpful in getting me involved with the Upload to Commons project, so I'm hopeful about getting this little app out there and used by more people to populate the Wikimedia Commons repository.

Past experience

Please describe your experience with any other FOSS projects as a user and as a contributor:

  1. Android - I have used an Android phone for several years, and have written an Android app (described in the following section). The customizability and open source nature of Android was a big factor in my choice between an Android vs an iOS phone. I have also contributed to the Upload to Commons Android app, as described in the bugfix section.
  2. Wordpress - I run a hobbyist foodie website that is powered by the Wordpress CMS. I have modified some of the Wordpress themes as child themes for my site, and also use several plugins. I've found the open source nature of the wordpress.org CMS and the themes/plugins that are built on it invaluable for getting a website set up easily, as well as learning CSS and PHP from.
  3. Hearthstone Deck Tracker - I play Hearthstone (an online TCG by Blizzard) in my spare time, and regularly use this deck tracker when I play (it has been approved by Blizzard, totally legit! :)). I've participated in discussion on its GitHub page and opened issues to offer suggestions.
  4. Other FOSS projects that I use: Mozilla Firefox, Python, Thunderbird mail client, Apache and MySQL for my website, and the Eclipse IDE.

Please describe any relevant projects that you have worked on previously and what knowledge you gained from working on them (include links):
I wrote an Android app for accessing Auckland University's web service, as part of a university project. The app enabled users to access information from the university's non-responsive computer science website via a suitable UI, and provided mobile-specific functionality such as adding contact details, emailing, and making calls. Through this project, I learnt Android app development and the basics of UI/UX development for mobiles and tablets.

Bugfixes and features I've written for the Upload to Commons Android app:

  1. Fixed "Fix usage reports or remove them" bug - Removed the "Send usage reports" button from the UI along with the dead code associated with it (merged - https://github.com/nicolas-raoul/apps-android-commons/pull/18 )
  2. Fixed "Package naming issue" bug - Changed the directory in which the source files were contained to match the code where they were declared as 'package fr.free.nrw.commons;' (merged - https://github.com/nicolas-raoul/apps-android-commons/pull/21 )
  3. New "Sign up" feature - Added "Sign up" button at login screen to allow users to create a Wikimedia account (merged - https://github.com/nicolas-raoul/apps-android-commons/pull/23 )
  4. Removed unused Campaigns feature - Prevented the launcher from creating a Campaigns shortcut when a user installs the app, and removed dead code behind this feature (merged - https://github.com/nicolas-raoul/apps-android-commons/pull/26 )

I have also released an update containing the abovementioned fixes to Google Play (with the app maintainer's permission).

Related Objects

StatusAssignedTask
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolvedjosephine_l
Resolved Niedzielski
Resolvedjosephine_l
Resolved Niedzielski
Resolvedjosephine_l
Resolved Niedzielski

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes
Steinsplitter moved this task from Incoming to Backlog on the Commons board.Oct 14 2015, 3:00 PM
saper added a subscriber: saper.Oct 15 2015, 7:31 AM

Whoops, I just realized that the community bonding period is supposed to be prior to the official start of the Outreachy program? So in that case, should I alter my schedule to have 'community bonding' from Nov 30 - Dec 6 and the actual project tasks should start on Dec 7? @NiharikaKohli @01tonythomas

@josephine_l, Yes, the project officially kicks off from Dec 7.
November 17 - December 7 is the official community bonding period.

@Qgil, the guidelines say to respect the timeline. However, the timeline[2] doesn't include a decision deadline. At what point, should we formally accept / decline candidates? Also, should I be seeing more than one proposal in GNOME Outreachy?
[0] https://en.wikipedia.org/wiki/Approximate_string_matching
[1] https://www.mediawiki.org/wiki/Outreach_programs/Possible_mentors#Before
[2] https://www.mediawiki.org/wiki/Outreachy/Round_11#Timeline

Hi @Niedzielski, you can make the decisions officially between November 2 and November 17 on the GNOME website. After November 2, no more candidates may submit proposals but submitted proposals are still editable.
More information: https://wiki.gnome.org/Outreachy/2015/DecemberMarch

josephine_l renamed this task from Define workflow, deliverables & schedule for 'Upload to Commons app' Outreachy project to Easier categorization of pictures in Upload to Commons Android app (Outreachy Dec '15 - Mar '16 proposal).Oct 17 2015, 6:49 AM
josephine_l updated the task description. (Show Details)

I've updated this task into an actual proposal for the upcoming Outreachy round. Should I change some of the Project tags to reflect this? Not sure where it should go...

josephine_l updated the task description. (Show Details)Oct 17 2015, 6:54 AM
josephine_l updated the task description. (Show Details)Oct 17 2015, 7:02 AM

@josephine_l: You wrote "weekly progress reports on Phabricator", would you mind making that short daily reports? In my previous mentoring experiences I have found that daily reports are needed to be able to provide tips and potential guidance early enough. Cheers!

josephine_l updated the task description. (Show Details)Oct 17 2015, 7:17 AM

@Nicolas_Raoul : Done. If a daily report is something like "Still wrangling with <certain annoying bug>. Tried <this> and <that> but to no avail", is that okay? :)

@Nicolas_Raoul - Could I ask what the 'Quick list of URLs' deliverable for the community bonding period is? I read the wiki about having a detailed report due for that period, but not sure what URLs are needed.

For instance, I guess you will post new messages to the Commons/Wikipedia/Wikivoyage village pumps and to one or more mailing lists.So, the URLs to the new created sections or list archive threads will be useful for observers to quickly measure the impact of your community bonding.

Thanks Nicolas, gotcha. @NiharikaKohli - I read that we need to announce our proposals on the wikitech-l mailing list, is this to be done now or only after a proposal has been accepted/successful?

@josephine_l, you can let that pass. We haven't been announcing proposals on mailing list for a while. That documentation needs fixing. :)

Thanks for the clarification, @NiharikaKohli :)

josephine_l updated the task description. (Show Details)Oct 19 2015, 11:47 PM
josephine_l updated the task description. (Show Details)Oct 20 2015, 11:31 AM

@josephine_l, hello! I'm still wading through all the Outreachy wikis so please excuse these amendment requests. I was hoping you would formally add the following to your timeline:

  • Midterm evaluation[0]
  • Postmortem evaluation[1]

These are mentor milestones as well but, as their requirements are contingent on the work of the student, I think they would be appropriate and a good reminder to have emphasized in your schedule.

[0] https://www.mediawiki.org/wiki/Outreach_programs/Life_of_a_successful_project#Mid-term_evaluation
[1] https://www.mediawiki.org/wiki/Outreach_programs/Life_of_a_successful_project#End_of_program_evaluation

Hi @Niedzielski ! Good point, thanks. :)

I've filled in the schedule with the end of program evaluation. Unfortunately I can't seem to find anything about exactly when the mid term evaluation will be. I talked to @01tonythomas on IRC, who says that it isn't defined yet but they'll have a chat about it and get back to me. So I'll fill that in as soon as I can.

josephine_l updated the task description. (Show Details)Oct 21 2015, 4:59 AM

Hi @Niedzielski ! Good point, thanks. :)
I've filled in the schedule with the end of program evaluation. Unfortunately I can't seem to find anything about exactly when the mid term evaluation will be. I talked to @01tonythomas on IRC, who says that it isn't defined yet but they'll have a chat about it and get back to me. So I'll fill that in as soon as I can.

I see that the https://wiki.gnome.org/Outreachy/2015/DecemberMarch do not mention anything about a mid-term evaluation. I have pinged the community on IRC ( Outreachy on gimpnet ), and their Mailing list and expecting a reply. Thank your for pointing this one out @Niedzielski and @josephine_l

josephine_l updated the task description. (Show Details)EditedOct 21 2015, 7:27 AM

Edit: @Niedzielski, I have been informed by @NiharikaKohli that we can consider Jan 25 as the deadline for the mid-term evaluation, so I have put it in the week just before that. :)

josephine_l updated the task description. (Show Details)Oct 21 2015, 7:29 AM
Qgil removed a subscriber: Qgil.Oct 21 2015, 8:21 AM
josephine_l updated the task description. (Show Details)Oct 23 2015, 5:12 AM
josephine_l updated the task description. (Show Details)
josephine_l updated the task description. (Show Details)Oct 27 2015, 5:08 AM
Mvolz added a comment.Oct 27 2015, 7:46 AM

A wrap-up report should go in the schedule as well.

josephine_l updated the task description. (Show Details)EditedOct 27 2015, 8:02 AM

@Mvolz - Edited to add wrap-up report as deliverable in last week. :)

josephine_l updated the task description. (Show Details)Oct 29 2015, 12:02 PM
josephine_l updated the task description. (Show Details)Oct 30 2015, 3:04 AM

We are approaching the Outreachy'11 application deadline, and if you want to have your proposal considered to be part of this round, do sign up and add your proposal at https://outreachy.gnome.org/ before November 02 2015, 07:00 pm UTC. You can copy-paste the above proposal to the Outreachy application system, and keep on polishing it over here. Keep in mind that your mentors and the organization team will be evaluating your proposal here in Phabricator, and you are free to ask and get more reviews complying https://www.mediawiki.org/wiki/Outreach_programs/Life_of_a_successful_project#Answering_your_questions

josephine_l renamed this task from Easier categorization of pictures in Upload to Commons Android app (Outreachy Dec '15 - Mar '16 proposal) to Easier categorization of pictures in Upload to Commons Android app (Outreachy proposal).Nov 2 2015, 2:49 AM
josephine_l updated the task description. (Show Details)Nov 2 2015, 12:34 PM

Congratulations on getting accepted for Outreachy round 11. The timeline for this term is up at https://www.mediawiki.org/wiki/Outreachy/Round_11

The next step would be the Community bonding period as per https://www.mediawiki.org/wiki/Outreach_programs/Life_of_a_successful_project#Community_bonding_period

saper awarded a token.Nov 17 2015, 9:56 PM

Thanks @01tonythomas ! :)

I am trying to request the creation of a new Phabricator project as stated in the link provided. According to https://www.mediawiki.org/wiki/Phabricator/Creating_and_renaming_projects#New_projects I would need to pick a 'type' and 'policy' for my project. Can I stick with the default access policies? As for 'type', I read https://www.mediawiki.org/wiki/Phabricator/Project_management#Types_of_Projects and am still at a bit of a loss - would my project be a component, or sprint, or release, or...?

Thanks @01tonythomas ! :)
I am trying to request the creation of a new Phabricator project as stated in the link provided. According to https://www.mediawiki.org/wiki/Phabricator/Creating_and_renaming_projects#New_projects I would need to pick a 'type' and 'policy' for my project. Can I stick with the default access policies? As for 'type', I read https://www.mediawiki.org/wiki/Phabricator/Project_management#Types_of_Projects and am still at a bit of a loss - would my project be a component, or sprint, or release, or...?

Yes, you can stick with the default policy. The project type is Component.

Thanks @NiharikaKohli ! I have submitted the request at https://phabricator.wikimedia.org/T118930 , hopefully I've done it correctly.

Mvolz removed a subscriber: Mvolz.Nov 18 2015, 5:05 AM

Hi @Niedzielski , I'm hoping to be able to set up a short meeting with you and @Nicolas_Raoul as part of the community bonding period. :) Nicolas's and my availability overlaps as per the time slider here, which seems to be between 5pm - 1am at your timezone (please correct me if wrong). Would there be a time during that period that suits you? It should be fairly short, less than an hour. Many thanks!

Anything within these two slots is OK for me too! :-)

Thanks @Niedzielski and @Nicolas_Raoul ! :) Would it be okay to set the time at Friday 2am UTC then?

OK! That's Friday 11am for me if I understand correctly.
IRC (what channel?) + Mumble? Or anything you prefer, I let you decide.

2a UTC works for me!

josephine_l added a comment.EditedNov 19 2015, 4:04 AM

Yep I think it will be Friday 11am for you @Nicolas_Raoul . I'm good with IRC + Mumble. I will set up an IRC channel called #outreachy-commons on freenode (just checked, no one else is using it currently) and we can meet up there first?

Oh, I just realized that creating a Mumble server is apparently not free? Do we already have a server that we can use?

@josephine_l, you can use any existing IRC channel, actually. #wikimedia-office is specifically for meetings. Check the schedule for existing meetings here: https://meta.wikimedia.org/wiki/IRC_office_hours and if the slot you want is free, go ahead and add it to the table. Using #outreachy-commons is also fine, I just wanted to let you know of the other options. :)

@josephine_l, @Nicolas_Raoul, Google Hangouts are fine if Mumble won't work.

Thanks @NiharikaKohli :) I was hoping to use #outreachy-commons as we can just use it throughout the project without having to constantly check for other meetings, whereas this will not be the case with #wikimedia-office I think.

@Niedzielski I glanced at Google Hangouts and am fine with that as well, if preferred (although I don't have a webcam on my desktop, but it should work with voice only I think).

@josephine_l, yep, Hangouts works fine with just a mic. I like that Mumble is open source but I haven't used it before and I don't know of any hosted servers.

I am wondering if this project could use some design help. Mockups etc. @Niedzielski, @Nicolas_Raoul, thoughts?

@NiharikaKohli: The schedule of the Outreachy project does not contain many UI changes, only a new preference.

The app itself (outside of Outreachy) could use some UI advice though :-)

josephine_l renamed this task from Easier categorization of pictures in Upload to Commons Android app (Outreachy proposal) to Easier categorization of pictures in Upload to Commons Android app.Dec 1 2015, 4:01 AM
josephine_l added a comment.EditedJan 13 2016, 3:28 AM

Hi all,

Quick update: The feature described in Phase 1 (App should display nearby categories when user uploads a photo) has been implemented and the updated app has been released on Google Play. :)

We would greatly appreciate feedback on this feature, so please feel free to download the updated version of the app and to post feedback/issues on the GitHub page or below.

Please note that to use this new feature, you will need to have location tagging enabled for your camera.

Thanks!

Hi all,

Quick update #2: The minimum viable product for Phase 2 (more flexible category search suggestions) has been implemented, and v1.8 of the app has been released on Google Play.

Please feel free to post feedback/issues on the GitHub page or below. Thanks! :)

Hi all,

Quick update #3: v1.9 of the app has been released on Google Play. It contains some bugfixes for the previous code, as well as an option to use GPS to find nearby categories if the picture is not geotagged. This can be enabled or disabled via Settings.

Do feel free to post feedback/issues, thanks!

josephine_l added a comment.EditedFeb 25 2016, 3:27 AM

The final report for this project has been completed (T126848), as well as the wrap-up blog post. If there is anything else that needs to be done, please do let me know. :)

Hi @josephine_l, thanks for the report! Looks good. Could you also add an entry for your project (under a new topic for this round) over here: https://www.mediawiki.org/wiki/Outreachy/Past_projects? Add all the bullet points you see in previous rounds.

Well done. :)

Thanks @Niharika ! :) I've edited the wiki.

josephine_l closed this task as Resolved.Mar 3 2016, 4:11 AM
josephine_l closed subtask T119164: Daily reports as Resolved.
Qgil awarded a token.Mar 3 2016, 9:51 AM

Final update: Not sure if this is where it should go, but I just wanted folks to know that the internship has been awesome - I've learnt heaps about FOSS, Android development and Wikimedia. And the community has been amazing. :) I'm very much hoping to stick around - I've submitted an IEG proposal for further work on the app, and I'll try to help or share my experiences with the next round of Outreachy applicants as well.

Thanks all!

@josephine_l, if you know of a conference you want to speak at, about your project, feel free to apply for a TPG grant when you get accepted for your talk (related to your experience of this project). Open Source Bridge in Portland was the one I attended and gave a talk at after my OPW internship. :)

@Niharika thanks! I had no idea we could speak at conferences about our projects. :)

This comment was removed by Aklapper.