October 2011 Coding Challenge/Real-Time

From mediawiki.org

Real-Time Challenge[edit]

Thousands of people edit Wikipedia every day. Wikipedia articles are constantly changing, with the most popular articles getting updated upwards of 100 times a day. But there is very little on the article page that tells the reader that anything has changed. We would like to make the articles on Wikipedia appear more alive, so that our readers understand that knowledge is a dynamic, not static, thing.

Here are a few themes that participants might want to explore:

  • Recent changes. How might you retrieve article change data in a systematic way and represent that data in a compelling visual way?
  • Article updated ping. How could we notify a reader when they're looking at a page that new changes have been made while they were looking at it?
  • Trending articles. How might you identify the articles that are currently most interesting to users?
  • Top editors today. How might you determine which editors are having the most impact on Wikipedia today?
  • Post to social media. How might you enable Wikipedians to share their favorite articles through their social networks, in a way that's consistent with our privacy policy?
  • Page views since last edit. How might an editor be able to see how many people have seen an article since their last changes to it?
  • Simultaneous edit warning. Would it be easier to compile two different and accurate edits of the same page at the same time if each authors were warned that there was another change in progress?

These are only a few ideas. Wikipedia collects and exposes a lot of interesting data, and there could be many creative ways to collect and represent that data.

You could go many different development routes here: Write a MediaWiki extension, a user script, or an external service calling the API. You can also leverage the IRC recent-changes feed. Note that basic recent-changes visualizations are pretty easy to do and lots of cool work has already been done in that area (e.g. wikistream (Archived 2017-08-19 at the Wayback Machine) which shows Wikipedia recent-changes and recent image uploads).

Specific Pointers[edit]

Writing a user script[edit]

All pages on MediaWiki sites include some built-in MediaWiki JavaScript code. Users can add their own code to this preload process by writing and uploading User Scripts, which are then loaded whenever that logged-in user loads a page. Perusing the online guide explaining how those User Scripts work, you could begin having your own, personal JavaScript code (local to your login) up and running within half an hour.

Page traffic data[edit]

You can find raw page view statistics on dumps.wikimedia.org and on Domas Mituzas' server.

Manual: Developing extensions[edit]

Be sure to read the extensive documentation about developing extensions for MediaWiki sites.

Manual: API[edit]

The MediaWiki API is extensive, and has exhaustive documentation.

General new developer resources[edit]

Becoming a MediaWiki hacker[edit]

Here's a good introduction on what's involved in becoming a MediaWiki hacker, including instructions for installing your own MediaWiki instance.

IRC: #mediawiki[edit]

IRC is short for Internet Relay Chat, and open source developers talk on IRC all the time. The IRC Primer is a good overview of how IRC works. Friendly MediaWiki developers can be found on the #mediawiki channel on irc.freenode.net (web interface). If you are having difficulties figuring out how to write MediaWiki code, you can ask for help there. Be aware, though: if you want someone to help you, do some homework first. If the answer to your question can be found easily by typing the question into Google, you might not want to ask it on IRC.

Mailing list: wikitech-l[edit]

If someone isn't immediately available to help you on IRC, you can also join the wikitech-l mailing list and ask questions there. The same rules for asking questions on IRC apply for asking questions on mailing lists.

Coding conventions[edit]

Coding conventions are extremely important in the MediaWiki universe. Read them and understand them. If you do not conform to them, your chances of winning go down significantly.

Pre-commit checklist[edit]

Here's a useful pre-commit checklist. Before you decide that your submission is final, go through this checklist. You'll be glad you did.

Security for developers[edit]

Wikipedia gets half a billion visits every month, so good security practices are extremely important. Be sure to review the security documentation for Mediawiki developers.

Unit testing[edit]

Great code starts with a good test. We (as well as your peers, employers or customers) are greatly impressed by thorough unit testing. Of course, before your code is included in Wikipedia itself, good unit tests will be required. Here's some good documentation for writing unit tests in PHP and Javascript.

Browser Compatibility[edit]

Because Wikipedia is viewed by so many users, browser compatibility matters. (Remember: 0.1% of 500 million users is still half a million users.) Your new code may not work on every browser, but you must not break older browsers, either. Be sure to familiarize yourself with Wikipedia's browser compatibility policy.