Page MenuHomePhabricator

Community bonding evaluation for "An enhanced cross-wiki watchlist as an OAuth tool"
Closed, ResolvedPublic

Description

Meetings with mentors

30 April Google Hangout
  • rename to crosswatch
  • get phab and gerrit project
  • admin rights on test.wikipedia.org
  • discussion about the use of websockets, document backend API
  • get it to a functional state, then talk to community liaisons for input
  • meetings in future mainly in IRC

Bonding period report

Work done

  • T97898 setup crosswatch on tools, renamed from watchr to crosswatch, migrated to gerrit
  • Refactored and improved frontend code (commit)
    • cleaner code, moved logic from controller to a service
    • moved watchlist entry html into a directive
    • added coloring for the byte change count for a edit
    • experimented with the design, working version now which can be successively improved
    • display icons for each project familiy (wikipedia/wiktionary/commons/…)
  • Refactored and improved backend code T97900 (commit)
    • splitted code into proper modules and functions, bugfixes
    • created a basic module ( backend/celery/api.py) for the handling of the MediaWiki API which will be used, as no other library was suitable/required more changes than writing a own
    • added support for minor/bot/new page edit flags
  • patched kombu library (network backend for celery) so that all redis keys used can be prefixed for isolation & security (commit)
  • set up flower as celery monitoring tool
  • added support to query watchlist for all projects where the user has made at least one edit. (commit)
  • added a README.md documenting how to install/change code and deploy
  • created meta:crosswatch as main non-Phabricator point of documentation and community feedback/engagement

Lessons learnt

  • John Papa's Angular Style Guide is a nice coding style guide for AngularJS and is good in telling how things should be done in AngularJS and why in this way.
  • flower as celery monitoring tool is nice but sadly doesn't store information like the average number of waiting tasks in a queue
  • looked into on how to use the replica databases and MariaDB/MySQL in general
  • the wikimedia universe is large – the number of active projects is huge and many active users have at least one edit in >50 projects
    • crosswatch has to query each project individually, to reduce too much load on mediawiki servers there should be some caching strategy
  • looked deeper into i18n support and how translatewiki works
    • integration with translatewiki is feasible, angular-translate uses a simple json format which translatewiki supports
    • adaptation for left-to-right languages needed, angular-translate doesn't offer special support.
  • iconography is hard
    • it would be nice to have an icon for each language, that makes it easier to visually differentiate changes in different projects – sadly such sets don't exist
    • currently as a test country flags for languages as an option, but of course languages != countries and language codes != country codes
    • different coloring of the label might be an option, but it would be randomized each time and might not look good
  • learned how to use gerrit and git review

Problems faced and solutions found

  • looked trough the source code of all the mediawiki python client libraries, it turned out writing a own minimal mediawiki client library is faster and quite easy than patching those to use OAuth and wrap the watchlist API etc.
  • I've looked in detail into celery and it's internals as I noticed that it's messaging library kombu uses some fixed redis keys for worker management communication.
    • for isolation and security reasons that keys should be prefixed by a random string, a one line patch made the string customizable
    • the patch could be submitted to the main kombu library, but the current version in their git is broken for me and there is rationale for them not to provide that option
  • I learned how to create a proper python package and how to write the setup.py – which caused a bit of problems for me (as the folder structure is not the same as for a standard python package and the use of a patched kombu version), which I was able to solve

Any changes to the original plan

  • renamed to crosswatch
  • change prioritization of goals and refined minimum viable product

Minimum Viable Product

See T99930: Minimum viable product [tracking].

Communication Plan

Event Timeline

Sitic assigned this task to yuvipanda.
Sitic raised the priority of this task from to Low.
Sitic updated the task description. (Show Details)
Sitic set Security to None.
Sitic added subscribers: Sitic, Qgil, Aklapper and 2 others.

Yay. Another complete task. Up for review. Ping @yuvipanda - we require mentor evaluation for this task.

I believe he has bonded well.

Great! I'll mark this as resolved, Good job, @Sitic!