<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jeroens blog &#187; Wikimedia</title>
	<atom:link href="http://blog.bn2vs.com/tag/wikimedia/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.bn2vs.com</link>
	<description>Blog of Jeroen De Dauw. The latest news on my open source work and interests.</description>
	<lastBuildDate>Fri, 23 Dec 2011 14:44:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Wikipedia Education Program</title>
		<link>http://blog.bn2vs.com/2011/12/23/wikipedia-education-program/</link>
		<comments>http://blog.bn2vs.com/2011/12/23/wikipedia-education-program/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 14:44:44 +0000</pubDate>
		<dc:creator>Jeroen De Dauw</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[MediaWiki extensions]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Education Program]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Online education]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Planet Wikimedia]]></category>
		<category><![CDATA[WEP]]></category>
		<category><![CDATA[Wikimedia]]></category>
		<category><![CDATA[Wikimedia Foundation]]></category>
		<category><![CDATA[Wikipedia]]></category>
		<category><![CDATA[Wikipedia Education Program]]></category>

		<guid isPermaLink="false">http://blog.bn2vs.com/?p=1226</guid>
		<description><![CDATA[It&#8217;s been a while since I last wrote a blog post, and this is in part due to the last extension I wrote sadly enough not being available under an open license due to client demands :/ This blog post is about what I&#8217;m currently working on, new infrastructure for a project that I hope [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a while since I last wrote a blog post, and this is in part due to the last extension I wrote sadly enough not being available under an open license due to client demands :/ This blog post is about what I&#8217;m currently working on, new infrastructure for a project that I hope you&#8217;ll agree upon is totally <strong>awesome</strong>.</p>
<p>Open knowledge and open learning tools go hand in hand, thus Wikipedia can be an amazing resource for education further then simply looking up things. The Wikipedia Education Program strives to involve university students with the Wikipedia community, by creating and editing articles as part of their coursework. This is a real win-win for everyone involved. The students get to do something which is actually useful, as their work won&#8217;t disappear into some dusty archive of their university, and they learn working collaboratively with other people in the Wikipedia community. The gains for Wikipedia, and it&#8217;s community, are probably pretty obvious; more contributors, more content, more people to help increase the quality of the encyclopaedia as a whole.</p>
<p>If you are interested in bringing this program to your university, definitely check out the <a href="https://outreach.wikimedia.org/wiki/Global_Education_Program">Wikipedia Education Program</a> (WEP). Also, you can find more comprehensive posts about the program itself, as well as many success stories, on the <a href="https://blog.wikimedia.org/c/global/global-education-program/">Wikimedia blog</a>.</p>
<p>The WEP started several years ago with a handful of universities participating. Such participation and enrolment was kept track of manually on wiki pages. Obviously, this does not scale well, and now that the program has two or three orders of magnitude more students, new tools are urgently needed. The main goal is having a way for students to enrol themselves, and then be tracked by their mentors and people of the community wanting to provide assistance where needed. Further a lot of nice things can be done, such as keeping track of contributions, drop-out rates, ect, so that problems can be spotted, and measures can be taken to avoid these in the future. You can find an initial draft of the requirements <a href="https://www.mediawiki.org/wiki/Wikipedia_Education_Program">here</a>.</p>
<p>I&#8217;m implementing this as a new MediaWiki extension, which will when completed, be placed onto Wikipedia. The extension is, probably unsurprisingly, called <a href="https://www.mediawiki.org/wiki/Extension:Education_Program">Education Program</a>. It&#8217;s currently in early alpha stage, so not much to see there yet. However, a draft of it&#8217;s functionality can be found <a href="https://www.mediawiki.org/wiki/Wikipedia_Education_Program/design">here</a>. Management wise it&#8217;ll be somewhat similar to Contest, but more extensive (since there is more stuff to manage), and hopefully improved along multiple dimensions. I still need to put more thoughts into the exact flow for students though, and discuss this with the other people involved.</p>
<p><a href="http://blog.bn2vs.com/wp-content/uploads/2011/12/specialcourses.png"><img class="size-large wp-image-1232 alignnone" style="border: 1px solid black;" title="Special:Courses, part of the Education Program extension" src="http://blog.bn2vs.com/wp-content/uploads/2011/12/specialcourses-1024x341.png" alt="Special:Courses, part of the Education Program extension" width="1024" height="341" /></a></p>
<p>This is a screenshot of one of the many special pages making up the  management interface. It lists all courses, allows you to browse through  them (paged) and filter on criteria. Program administrators and mentors  also get to see a control to add new courses, which then takes them to a  new page with a form. Very similar pages exist for other types of objects, such as Institutions, Terms, Mentors and Students (although the later two are somewhat different, since they cannot be modified by people other then the students or mentors themselves).</p>
<p>I will likely be working on this for another 2 months, after which I will start work on an even more <strong>awesome</strong> project (don&#8217;t get me wrong, the WEP is definitely awesome), on which I&#8217;ll post more later on.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bn2vs.com/2011/12/23/wikipedia-education-program/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Contest extension for MediaWiki</title>
		<link>http://blog.bn2vs.com/2011/11/08/contest-extension-for-mediawiki/</link>
		<comments>http://blog.bn2vs.com/2011/11/08/contest-extension-for-mediawiki/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 13:36:17 +0000</pubDate>
		<dc:creator>Jeroen De Dauw</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Coding challenge]]></category>
		<category><![CDATA[Contest]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[MediaWiki extensions]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Planet Wikimedia]]></category>
		<category><![CDATA[Wikimedia]]></category>
		<category><![CDATA[Wikipedia]]></category>

		<guid isPermaLink="false">http://blog.bn2vs.com/?p=1212</guid>
		<description><![CDATA[As it&#8217;s been 2 months since my last blog post, I figured it was time for another one. Quite a few things I could write about (SMWCon, my new awesome laptop, Stanfords AI and ML classes, me moving to Berlin, &#8230;), but I decided to give some introduction to my most recent MediaWiki extension: Contest. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="../wp-content/uploads/2011/11/CodeChallengeLogo-301x301.png"><img class="alignright" title="Logo of the October coding challenge" src="../wp-content/uploads/2011/11/CodeChallengeLogo-301x301.png" alt="Logo of the October coding challenge" width="152" height="152" /></a>As it&#8217;s been 2 months since my last blog post, I figured it was time for another one. Quite a few things I could write about (SMWCon, my new <strong>awesome</strong> laptop, Stanfords AI and ML classes, me moving to Berlin, &#8230;), but I decided to give some introduction to <a href="https://www.mediawiki.org/wiki/Extension:Contest">my most recent MediaWiki extension: Contest</a>.</p>
<p>Contest extension that allows users to participate in admin defined  contest challenges. Via a judging interface, judges can discuss and vote  on submissions. I created it for the <a href="https://blog.wikimedia.org/2011/10/20/announcing-the-october-2011-coding-challenge/">Wikimedia October coding challenge</a>, so it got a nice amount of review, uncovering some minor misconceptions I had about some core MW code, and it got deployed on MediaWiki.org. The coding challenge is quite <strong>awesome</strong>, but I won&#8217;t discuss it any further here, so check out the linked blog post if you&#8217;re curious/interested.</p>
<p><strong>Feature overview:</strong></p>
<ul>
<li>Admin interface for managing contests and their challenges.</li>
<li>Landing and signup pages for each contest.</li>
<li>Personal contest list and submission interface for each user.</li>
<li>Summary pages per contest listing contestants, which can be filtered and sorted.</li>
<li>Judging interface that allows for rating and commenting on each participant.</li>
<li>All contests, challenges, contestants, comments and votes can be queried and exported via the API.</li>
<li>Signup and reminder emails.</li>
</ul>
<p><strong>Requirements</strong></p>
<ul>
<li><a title="MediaWiki" href="https://www.mediawiki.org/wiki/MediaWiki">MediaWiki</a> 1.18 or above &#8211; yeah! my first <strong>awesome</strong> MediaWiki 1.18 or later extension <img src='http://blog.bn2vs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>PHP 5.2 or above</li>
<li>MySQL</li>
</ul>
<p><strong>Some screenshots</strong></p>
<div id="attachment_1215" class="wp-caption alignnone" style="width: 810px"><a href="http://blog.bn2vs.com/wp-content/uploads/2011/11/800px-Contest-welcome-click.png"><img class="size-full wp-image-1215" title="Contest welcome interface" src="http://blog.bn2vs.com/wp-content/uploads/2011/11/800px-Contest-welcome-click.png" alt="Contest welcome interface" width="800" height="508" /></a><p class="wp-caption-text">Contest welcome interface</p></div>
<div id="attachment_1216" class="wp-caption alignnone" style="width: 810px"><a href="http://blog.bn2vs.com/wp-content/uploads/2011/11/800px-Contest-mycontest.png"><img class="size-full wp-image-1216" title="Contest submission and management interface for a single user" src="http://blog.bn2vs.com/wp-content/uploads/2011/11/800px-Contest-mycontest.png" alt="Contest submission and management interface for a single user" width="800" height="566" /></a><p class="wp-caption-text">Contest submission and management interface for a single user</p></div>
<div id="attachment_1217" class="wp-caption alignnone" style="width: 810px"><a href="http://blog.bn2vs.com/wp-content/uploads/2011/11/800px-Contest-contests.png"><img class="size-full wp-image-1217" title="Contest administration and judging interface listing all contests" src="http://blog.bn2vs.com/wp-content/uploads/2011/11/800px-Contest-contests.png" alt="Contest administration and judging interface listing all contests" width="800" height="271" /></a><p class="wp-caption-text">Contest administration and judging interface listing all contests</p></div>
<div id="attachment_1218" class="wp-caption alignnone" style="width: 810px"><a href="http://blog.bn2vs.com/wp-content/uploads/2011/11/800px-Contest-contestitem.png"><img class="size-full wp-image-1218" title="Contest administration and judging interface for a single contest" src="http://blog.bn2vs.com/wp-content/uploads/2011/11/800px-Contest-contestitem.png" alt="Contest administration and judging interface for a single contest" width="800" height="311" /></a><p class="wp-caption-text">Contest administration and judging interface for a single contest</p></div>
<div id="attachment_1219" class="wp-caption alignnone" style="width: 774px"><a href="http://blog.bn2vs.com/wp-content/uploads/2011/11/764px-Contest-editcontest.png"><img class="size-full wp-image-1219" title="Contest editing interface" src="http://blog.bn2vs.com/wp-content/uploads/2011/11/764px-Contest-editcontest.png" alt="Contest editing interface" width="764" height="600" /></a><p class="wp-caption-text">Contest editing interface</p></div>
<div id="attachment_1220" class="wp-caption alignnone" style="width: 810px"><a href="http://blog.bn2vs.com/wp-content/uploads/2011/11/800px-Contest-contestant-judging.png"><img class="size-full wp-image-1220" title="Judging interface for a single submission" src="http://blog.bn2vs.com/wp-content/uploads/2011/11/800px-Contest-contestant-judging.png" alt="Judging interface for a single submission" width="800" height="554" /></a><p class="wp-caption-text">Judging interface for a single submission</p></div>
<p><strong>Some background</strong></p>
<p>When starting with this extension, it was clear pretty quickly that it could really use the <strong>awesome</strong> DBObject class I&#8217;ve been incrementally creating over my last few extensions and mostly finished in <a href="https://www.mediawiki.org/wiki/Extension:Survey">Survey</a>. This class is a wrapper for objects of a certain type, which is equivalent to a row in some db table. Even though it&#8217;s in essence very simple &#8211; it just has a field that is an associative array with field =&gt; value &#8211; it&#8217;s also very powerful and flexible. When I started with this, I had no idea it would turn out to be so neat. The bad news was that I could not use PHP 5.3 or later for Contest, while the DBObject class uses late static binding, which was introduces in PHP 5.3. I came up with a simple hack: all static methods in the base class have been made-non static, but are marked as &#8220;should be static&#8221;. Then, every deriving class has a public static function s(), which returns a (cached) instance of the class. So then for every &#8220;static&#8221; method you need to call, instead of ClassName::methodName(), you do ClassName::s()-&gt;methodName(). If you know this, and do not misuse the non-static-but-should-be-static methods in the base class, it retains all it&#8217;s niceness, at the cost of something that&#8217;s pretty much a tiny bit of syntactic sugar. And it&#8217;s quite obvious how easy it will be to replace this with actual LSB usage once this becomes possible <img src='http://blog.bn2vs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ul>
<li><a href="http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/Survey/includes/SurveyDBClass.php?view=markup">Survey DBObject class</a> &#8211; <a href="http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/Survey/includes/Survey.class.php?view=markup">deriving class</a></li>
<li><a href="http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/Contest/includes/ContestDBObject.php?view=markup">Contest DBObject class</a> &#8211; <a href="http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/Contest/includes/Contest.class.php?view=markup">deriving class</a></li>
</ul>
<p><strong>Download</strong></p>
<ul>
<li><a href="https://code.google.com/p/mwcontest/downloads/list">Release tarballs</a></li>
<li><a href="http://svn.wikimedia.org/svnroot/mediawiki/tags/extensions/Contest/">SVN tags</a></li>
<li><a href="http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/Contest/">SVN trunk</a></li>
</ul>
<p><strong>What&#8217;s next?</strong></p>
<p>There are various small additions that could be made, but one things really stands out: contest configuration with version history. Right now, you can create contests and challenges, modify them and delete them. But once you make a change, the previous version is lost. You cannot revert. You cannot compare. You can&#8217;t even see who made the change or when. Implementing such a thing is not trivial, especially if you want to have a generic system that can be used by any extension that wants to store data and have version history for it. And if you think about it, quite a few extensions could use this. Let&#8217;s have a look at my extensions, latest first, and see if they can use it:</p>
<ul>
<li><a href="https://www.mediawiki.org/wiki/Extension:Contest">Contest</a> &#8211; well yeah, obviously</li>
<li><a href="https://www.mediawiki.org/wiki/Extension:Survey">Survey</a> &#8211; yes, for the surveys, their configuration, and their questions</li>
<li><a href="https://www.mediawiki.org/wiki/Extension:Semantic_Watchlist">Semantic Watchlist</a> &#8211; yeah, for the watchlist groups</li>
<li><a href="https://www.mediawiki.org/wiki/Extension:Include_WP">IncludeWP</a> &#8211; no</li>
<li><a href="https://www.mediawiki.org/wiki/Extension:SubPageList">SubPageList</a> &#8211; no</li>
<li><a href="https://www.mediawiki.org/wiki/Extension:Live_Translate">Live Translate</a> &#8211; yeah, for the translation memory admin</li>
<li><a href="https://www.mediawiki.org/wiki/Extension:Push">Push</a> &#8211; no, although it could, if it had an admin interface for the push targets</li>
<li><a href="https://www.mediawiki.org/wiki/Extension:Validator">Validator</a> &#8211; no</li>
<li><a href="https://www.mediawiki.org/wiki/Extension:Maps">Maps</a> and <a href="https://www.mediawiki.org/wiki/Extension:Semantic_Maps">SM</a> &#8211; yeah, for the map layer definitions currently done as key=value pairs, one per line, in the Layer namespace</li>
</ul>
<p>That&#8217;s 6 out of 10 just for the extensions I wrote. What it comes down to is that pretty much any extension that has some sort of settings interface that is not user-specific, could use this. And maybe even the user specific ones, which would obviously include the user preferences in MediaWiki core. So why not store this data in wiki pages, such as done by Maps for layers? You could even store it as JSON or serialized PHP objects if you need more complexity&#8230; The things with this is that it only works for simple use cases (such as the layers in Maps), and even then is limited. You cannot query over the data as you do not have it in relational form. And you cannot have fine grained access and write rights control over the data, which in a lot of cases is quite important. So a generic solution here would be an <strong>awesome</strong> addition to MediaWiki if you ask me.</p>
<p>More info on Contest can be found on <a href="https://www.mediawiki.org/wiki/Extension:Contest">it&#8217;s documentation page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bn2vs.com/2011/11/08/contest-extension-for-mediawiki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WikiLovesMonuments and the Upload Wizard</title>
		<link>http://blog.bn2vs.com/2011/08/24/wikilovesmunuments-and-the-upload-wizard/</link>
		<comments>http://blog.bn2vs.com/2011/08/24/wikilovesmunuments-and-the-upload-wizard/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 12:19:40 +0000</pubDate>
		<dc:creator>Jeroen De Dauw</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Planet Wikimedia]]></category>
		<category><![CDATA[UploadWizard]]></category>
		<category><![CDATA[WikiLovesMonuments]]></category>
		<category><![CDATA[Wikimedia]]></category>

		<guid isPermaLink="false">http://blog.bn2vs.com/?p=1188</guid>
		<description><![CDATA[As this particular project is coming to and end, I figured I&#8217;d do a quick blog post on it. Wiki Loves Monuments (WLM) is a photo contest for European monuments, organized by Wikimedia this September. Last year some JavaScrip hacks on the regular Wikimedia Commons (the media repository for Wikipedia and other Wikimedia Foundation projects) [...]]]></description>
			<content:encoded><![CDATA[<p>As this particular project is coming to and end, I figured I&#8217;d do a quick blog post on it.</p>
<p><a href="http://www.wikilovesmonuments.eu/">Wiki Loves Monuments</a> (WLM) is a photo contest for European monuments, organized by Wikimedia this September. Last year some JavaScrip hacks on the regular <a href="https://secure.wikimedia.org/wikipedia/commons/wiki/">Wikimedia Commons</a> (the media repository for Wikipedia and other <a href="http://wikimediafoundation.org/">Wikimedia Foundation</a> projects) upload interface where used for this contest. This year the new and completely awesome <a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:UploadWizard">Upload Wizard</a> (UW) will be used, with configuration optimized for WLM. I created a campaign-based configuration system from the UW and also added a bunch of new settings.</p>
<p>2 new special pages where added. One listing all campaigns, their status, and edit and delete links. This is at Special:UploadCampaigns.</p>
<p><a href="http://blog.bn2vs.com/wp-content/uploads/2011/08/uploadCampaigns.png"><img class="size-full wp-image-1189 alignnone" title="Upload campaign management interface" src="http://blog.bn2vs.com/wp-content/uploads/2011/08/uploadCampaigns.png" alt="Upload campaign management interface" width="634" height="242" /></a></p>
<p>The other special page handles the edit action and displays a list of all available settings that can be modified for the campaign. This is at Special:UploadCampaign/name.</p>
<p><a href="http://blog.bn2vs.com/wp-content/uploads/2011/08/uploadCampaign.png"><img class="size-large wp-image-1190 alignnone" title="Upload campaign admin" src="http://blog.bn2vs.com/wp-content/uploads/2011/08/uploadCampaign-1024x376.png" alt="Upload campaign admin" width="1024" height="376" /></a></p>
<p>A campaign can be applied to the UW by adding the &#8220;campaign&#8221; url parameter with as value the campaign name, ie ?campaign=wlm-be.</p>
<p>One fun thing about the architecture of the campaign system is that the setting support is very generic. I created a <a href="http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/UploadWizard/includes/UploadWizardConfig.php?view=markup">new settings class</a> that pulls in the default settings, overrides these with the wikis config (ie PHP vars in LocalSettings.php), passed URL arguments and finally the upload campaign settings if a campaign is specified. I like this kind of setup, as it&#8217;s a lot nicer then dealing with over 9000 global variables, and in the meanwhile already applied some variation of it <a href="http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/SemanticSignup/SemanticSignup.settings.php?view=markup">in Semantic Signup</a> and <a href="http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/Survey/Survey.settings.php?view=markup">in my new Surveys extension</a>. And I wrote up a <a href="http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/Maps/includes/Maps_Settings.php?revision=94439&amp;view=markup">more general and powerful version</a> of such setting handling in the Maps extension. Unfortunately this code uses late static bindings and thus requires PHP 5.3, making it not usable in actual code for quite a while <img src='http://blog.bn2vs.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  Another neat thing is that the <a href="http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/UploadWizard/includes/UploadWizardCampaign.php?view=markup">upload campaign class</a> only specifies a lift of settings that should be configurable for upload campaigns, together with what kind of HTML form input they should be displayed. That info is then merged with the settings obtained from the settings class and put into a FormSpecialPage, which uses HTMLForm to display anything without any further hassle <img src='http://blog.bn2vs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Not used the Upload Wizard before and curious how it works? Go <a href="https://secure.wikimedia.org/wikipedia/commons/wiki/Special:UploadWizard">upload some nice stuff to commons</a> then <img src='http://blog.bn2vs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bn2vs.com/2011/08/24/wikilovesmunuments-and-the-upload-wizard/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New MediaWiki extension: Semantic Watchlist</title>
		<link>http://blog.bn2vs.com/2011/07/30/new-mediawiki-extension-semantic-watchlist/</link>
		<comments>http://blog.bn2vs.com/2011/07/30/new-mediawiki-extension-semantic-watchlist/#comments</comments>
		<pubDate>Sat, 30 Jul 2011 15:33:08 +0000</pubDate>
		<dc:creator>Jeroen De Dauw</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Planet Wikimedia]]></category>
		<category><![CDATA[Semantic MediaWiki]]></category>
		<category><![CDATA[Semantic Watchlist]]></category>
		<category><![CDATA[Semantics]]></category>
		<category><![CDATA[SMW]]></category>
		<category><![CDATA[Wikimedia]]></category>
		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://blog.bn2vs.com/?p=1106</guid>
		<description><![CDATA[Today I released the first version of a brand new MediaWiki extension titled Semantic Watchlist. It extends Semantic MediaWiki by adding the capability to watch/follow sets of properties for groups of pages (that can be specified with categories and namespaces). You can view changes to these properties via Special:SemanticWatchlist, which works similar to the regular [...]]]></description>
			<content:encoded><![CDATA[<p>Today I released the first version of a brand new MediaWiki extension titled <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Watchlist">Semantic Watchlist</a>. It extends <a href="http://semantic-mediawiki.org/">Semantic MediaWiki</a> by adding the capability to watch/follow sets of properties for groups of pages (that can be specified with categories and namespaces). You can view changes to these properties via Special:SemanticWatchlist, which works similar to the regular MediaWiki watchlist. And you can even request to be notified via email when a change is made!</p>
<p><strong>Feature overview:</strong></p>
<ul>
<li><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Semantic_Watchlist#The_watchlist">A watchlist page</a> listing changes to properties watched by the user.</li>
<li>Per-user <a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Semantic_Watchlist#Watchlist_preferences">optional email notification</a> per edit that changes properties.</li>
<li>Integration with <a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Semantic_Watchlist#Watchlist_preferences">user preferences</a> to allow users to specify which watchlist groups they want to follow, and if they want to receive emails on changes.</li>
<li><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Semantic_Watchlist#Watchlist_groups">Special:WatchListConditions</a> as administration interface for watchlist groups.</li>
<li><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Semantic_Watchlist#Extending_Semantic_Watchlist">API module</a> to query property changes grouped by edit for a single user.</li>
<li><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Semantic_Watchlist#Extending_Semantic_Watchlist">API modules</a> to add, modify and delete the watchlist groups.</li>
</ul>
<p>Let&#8217;s have a look at the different parts of the interface:</p>
<p><strong>The watchlist</strong></p>
<p>Each user can view changes to properties they watch on <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Watchlist#The_watchlist"> Special:SemanticWatchlist</a>, which looks and works similar to the regular  watchlist. Items that have not been viewed yet on the watchlist will be  indicated as &#8216;NEW&#8217;.</p>
<p><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Semantic_Watchlist#The_watchlist"><img class="alignnone size-full wp-image-1158" title="Semantic Watchlist page showing changes to watched properties" src="http://blog.bn2vs.com/wp-content/uploads/2011/07/swl-watchlist.png" alt="Semantic Watchlist page showing changes to watched properties" width="528" height="368" /></a></p>
<p><strong>Watchlist preferences</strong></p>
<p>Each user can manage which watchlist groups they follow via their user  preferences. They can also choose if they want to receive email  notifications or not. These preferences can be found on <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Watchlist#Watchlist_preferences"> Special:Preferences</a>, which is linked at the right top of the page in  most skins for logged in users.</p>
<p><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Semantic_Watchlist#Watchlist_preferences"><img class="alignnone size-full wp-image-1160" title="Semantic Watchlist user preferences" src="http://blog.bn2vs.com/wp-content/uploads/2011/07/swl-prefs-2.png" alt="Semantic Watchlist user preferences" width="804" height="338" /></a></p>
<p><strong>Watchlist groups</strong></p>
<p>The watchlist groups can be managed via the <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Watchlist#Watchlist_groups">Special:WatchlistConditions</a> page by people that have the &#8216;semanticwatchgroups&#8217; right, by default  only administrators. Each group has a name, which allows users to easily  recognize the groups in their preferences, and a single category,  namespace or concept it covers. Only changes to properties on pages in  this category, namespace or concept will be shown to users watching this  group. Each group also has a list of properties, which further  restricts what property changes should be shown to the user.</p>
<p><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Semantic_Watchlist#Watchlist_groups"><img class="alignnone size-full wp-image-1159" title="Administrative interface where watchlist conditions/groups can be managed" src="http://blog.bn2vs.com/wp-content/uploads/2011/07/swl-watchlistconditions.png" alt="Administrative interface where watchlist conditions/groups can be managed" width="888" height="503" /></a></p>
<p><strong>Email notifications</strong></p>
<p>When you choose to receive email notifications for changes to semantic properties covered by watchlist groups you watch, they will appear both in your watchlist and your inbox. The below screenshot is a simple example of a notification email.</p>
<p><a href="http://www.mediawiki.org/wiki/Extension:Semantic_Watchlist"><img class="alignnone size-full wp-image-1161" title="Email notification send by Semantic Watchlist listing changed to watched properties" src="http://blog.bn2vs.com/wp-content/uploads/2011/07/swl-email.png" alt="Email notification send by Semantic Watchlist listing changed to watched properties" width="735" height="265" /></a></p>
<p><strong>Extending Semantic Watchlist</strong></p>
<p>Semantic Watchlist is in part a workflow extension, which makes it  important for other extensions and tools to interact with it. This is  possible via the hooks and API modules Semantic Watchlist provides.</p>
<p>API modules:</p>
<ul>
<li>addswlgroup: API module to add semantic watchlist groups.</li>
<li>deleteswlgroup: API module to delete semantic watchlist groups.</li>
<li>editswlgroup: API module to modify semantic watchlist groups.</li>
<li>semanticwatchlist: Returns a list of modified properties per page for a persons semantic watchlist.</li>
</ul>
<p>Hooks:</p>
<ul>
<li>SWLBeforeEmailNotify: $group, $user, $changeSet, $describeChanges, &amp;$title, &amp;$emailText</li>
<li>SWLBeforeEditInsert: &amp;$this</li>
<li>SWLAfterEditInsert: &amp;$this</li>
<li>SWLBeforeChangeSetInsert: &amp;$this, &amp;$groupsToAssociate, &amp;$editId</li>
<li>SWLAfterChangeSetInsert: &amp;$this, $groupsToAssociate, $editId</li>
</ul>
<p><strong>Further plans</strong></p>
<p>I think this extension opens up a lot of new possibilities for the SMW platform in the area of workflow. Due to it&#8217;s API modules and hooks, it&#8217;s very easy for other extensions to build on top of the watchlist functionality, so I&#8217;m curious as to what will happen there.</p>
<p>This first release comes with core functionality, but at places lacks polish. And since it&#8217;s the first release of a somewhat complex extension, I do expect issues to show up in use cases not tested for yet. Both these factors make it likely that a second release will be made relatively soonish.</p>
<p>Since I think this extension is such a great addition to the already awesome SMW environment, I&#8217;m going to give a talk about it at the upcoming SMWCon. That&#8217;s bound to yield some interesting feedback <img src='http://blog.bn2vs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Requirements</strong></p>
<ul>
<li><a title="MediaWiki" href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/MediaWiki">MediaWiki</a> 1.17 or above</li>
<li><a title="Semantic MediaWiki" href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Semantic_MediaWiki">Semantic MediaWiki</a> 1.6 or above</li>
<li>PHP 5.2 or above</li>
</ul>
<p><strong>Download</strong></p>
<ul>
<li>Semantic Watchlist 0.1 download [<a href="https://semanticwatchlist.googlecode.com/files/SemanticWatchlist0.1.zip">zip</a>, <a href="https://semanticwatchlist.googlecode.com/files/SemanticWatchlist0.1.7z">7z</a>]</li>
<li><a href="https://code.google.com/p/semanticwatchlist/downloads/list">List of release downloads</a></li>
<li>SVN tag checkout: http://svn.wikimedia.org/svnroot/mediawiki/tags/extensions/SemanticWatchlist/REL_0_1/</li>
<li>SVN trunk checkout: http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/SemanticWatchlist/</li>
</ul>
<p><strong>Some background</strong></p>
<p>I developed the <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Watchlist">Semantic Watchlist</a> extension as <a href="http://wikiworks.com/">WikiWorks</a> consultant for <a href="http://www.ieee.org/">the IEEE</a>, with some help from <a href="http://www.yaronkoren.com/">Yaron Koren</a>.</p>
<p><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Semantic_Watchlist"></a><a href="http://wikiworks.com/"><img class="alignnone size-full wp-image-1162" title="WikiWorks, a consulting company dedicated exclusively to MediaWiki implementation." src="http://blog.bn2vs.com/wp-content/uploads/2011/07/wikiworks-header-logo.png" alt="WikiWorks, a consulting company dedicated exclusively to MediaWiki implementation." width="429" height="91" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bn2vs.com/2011/07/30/new-mediawiki-extension-semantic-watchlist/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Maps and Semantic Maps 0.7 released</title>
		<link>http://blog.bn2vs.com/2010/10/15/maps-and-semantic-maps-0-7-released/</link>
		<comments>http://blog.bn2vs.com/2010/10/15/maps-and-semantic-maps-0-7-released/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 22:49:31 +0000</pubDate>
		<dc:creator>Jeroen De Dauw</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Geocoding]]></category>
		<category><![CDATA[Google Earth]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mapping]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[Open Layers]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[OSM]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[Semantic Maps]]></category>
		<category><![CDATA[Semantic MediaWiki]]></category>
		<category><![CDATA[Semantics]]></category>
		<category><![CDATA[SMW]]></category>
		<category><![CDATA[Wikimedia]]></category>
		<category><![CDATA[Yahoo! Maps]]></category>

		<guid isPermaLink="false">http://blog.bn2vs.com/?p=1009</guid>
		<description><![CDATA[Also check out the wiki version of this post. Version 0.7 of both the Maps and Semantic Maps extensions is now available for download. This release is made after 3 beta&#8217;s and a release candidate, so should be stable. The most notable new features in this release are tag extension support for all the Maps [...]]]></description>
			<content:encoded><![CDATA[<p><em>Also check out <a href="http://mapping.referata.com/wiki/Maps_and_Semanic_Maps_0.7_released">the wiki version</a> of this post.</em></p>
<p>Version 0.7 of both the <a title="Maps" href="http://mapping.referata.com/wiki/Maps">Maps</a> and <a title="Semantic Maps" href="http://mapping.referata.com/wiki/Semantic_Maps">Semantic Maps</a> extensions is now available for <a title="Download" href="http://mapping.referata.com/wiki/Download">download</a>. This release is made after 3 beta&#8217;s and a release candidate, so should be stable.</p>
<p>The most notable new features in this release are tag extension support for all the Maps <a title="Parser functions" href="http://mapping.referata.com/wiki/Parser_functions">parser functions</a>, more consistent error handling via <a title="Validator" href="http://mapping.referata.com/wiki/Validator">Validator</a> 0.4 and compatibility with the upcoming MediaWiki 1.17. Most changes  are internal improvements, but there are also several bug fixes and  minor new features.</p>
<p><em><a href="http://mapping.referata.com/wiki/Maps_and_Semanic_Maps_0.7_released"><img class="alignnone size-full wp-image-1012" title="Maps showing a Google Maps map with multiple=" src="../wp-content/uploads/2010/10/maps-google-map-tag-extension.png" alt="Maps showing a Google Maps map with multiple=" width="597" height="469" /></a></em></p>
<p><strong>Whats next?</strong></p>
<p>There only big new feature on the <a title="Roadmap" href="http://mapping.referata.com/wiki/Roadmap">roadmap</a> for 0.7.x is the infamous images-as-layers one. This feature was supported by the now long obsolete Semantic Layers extension (<a rel="nofollow" href="http://s89238293.onlinehome.us/w/index.php?title=Charon_doesn%27t_make_change">example</a>),  and has been requested by dozens of people since the first releases of  Maps. Next to fixing the bugs that show up, the focus will mainly be on  adding new functionality. Feel free to <a title="Talk:Roadmap (page does not exist)" href="http://mapping.referata.com/w/index.php?title=Talk:Roadmap&amp;action=edit&amp;redlink=1">propose new features</a>, or help out creating them.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bn2vs.com/2010/10/15/maps-and-semantic-maps-0-7-released/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Maps and Semantic Maps 0.6.6 released</title>
		<link>http://blog.bn2vs.com/2010/08/27/maps-and-semantic-maps-0-6-6-released/</link>
		<comments>http://blog.bn2vs.com/2010/08/27/maps-and-semantic-maps-0-6-6-released/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 18:16:21 +0000</pubDate>
		<dc:creator>Jeroen De Dauw</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Geocoding]]></category>
		<category><![CDATA[Google Earth]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mapping]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[Open Layers]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[OSM]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Planet Wikimedia]]></category>
		<category><![CDATA[Semantic Maps]]></category>
		<category><![CDATA[Semantics]]></category>
		<category><![CDATA[Wikimedia]]></category>
		<category><![CDATA[Yahoo! Maps]]></category>

		<guid isPermaLink="false">http://blog.bn2vs.com/?p=988</guid>
		<description><![CDATA[Just under a month after the 0.6.5 release of both mapping extensions, the next minor update, 0.6.6, is available for download. No spectacular new features, but several important bugfixes. Several issues with coordinate parsing have been fixed, you can now using geocoding when behind a proxy, and wikitext should finally(!) behave correctly in marker pop-ups. [...]]]></description>
			<content:encoded><![CDATA[<p>Just under a month after the 0.6.5 release of both <a href="http://mapping.referata.com/wiki/Mapping_on_MediaWiki">mapping extensions</a>, the next minor update, 0.6.6, is <a href="http://mapping.referata.com/wiki/Help:Download">available for download</a>. No spectacular new features, but several important bugfixes. Several issues with coordinate parsing have been fixed, you can now using geocoding when behind a proxy, and wikitext should finally(!) behave correctly in marker pop-ups. Some internal changes have also been made, mainly rounding off the many changes I made in the 0.6.x branch. I expect this release to be the most stable one to date, and have therefore changed the extensions status from &#8216;beta&#8217; to &#8216;stable&#8217; on the documentation pages.</p>
<p>A lot of improvements have been made to the documentation as well. Both the <a href="http://mapping.referata.com/wiki/Maps_examples">Maps examples</a> and <a href="http://mapping.referata.com/wiki/Semantic_Maps_examples">Semantic Maps examples</a> are now comprehensive and complete. There now are finally examples of using <a href="http://mapping.referata.com/wiki/Semantic_Maps_examples#Using_templates">query templates</a>, of <a href="http://mapping.referata.com/wiki/Semantic_Maps_examples#Distance_query">distance queries</a> and of some nice <a href="http://mapping.referata.com/wiki/Semantic_Maps_examples#Compound_queries">compound queries</a>. Some more work is needed though, a lot of which is explaining basic functionality and fixing minor issues all over the place. I&#8217;ll be taking care of the most important things, but I&#8217;d be great if people using the extensions could help me out improving <a href="http://mapping.referata.com/wiki/">the documentation</a> <img src='http://blog.bn2vs.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>This release is probably the last one before 0.7, in which I expect to be focusing on new functionality. I&#8217;m looking for people that want to fund the development of new features, so please <a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/User:Jeroen_De_Dauw#Contact_info">contact me</a> if you are such a person <img src='http://blog.bn2vs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Downloads:</strong></p>
<ul>
<li><a href="http://mwmaps.googlecode.com/files/Maps0.6.6.zip">Maps 0.6.6 zip archive</a></li>
<li><a href="http://mwmaps.googlecode.com/files/Maps0.6.6.7z">Maps 0.6.6 7z archive</a></li>
<li><a href="http://semanticmaps.googlecode.com/files/MapsAndSemanticMaps0.6.6.zip">Maps and Semantic Maps 0.6.6 zip archive</a></li>
<li><a href="http://semanticmaps.googlecode.com/files/MapsAndSemanticMaps0.6.6.7z">Maps and Semantic Maps 0.6.6 7z archive</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.bn2vs.com/2010/08/27/maps-and-semantic-maps-0-6-6-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>End of Google Summer of Code 2010</title>
		<link>http://blog.bn2vs.com/2010/08/20/end-of-google-summer-of-code-2010/</link>
		<comments>http://blog.bn2vs.com/2010/08/20/end-of-google-summer-of-code-2010/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 18:07:00 +0000</pubDate>
		<dc:creator>Jeroen De Dauw</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Distribution]]></category>
		<category><![CDATA[Extension management]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[GSoC]]></category>
		<category><![CDATA[GSoC 2010]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Planet Wikimedia]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[Wikimedia]]></category>

		<guid isPermaLink="false">http://blog.bn2vs.com/?p=962</guid>
		<description><![CDATA[As Google Summer of Code (GSoC) 2010 has ended, I&#8217;m writing this blog post to outline what I&#8217;ve done during the coding period and what the results are. Thanks go to the Wikimedia Foundation and Google for providing the opportunity to do this project, Brion Vibber, who mentored me, and to all other people who [...]]]></description>
			<content:encoded><![CDATA[<p>As <a href="http://code.google.com/soc/">Google Summer of Code</a> (GSoC) 2010 has ended, I&#8217;m writing this blog post to outline what I&#8217;ve done during the coding period and what the results are. Thanks go to the <a href="http://wikimediafoundation.org/">Wikimedia Foundation</a> and Google for providing the opportunity to do this project, <a href="http://identi.ca/brionv">Brion Vibber</a>, who mentored me, and to all other people who helped me out, especially <a href="http://yaronkoren.com/">Yaron Koren</a> who I bugged the most <img src='http://blog.bn2vs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="https://code.google.com/soc/"><img class="size-full wp-image-975 alignright" title="Google Summer of Code 2010" src="http://blog.bn2vs.com/wp-content/uploads/2010/08/2010_NoURL_300x267px.jpg" alt="Google Summer of Code 2010" width="300" height="267" /></a></p>
<p><strong>What I did during GSoC</strong></p>
<p>My <a href="http://www.mediawiki.org/wiki/User:Jeroen_De_Dauw/GSoC2010/Proposal">initial proposal</a> was to create an <strong>awesome</strong> extension management platform for <a href="http://www.mediawiki.org/wiki/MediaWiki">MediaWiki</a> that would allow for functionality similar to what you have in the WordPress admin panel. After doing some research I realized this would require significant effort in two areas: configuration and deployment. After looking at some already existing tools such as the <a href="http://www.mediawiki.org/wiki/Extension:Configure">Configure</a> extension and the Deployment Framework of Ontoprise, I decided to completely drop the configuration part and concentrate on the deployment work.</p>
<p>I started with porting the filesystem abstraction classes from WordPress, which are needed for doing any upgrade or installation operations that include changes to the codebase. (The current MediaWiki installer can do upgrades, but only to the database.) I created a new extension called <a href="http://www.mediawiki.org/wiki/Extension:Deployment">Deployment</a>, where I put in this code, and which was intended as a place to experiment with all the MediaWiki-installation side deployment stuff. As You obviously want this functionality to be part of MediaWiki itself, I wrote it with the idea of moving over the code to MediaWiki core once it was finished. It turned out that doing filesystem upgrades securely is not an easy task though, so after finishing the port, I quitted work on this as I decided to do other functionality first.</p>
<p>I then poked somewhat at the new MediaWiki installer, which is a complete rewrite of the current installer with a lot of new cool stuff and a totally more awesome interface. I made some minor imrpovements there, and split the Installer class, which held core installer functionality, into a more generic Installer class and a CoreInstaller. This allows for creating an ExtensionInstaller that uses the same base code, such as database, filesystem and LocalsSttings manipulation.</p>
<p>After this I started thinking about how to best structure a package repository for MediaWiki and extensions to get updates and new extensions from. I had a look at <a href="http://en.wikipedia.org/wiki/PEAR">PEAR</a> and <a href="http://en.wikipedia.org/wiki/CPAN">CPAN</a>, as well as <a href="http://en.wikipedia.org/wiki/WordPress">WordPress</a>, although I don&#8217;t learn a lot about the later. Apparently their repository code is not freely available <img src='http://blog.bn2vs.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  After discussion with <a href="http://identi.ca/brionv">Brion</a> I decided to just create the repository from scratch, and started working on another extension, titled <a href="http://www.mediawiki.org/wiki/Extension:Distribution">Distribution</a>, for this purpose. I merged it together with a rewritten version of the MWReleases extension written by Chad, which already had core update detection functionality.</p>
<p>After the Distribution API&#8217;s where working decently I started work on the Special pages in Distribution that would serve as the equivalent of the WordPress admin panel. As I put of the configuration work, and also the file-system manipulation for the initial version, this came down to simply listing currently installed software, update detection and browsing through extensions available in the repository.</p>
<p>On top of my GSoC project itself, I did quite some other MediaWiki work in &#8220;my free time&#8221;. I released 5 new versions of <a href="http://www.mediawiki.org/wiki/Extension:Maps">Maps</a> and <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Maps">Semantic Maps</a>, starting with 0.6 and ending at 0.6.5. As I finally got core commit access, I also poked at some other things, such as Special:Version, which now will automatically put all extensions of unknown type in the &#8220;other&#8221; category, and will display this category as the last one. Plus misc minor improvements to a verity of extensions. This all amounts into a little over 550 commits to the MediaWiki SVN repository during the GSoC coding period.</p>
<p><strong>State of the code</strong></p>
<p>The Distribution extension has the infrastructure for storing and providing extension and core data via the <a href="http://www.mediawiki.org/wiki/API">MediaWiki API</a> basically ready for use. It adds 4 database tables to MediaWiki:</p>
<ul>
<li>distribution_units: This table stores non-version specific info of &#8216;release units&#8217; . Currently these unit&#8217;s are extensions only &#8211; the reason I went for a more general name is to allow for adding other things such as skins and content packages later on. The info here consist of a name, a URL, a description and a pointer to the &#8220;current version&#8221;.</li>
<li>distribution_unit_versions: Entries in this table contain info about a specific version of a &#8216;release unit&#8217;. The info here consists of a version number, release status (beta, rc, stable, deprecated, &#8230;), release data, authors, description and some installation data.</li>
<li>distribution_mwreleases: This table contains MediaWiki releases. It has been merged in from <a href="http://www.mediawiki.org/wiki/Extension:MWReleases">MWReleases</a>, so all credit for it goes to <a href="http://identi.ca/chadh">Chad</a>.</li>
<li>distribution_packages: This table is not in use yet, and needs some more work. The goal is to be able to install a &#8220;package&#8221; onto your wiki which can contain multiple &#8216;distribution units&#8217;. This would basically be the same as Semantic Bundle is doing now, but a lot easier to set up and maintain.</li>
</ul>
<p>The API modules added are:</p>
<ul>
<li>ApiQueryExtensions: Returns a list of extensions matching certain search criteria, which can include keywords, tags and authors. Only extensions with a version that has a release state acceptable for your installation are returned.</li>
<li>ApiMWReleases: Gets the current MediaWiki releases. Like this distribution_mwreleases database table, this has been merged in from MWReleases and all credits go to Chad.</li>
<li>ApiUpdates: This API module returns update information for the extensions you give it, and does the same for MediaWiki itself if a core version number is provided. The only info that&#8217;s returned is a version number for each unit or core, if there is an update. Otherwise nothing will be returned for that unit or core.</li>
</ul>
<p>To populate the database with existing extension info I wrote a maintenance script &#8220;getSvnMetadata&#8221;, which goes through a local checkout of the MediaWiki extensions directory and get&#8217;s the names from the extensions. I haven&#8217;t found a good way yet to also get other extension data though.</p>
<p>The Deployment extension contains an abstraction layer for repository interaction and several interfaces that use this. The abstraction layer allows for supporting different kinds of repositories. The only implementation it currently has is for interaction with repositories provided by the Distribution extension.  It&#8217;s also a convenient point to implement caching, as you probably don&#8217;t want to send the requests for available updates every time you view a page on the admin panel, and allows for changes to the format the repository uses without any effects in other parts of Deployment. The interfaces that are finished to some extend are:</p>
<ul>
<li>Special:Extensions: This page lists all installed extensions and allows you to filter on extension type. It&#8217;s based on the WordPress &#8220;plugins&#8221; page and is currently only an improved version of the extension list in Special:Version. It&#8217;s the only special page added by Deployment that can be viewed by non administrators. When logged in however, every extension has a list of links allowing you do various actions. The extension info is handled by a new class ExtensionInfo, which parses the info of individual extensions in $wgExtensionCredits, and provides a more convenient way to work with it. This allows for adding support for a new, better, extension info format later on. A planned feature for this special page is showing update notifications in each extension row.</li>
</ul>
<p><a href="http://www.mediawiki.org/wiki/Extension:Deployment"><img class="alignnone size-full wp-image-971" title="Special:Extensions shwoing a list of all extensions installed and some filter options" src="http://blog.bn2vs.com/wp-content/uploads/2010/08/special-extensions1.png" alt="Special:Extensions shwoing a list of all extensions installed and some filter options" width="778" height="271" /></a></p>
<ul>
<li>Special:Install: This page allows you to search through available extensions in the repository. The interface is based on the &#8220;plugin-install&#8221; page of WordPress and allows for searching extensions based on term, tag or author. After performing a search you get a list of matching extensions showing their name, version, authors, description, link to the documentation, and a link to download them. Later on this download link will be replaced by an &#8220;Install&#8221; one.</li>
</ul>
<p><a href="http://www.mediawiki.org/wiki/Extension:Deployment"><img class="alignnone size-full wp-image-972" title="Special:Install displaying controls to browse extensions in the repository" src="http://blog.bn2vs.com/wp-content/uploads/2010/08/special-install1.png" alt="Special:Install displaying controls to browse extensions in the repository" width="817" height="209" /></a></p>
<ul>
<li>Special:Update: This page will inform you of any updates to both core and extensions. It&#8217;s behaves basically identical the WordPress &#8220;update&#8221; page.</li>
</ul>
<p><a href="http://www.mediawiki.org/wiki/Extension:Deployment"><img class="alignnone size-full wp-image-973" title="Special:Update displaying available updates, in this case there are none" src="http://blog.bn2vs.com/wp-content/uploads/2010/08/special-update.png" alt="Special:Update displaying available updates, in this case there are none" width="658" height="214" /></a></p>
<p>The extension allows you to configure several aspects of the repository interaction:</p>
<ul>
<li>$wgRepositoryApiLocation: This might be an obvious one, but also a very important one, as it  allows you to use a repository other the the Wikimedia Foundation one on  mediawiki.org, which will be the default.</li>
<li>$wgRepositoryLocation: This is similar to the previous setting, but links to a web interface providing browsing capabilities through the repository, or at least some additional info.</li>
<li>$wgRepositoryPackageStates: This is a list of allow release states. By default these will only be &#8220;stable&#8221; and &#8220;beta&#8221;. Early adopters can also add &#8220;dev&#8221; and &#8220;alpha&#8221;, and there also is &#8220;rc&#8221; and &#8220;deprecated&#8221;.</li>
</ul>
<p><strong>What&#8217;s next?</strong></p>
<p>Although some very basic functionality is working, quite some work still needs to be done to get this to the WordPress-<strong>awesomeness</strong> level. Let&#8217;s first have a look at Distribution and then Deployment:</p>
<p>The most basic issue with Distribution currently is that there is no script yet that allows collecting all current extension data, which is needed for it to be of any use. I&#8217;m not sure how gathering current data can be properly automated, which is the main reason the script doesn&#8217;t exist yet. Any suggestions here are very welcome! After the initial version it should be possible for extension authors to edit their extensions data, and create new releases. For this we&#8217;ll need some new special pages. The data itself can then be used to populate the extension pages on mediawiki.org, and some new magic words such as &#8220;current MediaWiki version&#8221;, can automate a bunch of stuff. After these things new features can be added, such as the management of packages, and more detailed extension information, including things such as dependencies and compatibility info.</p>
<p>Deployment mainly needs interface work, and will need additions to support any new information provided by the Distirbution repository. A cool feature that could be added is supplying the repository with installation information (obviously optionally), which would allow the developers to get an idea of which versions of MediaWiki core and extensions people are using. After the whole MediaWiki deployment model has been revised and is up and running, it&#8217;s configuration can similarly be reinvented. The interfaces added by Deployment can then be adapted to allow contain extension configuration.</p>
<p><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Deployment"><img class="alignnone size-full wp-image-981" title="Design for the initial MedaWiki deployment system" src="http://blog.bn2vs.com/wp-content/uploads/2010/08/MedaWiki-deployment-initial1.png" alt="Design for the initial MedaWiki deployment system" width="862" height="522" /></a></p>
<p><strong>GSoC 2011?</strong></p>
<p>This was my last GSoC as a student, as I no longer qualify, since I quitted my official studies. If I&#8217;m still doing MediaWiki development next year, which I guess is pretty likely, there is a lot of change I&#8217;ll be signing up as a mentor though <img src='http://blog.bn2vs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  If you are interested in being a student in 2011, you can already put your name on the <a href="http://www.mediawiki.org/wiki/Summer_of_Code_2011">2011 GSoC page</a> <img src='http://blog.bn2vs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Some useful links</strong></p>
<ul>
<li>My <a href="http://blog.bn2vs.com/tag/gsoc-2010/">blog posts</a> about this project</li>
<li>The <a href="http://www.mediawiki.org/wiki/Summer_of_Code_2010">Wikimedia 2010 GSoC page</a> with all GSoC projects</li>
<li><a href="http://www.mediawiki.org/wiki/Extension:Distribution">Distribution</a> and <a href="http://www.mediawiki.org/wiki/Extension:Deployment">Deployment</a> extensions</li>
<li>My <a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/User:Jeroen_De_Dauw">MediaWiki.org user page</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.bn2vs.com/2010/08/20/end-of-google-summer-of-code-2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Special:Extensions taking form</title>
		<link>http://blog.bn2vs.com/2010/08/14/specialextensions-taking-form/</link>
		<comments>http://blog.bn2vs.com/2010/08/14/specialextensions-taking-form/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 19:23:55 +0000</pubDate>
		<dc:creator>Jeroen De Dauw</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Extension management]]></category>
		<category><![CDATA[GSoC]]></category>
		<category><![CDATA[GSoC 2010]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Planet Wikimedia]]></category>
		<category><![CDATA[Wikimedia]]></category>

		<guid isPermaLink="false">http://blog.bn2vs.com/?p=957</guid>
		<description><![CDATA[Just a few quick screenshots of Special:Extensions, on which I&#8217;ve been working today. The first screenshot shows Special:Extensions page displaying a list of all the extensions I have installed on my local wiki: As you can see, you can now filter on extension type with the control right below the &#8220;Installed extensions&#8221; title. Here I [...]]]></description>
			<content:encoded><![CDATA[<p>Just a few quick screenshots of Special:Extensions, on which I&#8217;ve been working today. The first screenshot shows Special:Extensions page displaying a list of all the extensions I have installed on my local wiki:</p>
<p><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Deployment"><img class="alignnone size-full wp-image-958" title="Special:Extensions page showing all installed extensions" src="http://blog.bn2vs.com/wp-content/uploads/2010/08/mediawiki-special-extensions.png" alt="Special:Extensions page showing all installed extensions" width="910" height="415" /></a></p>
<p>As you can see, you can now filter on extension type with the control right below the &#8220;Installed extensions&#8221; title. Here I have filtered on the SEMANTIC extensions:</p>
<p><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Deployment"><img class="alignnone size-full wp-image-959" title="Special:Extensions showing semantic extensions" src="http://blog.bn2vs.com/wp-content/uploads/2010/08/mediawiki-special-extensions-semantic.png" alt="Special:Extensions showing semantic extensions" width="892" height="325" /></a></p>
<p>An interesting change I made is that you can now access this page without having the siteadmin permission. Doing this will get the above, but without the add new button and administration controls (currently only &#8220;Deactivate&#8221; which is there only for show so far). This way this page will be a nice addition to Special:Version.</p>
<p>Tomorrow is the last coding day in <a href="http://blog.bn2vs.com/tag/gsoc-2010/">Google Summer of Code 2010</a>, during which I&#8217;m planning to focus on the update detection functionality, or rather creating the interface for it, as the plumbing for it is all but done. I also want to move several classes from <a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Deployment">Deployment</a> over to <a href="http://blog.bn2vs.com/tag/mediawiki/">MediaWiki</a> core, as they make more sense to have there, and would allow for some nice improvements.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bn2vs.com/2010/08/14/specialextensions-taking-form/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visible awesomeness at last</title>
		<link>http://blog.bn2vs.com/2010/08/12/visible-awesomeness-at-last/</link>
		<comments>http://blog.bn2vs.com/2010/08/12/visible-awesomeness-at-last/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 14:39:43 +0000</pubDate>
		<dc:creator>Jeroen De Dauw</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Distribution]]></category>
		<category><![CDATA[Extension management]]></category>
		<category><![CDATA[GSoC]]></category>
		<category><![CDATA[GSoC 2010]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Planet Wikimedia]]></category>
		<category><![CDATA[Wikimedia]]></category>

		<guid isPermaLink="false">http://blog.bn2vs.com/?p=945</guid>
		<description><![CDATA[Since my last blog post about my GSoC project, which aims to bring more awesome deployment capabilities to MediaWiki, I&#8217;ve been putting my time into both the Distribution and Deployment extensions. I was pleased to find a bunch of stuff was easier to do then I had imagined, and now I finally have some functionality [...]]]></description>
			<content:encoded><![CDATA[<p>Since my <a href="http://blog.bn2vs.com/2010/08/07/distribution-extension-for-mediawiki/">last blog post</a> about my <a href="http://blog.bn2vs.com/tag/gsoc-2010/">GSoC project</a>, which aims to bring more awesome <a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Deployment">deployment capabilities</a> to MediaWiki, I&#8217;ve been putting my time into both the <a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Distribution">Distribution</a> and <a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Deployment">Deployment</a> extensions. I was pleased to find a bunch of stuff was easier to do then I had imagined, and now I finally have some functionality you can actually see working &#8211; yay <img src='http://blog.bn2vs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  It&#8217;s not a lot, as this is just very rudimentary and even uses demo data at places. Still it&#8217;s very nice to be able to post some screenshots after months of doing research and poking at code. I also got a new crappy diagram (although I think I&#8217;m succeeding in getting them less crappy each iteration) that shows the architecture of the initial versions I&#8217;m working towards.</p>
<p><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Deployment"><img class="alignnone size-full wp-image-946" title="MedaWiki-deployment-initial" src="http://blog.bn2vs.com/wp-content/uploads/2010/08/MedaWiki-deployment-initial.png" alt="Planned architecture for the initial versions of the MediaWiki deployment extensions" width="794" height="311" /></a></p>
<p>The following screenshots show an import script running. This script is part of Distribution and is meant to get data from a checked out copy of the extensions directory and store it into the database tables provided by Distribution. I haven&#8217;t found a good way to actually get the extension data other then their path names (for example &#8216;SemanticMediaWiki&#8217;), so have a function that&#8217;s just returning some demo data.</p>
<p><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Distribution"><img class="alignnone size-full wp-image-947" title="MediaWiki deployment package metadata import script" src="http://blog.bn2vs.com/wp-content/uploads/2010/08/importScript.png" alt="MediaWiki deployment package metadata import script" width="848" height="273" /></a></p>
<p><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Distribution"><img class="alignnone size-full wp-image-948" title="MediaWiki deployment package metadata import script" src="http://blog.bn2vs.com/wp-content/uploads/2010/08/importScript2.png" alt="MediaWiki deployment package metadata import script" width="656" height="206" /></a></p>
<p>Via Deployment you can search for extensions by keyword, author or tag. This is done by making a request to the API provided by Distribution which serves the data collected by the script. This screenshot shows the interface I have created so far:</p>
<p><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Deployment"><img class="alignnone size-large wp-image-949" title="First working version of Special:Install" src="http://blog.bn2vs.com/wp-content/uploads/2010/08/special-install-1024x242.png" alt="First working version of Special:Install" width="1024" height="242" /></a></p>
<p>And after clicking the button, you get:</p>
<p><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Deployment"><img class="alignnone size-large wp-image-950" title="First working version of Special:Install shwoing a list of extensions that matched the searched made, in this case &quot;Semantic&quot;" src="http://blog.bn2vs.com/wp-content/uploads/2010/08/special-install-list-1024x519.png" alt="First working version of Special:Install shwoing a list of extensions that matched the searched made, in this case &quot;Semantic&quot;" width="1024" height="519" /></a></p>
<p>As I&#8217;m doing with all special pages in Deployment, Special:Install&#8217;s layout and functionality is based on what WordPress has in it&#8217;s admin panel.</p>
<p>I also put some work in Special:Extensions already, although it&#8217;s basically just Special:Version with just the extensions for now.</p>
<p><a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Deployment"><img class="alignnone size-large wp-image-951" title="Development version of Special:Extensions showing the installed extensions. " src="http://blog.bn2vs.com/wp-content/uploads/2010/08/special-extensions-1024x493.png" alt="Development version of Special:Extensions showing the installed extensions. " width="1024" height="493" /></a></p>
<p>I&#8217;m not wring a real comprehensive overview of what features there are already, which are planned, and how I plan to create them for now, as there is little time left in GSoC (only 3 days!), and I want to get some more work finished before then <img src='http://blog.bn2vs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bn2vs.com/2010/08/12/visible-awesomeness-at-last/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Distribution extension for MediaWiki</title>
		<link>http://blog.bn2vs.com/2010/08/07/distribution-extension-for-mediawiki/</link>
		<comments>http://blog.bn2vs.com/2010/08/07/distribution-extension-for-mediawiki/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 03:49:26 +0000</pubDate>
		<dc:creator>Jeroen De Dauw</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Distribution]]></category>
		<category><![CDATA[Extension management]]></category>
		<category><![CDATA[GSoC]]></category>
		<category><![CDATA[GSoC 2010]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Planet Wikimedia]]></category>
		<category><![CDATA[Wikimedia]]></category>

		<guid isPermaLink="false">http://blog.bn2vs.com/?p=941</guid>
		<description><![CDATA[With only 2 days till the suggested Google Summer of Code &#8216;pencils down&#8217; date, and a week longer until the firm one, I&#8217;m using my remaining time to get some basic functionality working for my GSoC project. I&#8217;ve started creating a new extension called Distribution that will provide an API module which can be used [...]]]></description>
			<content:encoded><![CDATA[<p>With only 2 days till the suggested Google Summer of Code &#8216;pencils down&#8217; date, and a week longer until the firm one, I&#8217;m using my remaining time to get some basic functionality working for <a href="http://blog.bn2vs.com/tag/gsoc-2010/">my GSoC project</a>. I&#8217;ve started creating a new extension called <a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Distribution">Distribution</a> that will provide an API module which can be used to query extension meta-data. Later on it should also be able to do this for core, and provide  archived packages that can be downloaded to your MediaWiki server, and  directly installed. Initially I&#8217;ll probably simply be pointing to the <a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:ExtensionDistributor">ExtensionDistributor</a> extension on MediaWiki.org, which can create archives for extensions on request. The <a href="https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Deployment">Deployment</a> extension which I started on earlier on will use data obtained via the API Distribution provides to display available extensions on your local installation.  Right now I&#8217;m attempting to get the ExtensionDistributor working locally, so I can develop the Distribution extension alongside it, and confirm everything works. This will take some time as it uses Linux/UNIX specific commands, forcing me to use my Kubuntu install, on which my dev environment is only partially set up at the moment.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bn2vs.com/2010/08/07/distribution-extension-for-mediawiki/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

