Pages

Thursday, April 3, 2014

BIOS-salasanan poisto IBM ThinkPad T23 -kannettavassa tietokoneessa

Vastuuvapauslauseke: Tee tämä vain omalla riskilläsi! En ole vastuussa mikäli vahingossa rikot laitteesi tai jotakin pahempaa sattuu.
Tee aina asianmukaiset varotoimet työskennellessäsi sähkölaitteiden parissa estääksesi sähköiskun vaaran.
IBM on lyhenne sanoista "International Business Machines" (suomeksi kansainväliset liike-elämän laitteet) ja se on varsin osuva kuvaus ThinkPad-kannettavista, joita IBM alkujaan tuotti 13 vuotta (vuodesta 1992 vuoteen 2005) ja jonka oikeudet kiinalainen Lenovo sittemmin osti. Koska IBM:n ThinkPad-kannettavat ovat enemmän liike-elämän käyttöön suunniteltuja kuin tavalliset kannettavat tietokoneet, niissä on varsin hyvä suojaus. ThinkPad-kannettavassa voi olla jopa kolme erilaista salasanaa: käynnistyssalasana (englanniksi power-on password, lyhennetään POP), pääkäyttäjän/valvojan salasana (englanniksi supervisor password, lyhennetään SVP) ja kovalevyn salasana (englanniksi hard disk drive password, lyhennetään HDP). Vaikkakin kovalevyn salasanan voi "ohittaa" vaihtamalla kovalevyn toiseen, kaksi jäljelläolevaa salasanaa ovat huomattavasti vaikeampia murtaa.

Helmikuussa 2012 en omistanut ainuttakaan ThinkPadia (nykyään omistan kolme, joista yksi on päivittäisessä käytössä oleva kannettavani). Olin kuullut monia hyviä asioita ThinkPadeista ja todellakin se, että ne ovat "ainoita kannettavia, jotka on hyväksytty Kansainvälisen avaruusaseman käyttöön" (englanninkielisen Wikipedian ThinkPad-artikkelin mukaan) on ehdottomasti jotakin. Onnistuin nappaamaan käytetyn IBM ThinkPad T23 -kannettavan alle 30€:n hintaan (postikuluineen) Huuto.netistä myöhäis-helmikuussa 2012. Se oli melko hyväkuntoinen, varsinkin alhaisen hinnan huomioon ottaen; jopa akku näytti toimivan kauemmin kuin viisi minuuttia! Ainoa varjopuoli oli kammottavan valvojan salasanan (SVP) olemassaolo.

Jos etsit lempihakukoneellasi Internetistä ohjeita valvojan salasanan poistoon IBM ThinkPad -kannettavasta, törmäät todennäköisesti yhteen näistä kolmesta asiasta:
  1. Tekopyhiin ihmisiin, jotka syyttävät sinua varkaaksi ja kertovat, että BIOS-salasanojen poisto-ohjeiden kysyminen on laitonta/sivuston sääntöjä rikkovaa/molempia
  2. Idiootteihin, jotka väittävät sen olevan mahdotonta
  3. SoDoItYourself.com:in äärettömän monimutkaisiin ohjeisiin, joihin lukeutuu tinaamista ja muita pelottavia asioita


#1 ja #2 ovat ilmiselvästikin hevonpaskaa ja #3 on erittäin monimutkainen ja riskialtis mikäli et ole sähköinsinööri koulutukseltasi.

Onneksi on olemassa yksinkertainen tapa poistaa vanhempien ThinkPadien valvojan salasana (SVP). Tämän tavan on kuvaillut Le Chameau (joka muuten on ranskaa ja tarkoittaa "kamelia") SoDoItYourself.com:in artikkelin kommenttiosiossa. On myös olemassa kokonainen (englanninkielinen) Blogspot-blogi, joka on omistettu samalle tavalle. Tähän tapaan ei kuulu ollenkaan tinaamista ja riski, että ThinkPadistasi tulee äärettömän kallis paperipaino, on huomattavasti pienempi; paras osa on se, ettei sinun tarvitse ostaa mitään!

Aloitetaanpas, eikö vain?

Vaihe #1: Poista akku ja varmista, että laturi ei ole kytkettynä.

Vaihe #2: Etsi ATMEL-siru; ThinkPad T23 -mallissa tarvitsee poistaa RAM-muistipiirien kansi ja yksi muistipiiri päästäkseen käsiksi tuohon pienenpieneen (0,5mm x 0,3mm) siruun.

Vaihe #3: Aiheuta oikosulku kahden ATMEL-piirin "jalan" välille, riippuen ThinkPad-mallistasi, metalliesineen avulla (käytin itse erittäin pienen neulan tylppää päätä).
T23-mallissa oikosulku tulee aiheuttaa "jalkojen" 5 ja 6 välille, mutta malleissa, joissa on pienempi (8-jalkainen) siru, oikosulutettavat "jalat" ovat 3 ja 4! Tähän itse kompastuin; yritin epätoivoisesti aiheuttaa oikosulkua jalkojen 3 ja 4 välille, mutta se luonnollisestikaan ei tehnyt mitään. Katso tästä kaaviosta jalkojen numerointi.
Varmista myös, että pystyt turvallisesti poistamaan käyttämäsi metalliesineen "jalkojen" välistä, sillä joudut tekemään sen tietokoneen ollessa käynnissä.

Vaihe #4: Kytke kannettavaan tietokoneeseen virta.

Vaihe #5: Paina tarvittavaa näppäintä päästäksesi BIOS:iin; T23-mallissa oikea näppäin on F1. Yleisesti ottaen englanninkielinen teksti "Press <näppäimen nimigt; to access Setup" näkyy näytöllä samaan aikaan IBM:n logon kanssa tietokoneen käynnistyessä.

Vaihe #6: Huomaat, että BIOS:in lataaminen kestää tavallista kauemmin; tämä johtuu aiheuttamastasi oikosulusta. T23-mallisa näyttöön tulee virheilmoitus ("ERROR 0187: EAIA data access error"), jonka jälkeen F1-näppäintä tulee painaa kerran päästäkseen BIOS:iin oikeasti.

Vaihe #7: Nyt olet BIOS:issa, ja kahden "jalan" välillä on edelleen oikosulku. Mene "Password"-osioon (suom. Salasana) ja huomaat, että valvojan salasana on [Disabled] (suom. poistettu käytöstä). Älä hämäänny! Hankkiutuaksesi eroon tuntemattomasta valvojan salasanasta, sinun tulee antaa uusi salasana! Hullua mutta totta.
Käytä nuolinäppäimiä valitaksesi Supervisor Password -vaihtoehdon ja paina sitten Enter-näppäintä. Nyt sinua pyydetään antamaan uusi valvojan salasana. Anna jokin salasana — itse käytin salasanaa "1" — ja paina Enter-näppäintä valitaksesi "Re-enter password" -kentän (suom. Anna salasana uudelleen). Anna uusi valvojan salasana uudelleen ja ennen Enter-näppäimen painamista tallentaaksesi uuden valvojan salasanan, poista metalliesine, joka aiheuttaa oikosulun kahden ATMEL-piirin jalan välillä!
Tehtyäsi sen, paina Enter-näppäintä ja uusi valvojan salasana — jonka tiedät — tallentuu. Sitten paina F10 tallentaaksesi muutokset ja käynnistääksesi koneen uudelleen.

Vaihe #8: Nyt olet valmis! Jos olet kuten minä ja haluat hankkitua valvojan salasanasta lopullisesti eroon, käynnistä kannettava tietokone taas kerran (normaalisti, aiheuttamatta mitään oikosulkua minnekään), paina tarvittavaa näppäintä (F1 T23-mallissa) päästäksesi BIOS:iin, valitse "Password"-valikko ja valitse vaihtoehdon Supervisor Password -kohtaan vaihtoehto [Disabled] ja paina Enter-näppäintä. Voilà!

Pakollinen lisenssisonta: Tämä blogikirjoitus on julkaistu public domainiin siinä määrin kuin mahdollista. Tämä blogikirjoitus on kirjoitettu siinä toivossa, että se on hyödyllinen jollekin; kuitenkin, tekijä ei ota minkäänlaista vastuuta mikäli päädyt rikkomaan kannettavan tietokoneesi tai aiheutat fyysistä vahinkoa itsellesi tai toiselle ihmiselle tai olennolle.
Jos kuitekin toteat tämän blogikirjoituksen hyödylliseksi, harkitsethan lahjoittamista Uncyclopedialle, sisältövapaalle tietosanakirjalle, koska paljon hyvää huumoria tarvittiin mahdollistaman tämä useiden epäonnistuneiden valvojan salasanan purkuyritysten aiheuttaman turhautumisen johdosta huolimatta.


Toimiko tämä tapa sinulla? Vai eikö sittenkään? Onko sinulla kysymyksiä tai ajatuksia tähän ThinkPad-malliin liittyen, Lenovon ThinkPadeihin liittyen vaiko toisen valmistajan valmistamaan kannettavaan tietokoneeseen liittyen? Katso, mitä englanninkielinen Laptops Wiki tietää ja jaa parhaat BIOS-salasanojen poisto-ohjeet ja -vinkit sekä yleiset tietosi kannettaviin tietokoneisiin liittyen yhteisön kanssa! :-)
Saatat myös haluta jättää kommentin alapuolella sijaitsevaan kommenttiosioon.

How to remove the BIOS Supervisor Password (SVP) on an IBM ThinkPad T23

Disclaimer: Do this only at your own risk! I am not responsible if you accidentally break your device or worse.
Always take the appropriate safety precautions when working with electrical device to prevent the risk of electrocution.
IBM stands for "International Business Machines" and that's a relatively accurate description of the ThinkPad laptop series originally produced by IBM for 13 years (from 1992 to 2005) and then acquired by the Chinese Lenovo. As IBM's ThinkPad laptops are more business-oriented than your average, run-of-the-mill laptops, they have pretty good security. Namely, a ThinkPad laptop can have up to three different passwords: power-on password (POP), supervisor password (SVP) and a hard disk drive (HDD) password. Whereas the hard disk drive password can be "bypassed" by swapping out the HDD to a different HDD, the other two are much, much more difficult to crack.

In February 2012, I didn't own a single ThinkPad (nowadays I own three, of which one is my main laptop that I use daily). I had heard many good things about ThinkPads and truly, the fact that they're "the only laptop[s] certified for use on the International Space Station" (according to the Wikipedia ThinkPad article) certainly is something. I managed to grab a used IBM ThinkPad T23 for less than 30€ (postal fees included) from a local auction site back in late February 2012. It was relatively fancy, especially given the low price and all; even the battery seemed to work for longer than 5 minutes! The only drawback was the presence of the dreaded supervisor password (SVP).

If you search around the Internet with your favorite search engine for instructions on how to remove the supervisor password on an IBM ThinkPad laptop, you'll most likely encounter one of these three things:
  1. Hypocrites accusing you of being a thief and telling that asking for BIOS password removal instructions is illegal/against the site's rules/both
  2. Idiots telling you that it's not possible
  3. SoDoItYourself.com's overly complicated instructions involving soldering and other scary things


#1 and #2 are obviously bullshit and #3 is pretty complicated and risky if you're not an electrical engineer by training.

Thankfully, there is a simple way to remove the SVP of older ThinkPads. This method has been described by Le Chameau (which, by the way, is French for "the camel") on the comment section of that SoDoItYourself.com article. Likewise, there is an entire Blogspot blog dedicated to the same method. This method involves no soldering and the risk of bricking your ThinkPad is considerably smaller; the best part is that you don't need to buy anything!

Let's get started, shall we?

Step #1: Remove the battery and make sure that the AC adapter is not connected.

Step #2: Locate the ATMEL chip; on the ThinkPad T23, you'll need to remove the RAM cover and one RAM module to access that tiny (0,5mm x 0,3mm) chip.

Step #3: Short the two pins on the ATMEL chip, depending on your ThinkPad model, with a metal object (I used the "dull" end of a very small needle).
For the T23, you'll need to short pins 5 and 6, but for some other models using the smaller (the 8-legged) version, the pins you'll want to short out are pins 3 and 4! This is what got me; I desperately tried to short pins 3 and 4 on my T23, and that naturally did nothing. Take a look at this schematic for reference.
Also make sure that you're able to safely remove whatever metal object you're using to short out the two pins, as you'll need to do that with the laptop being powered on.

Step #4: Power on the laptop.

Step #5: Press whatever button you need to press to access BIOS; on T23, the correct button is the F1. There is usually a message like "Press <whatever key> to access Setup" on the IBM logo screen.

Step #6: You'll notice that loading the BIOS takes longer than usually; this is because you're shorting out the two pins. On the T23, an error message ("ERROR 0187: EAIA data access error") is displayed and after that, you need to press F1 once again to access BIOS for real.

Step #7: Now you're on BIOS, still shorting out the two pins. Go to the "Password" section and you'll notice that the supervisor password is [Disabled]. Don't be fooled! To get rid of the supervisor password that you don't know, you'll need to set a new one! Crazy but true.
Use the arrow keys to select the Supervisor Password, then press Enter. Now you're being prompted for a new supervisor password. Give it a password — I used "1" — and then press enter to select the "Re-enter password" field. Re-enter the new supervisor password and before pressing enter to actually save the new supervisor password, remove the metal object that is shorting the two pins on the ATMEL chip!
After you've done that, press Enter and the new supervisor password — the one that you now know — is saved. Then press F10 to save changes and reboot.

Step #8: Now you're done! If you're like me and you want to get rid of the supervisor password for good, boot up the laptop once again (normally, no need to short out anything anymore), press whatever key you need to (F1 on the T23) to enter BIOS, give it the supervisor password that you just set a moment ago, select the "Password" menu and set Supervisor Password to [Disabled] and press Enter. Voilà!

Mandatory licensing crap: This blog post is released to the public domain to the extent that it is possible. This blog post has been written in the hopes that it is useful to someone; however, the author accepts no responsibility whatsoever should you brick your laptop, cause physical injury to yourself or another person or being.
If you do, however, find this blog post useful, please consider donating to Uncyclopedia, the content-free encyclopedia, because a lot of good humor is what was needed to make this possible amidst all the frustration caused by numerous failed attempts at cracking the supervisor password.


Did this method work out for you? Did it not? Do you have questions or thoughts regarding this particular ThinkPad model, Lenovo-era ThinkPads or another laptop model by another manufacturer? Check out what the Laptops Wiki knows and share your best BIOS password removal tips and tricks with the community, as well as your laptop knowledge! :-)
You may also want to post a comment on the comment section below.

Tuesday, August 9, 2011

ArmchairGM is finally open source

Update on 28 August 2013: Wikia moved to GitHub from SVN in late 2012 and as of today, their SVN (at wikia-code.com) appears to be unreachable, so I've uploaded the full ArmchairGM source code to GitHub.
You can browse the source tree at https://github.com/mary-kate/ArmchairGM, but please make sure to read the README file before asking any questions about it.

August 1, 2011 was an important day in the history of open source software. That's when Wikia finally open-sourced the ArmchairGM codebase. You can browse the ArmchairGM codebase or even grab a copy of the ArmchairGM codebase, if you feel like it!

A bit of history


Over a year ago I tried open-sourcing the ArmchairGM codebase, but my idea was met with resistance and travelling to another country just to perform code cleanup — something you can do "online" by grabbing a copy of the codebase and then cleaning it up locally — was just not possible for me.

Later on, Sean Colombo, an awesome open source developer and the founder of LyricWiki, joined Wikia's technical team since LyricWiki moved to Wikia. On July 14th, I decided to e-mail Sean, just for the sake of it, to see if he'd be willing to help me out in making ArmchairGM's codebase open source.
You can believe that I was very surprised when I didn't receive the standard "sorry, can't do" reply that I've gotten used to getting from Wikia in response to my queries, but rather a sincere reply in which Sean stated that he'd be willing to help me out. Over the next two weeks, Sean worked hard to make sure that the ArmchairGM codebase would be ready to be released by removing private passwords and such things. And then, on August 1, it finally happened.
I was amazed that he took my original request — I had asked for a few ArmchairGM extensions and the skin — a couple steps further and open-sourced the entire codebase!

About the ArmchairGM codebase


The ArmchairGM codebase is based on MediaWiki 1.10alpha; the work on MediaWiki 1.10 started on 8 January 2007.
The current development version of MediaWiki is 1.19, the latest stable version is 1.17 and 1.18 will be released soon. So, as you can see, it's a bit old. After all, ArmchairGM was running on that 1.10alpha until early 2011, when it was upgraded to use the standard Wikia codebase.

Most of the interesting things can be found on the extensions and skins directories.

The extensions directory and its wikia subdirectory contain all the extensions used by ArmchairGM and/or created by Wikia developers — including ones that were short-lived, such as Challenge, or never enabled on ArmchairGM, such as LookupContribs.

The skins directory contains all the skins ever developed by the ArmchairGM staff, including the Sports skin used on ArmchairGM from 2007 to early 2011, its earlier incarnation, called simply ArmchairGM, the Halopedia skin and the Gamespot version of it, and plenty more. It should be noted that while this directory has plenty of PHP and CSS files (and even some JS files), most of the images used by custom skins are not there — some are accessible on Wikia's servers if you know where to look for them, some are permanently gone.

What about core hacks? Wikia has done and continues to do core hacks whenever they need to do something that MediaWiki doesn't support out-of-the-box. So far I've come across a few, relatively minor, yet unmarked core code hacks in the ArmchairGM codebase. I'm hoping that I'll have enough time later this year or the next year so that I can build a diff showing the differences between a standard MediaWiki 1.10alpha and the ArmchairGM version.
Needless to say that such a thing will be quite difficult to do, because "1.10alpha" can mean pretty much any version of MediaWiki between r18957 (committed on 8 January 2011) and r21732 (committed on 1 May 2007) — that's 2775 revisions of code, and the ArmchairGM codebase could've been forked from any of those revisions.

Update on 15 August 2011: I had totally forgotten about the existence of the RELEASE-NOTES file. Comparing the RELEASE-NOTES file of the ArmchairGM codebase to the RELEASE-NOTES of MediaWiki 1.10alpha at various points of development allowed me to track down the revision of MediaWiki that the ArmchairGM codebase is in. I believe that it's either r20138 or a revision very close to it.

To generate a patch file showing the differences between the standard MediaWiki codebase and the ArmchairGM codebase, first export a copy of MediaWiki at r20138:

svn export -r 20138 http://svn.wikimedia.org/svnroot/mediawiki/trunk/phase3 MW-r20138

Then export a copy of the ArmchairGM codebase:

svn export https://svn.wikia-code.com/wikia/branches/wikia-ny/trunk NYC

And finally generate the patch:
diff -ur MW-r20138 NYC > diff-between-NYC-and-vanilla-MW-r20138.patch

Some changes are useless, like the change to includes/AjaxDispatcher.php, some are plain weird (like the various API changes to the files in the includes/api directory), and some changes (mostly the ones to OutputPage.php and SpecialPreferences.php) are a bit hard to read — but hey, there you have it, a file showing what changes were done to the core MediaWiki software by ArmchairGM's developers.
Most of the custom functionality that you once saw in ArmchairGM was done via extensions, thankfully, not via core changes; in addition to extensions, the skins also played a part — skins developed by ArmchairGM's developers usually implemented some custom handling for the main page of the wiki, for example, while a vanilla installation of MediaWiki with the default skin treats the wiki's main page the same way it would treat any other page.

For your viewing conveniece, here's a list of core MediaWiki files (81 in total) which differ between the ArmchairGM codebase and revision 20138 of MediaWiki:

extensions/README
includes/AjaxDispatcher.php
includes/AjaxFunctions.php
includes/api/ApiBase.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatJson.php
includes/api/ApiFormatPhp.php
includes/api/ApiFormatWddx.php
includes/api/ApiFormatXml.php
includes/api/ApiFormatYaml.php
includes/api/ApiHelp.php
includes/api/ApiLogin.php
includes/api/ApiMain.php
includes/api/ApiOpenSearch.php
includes/api/ApiPageSet.php
includes/api/ApiQueryAllpages.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQuery.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryUserContributions.php
includes/api/ApiQueryWatchlist.php
includes/Article.php
includes/AutoLoader.php
includes/Database.php
includes/DefaultSettings.php
includes/DifferenceEngine.php
includes/EditPage.php
includes/Export.php
includes/GlobalFunctions.php
includes/Image.php
includes/LoadBalancer.php
includes/memcached-client.php
includes/MemcachedSessions.php
includes/MessageCache.php
includes/OutputPage.php
includes/ParserCache.php
includes/Parser.php
includes/QueryPage.php
includes/Sanitizer.php
includes/Skin.php
includes/SkinTemplate.php
includes/SpecialAllmessages.php
includes/SpecialConfirmemail.php
includes/SpecialContributions.php
includes/SpecialExport.php
includes/SpecialListusers.php
includes/SpecialLog.php
includes/SpecialMovepage.php
includes/SpecialNewpages.php
includes/SpecialPage.php
includes/SpecialPreferences.php
includes/SpecialRecentchanges.php
includes/SpecialSearch.php
includes/SpecialUndelete.php
includes/SpecialUpload.php
includes/SpecialUserlogin.php
includes/SpecialVersion.php
includes/SpecialWantedpages.php
includes/templates/Userlogin.php
includes/Title.php
includes/User.php
includes/WebStart.php
index.php
languages/messages/MessagesDe.php
languages/messages/MessagesEn.php
maintenance/deleteDefaultMessages.php
maintenance/dumpBackup.php
maintenance/generateSitemap.php
maintenance/postgres/tables.sql
maintenance/runJobs.php
skins/common/ajaxsearch.js
skins/common/common.css
skins/common/wikibits.js
skins/monobook/main.css
skins/monobook/rtl.css
skins/MonoBook.php


Ending Notes


Sure, the ArmchairGM codebase is old and plenty of stuff needs to be rewritten so that it even runs, let alone works properly, on modern versions of MediaWiki.
That being said, I'm glad that the ArmchairGM codebase is now open source — better late than never, as they say.

Thursday, March 31, 2011

Status update on SocialProfile for Q1/2011

This is the first quarterly update about the SocialProfile extension for MediaWiki, from January 1, 2011 to March 31, 2011.

Fixed bugs



  • Bug #26588 — image converting code should use $wgImageMagickConvertCommand instead of hardcoded "convert" (fixed in r79662)

  • Bug #28251 — SQL error in user profile pages (fixed in r84806)

  • Bug #27032 — new EditProfile special page to edit other users' social profiles



Other notable things




Plans for the future



  • Fix all open SocialProfile bugs — currently there are 6 open bugs; most of them aren't too complicated, so it should be possible to get them fixed by the end of the year

  • Improve and release other social tools — Comments, QuizGame, PictureGame, Video...there are plenty of awesome social extensions that need to be cleaned up and released



Do you have a wiki running SocialProfile? What features would you like to see incorporated in SocialProfile? Have some other thoughts, ideas or comments? Please let me know in the comments section.

Monday, September 6, 2010

Moving your wiki from Wikia to another host (off-Wikia)

You've just started a new wiki at Wikia. Congratulations. After a while, the community grows and there will be many editors. The bigger the wiki, the better, right? Most likely so. But with great articles comes great problems. Wikia's many software updates — at least things like Wikia's New New Style, which are purely political and motivated by the need to gain more revenue — can cause problems. What's the solution? Well, Wikia most certainly isn't going to stop applying software updates and writing new code. Would your community like to have a bit more space? There is a solution for your problem(s) — moving to another wiki host.

But moving off-Wikia to another, non-Wikia host is everything but simple and straightforward. Wikia usually refuses to close down the existing Wikia wiki; while it's true that they have every legal right to keep the Wikia site open, it's just not very fair or courteous towards the editors and administrators — the community of the wiki. In the worst case, administrators of the Wikia site may lose their rights on the Wikia site and the Wikia site will still exist and be editable by the world.

History knows of some fine examples. A Transformers-related wiki was started at transformers.wikia.com a long time ago. When Wikia's New Style — that is, forcing the Monaco skin down the users' throats — was introduced over two years ago, many wikis considered moving off-Wikia. This wiki was one of them. The wiki moved to TFWiki.net. Autonomy and total control of the wiki and no problems, right? Wrong. Wikia refused to close down the Wikia site and as an added "bonus", a high-ranking Wikia staff member, along with another staff member, removed the admins' and bureaucrats' rights on transformers.wikia.com, the log reason stating that these people have "moved to tfwiki.net". Well, it's the truth, you can't doubt that. What's noteworthy is that Wikia has no problems using the content created by these people. Sure, free content, but the current transformers.wikia.com is basically an unwanted and outdated fork of TFWiki.net.

Another case study: GisleWiki. This wiki was started at Wikia, but the founder (who, btw, pretty much built the site all by himself) didn't like Wikia's way of doing things, so he moved the wiki to its own domain, at GisleWiki.com. Wikia re-opened the Wikia site and look at it now: no edits for a long period of time and GisleWiki.com has more articles, obviously, because that wiki is being actively maintained by its founder. This didn't stop Wikia staff members from not only removing the founders' rights on the Wikia site, but also calling him a vandal. That's right folks — administrating a community, if you're not doing it as Wikia wants, is VANDALISM!

A more personal example is Jedipedia, the Finnish-language Star Wars wiki. I'm the co-founder of Jedipedia, along with Ufsark. In late July 2010, the wiki held a vote — at my initiative — to move to another wiki hosting service. The vote passed with nine (that's right, 9) people supporting and no-one opposing. Pretty much every active community member voted in the vote. Tells you something, eh?
The Jedipedia community and the administration team knew that Wikia wouldn't let the wiki go just like that, so we inserted a piece of JavaScript code into the site's JS. This JS code redirected the old Wikia site to the new location.
But on August 31st, a Wikia staff member discovered that we had moved and were using JavaScript to redirect the old Wikia site. This said person then proceeded to remove the JS code from our site. JouMan206, a long-serving bureaucrat and administrator of Jedipedia who later resigned at his own free will, reverted the Wikia staff member's action. The next day this Wikia staff member removed JouMan206's bureaucrat and administrator rights on Jedipedia. I must say that this certainly reminds me of the real-life historical event known as Prague Spring...

Moving on, currently there are two Finnish-language Star Wars wikis named Jedipedia: one has a community and is not hosted by Wikia, and the another one which is hosted by Wikia is practically empty in terms of people and activity. But it's not over yet. Dubček was taken to Moscow when the Warsaw Pact forces entered Czechoslovakia and I was about to receive my punishment for...for...for being an innocent bystander who had a solution for the community's problems.

04:58, 2 September 2010 I was blocked on a Wikia-wide scale by another Wikia staff member for "malicious use of javascript"[sic]. I was naturally quite shocked as I hadn't done anything on Wikia for a rather long while. So I sent them a short message; copied and pasted my block message and added "Please explain." This is what Wikia replied to me:


Jack, you were redirecting Wikia sites to your wiki farm, with code that
hid the effect from staff/helpers/vstf. I can (with effort) believe
that others using the code weren't aware that this was a problem, but
I'm sure you were aware of our likely reaction.

It seems it's time for you to move on from Wikia.


Here's a challenge for you, my dear reader: can you find a diff where I added "malicious javascript" to a Wikia-hosted wiki? I tell you that you'll be having difficulties with that task, as there are no diffs because I never added any malicious JavaScript to any Wikia-hosted wiki. Nevertheless, I can say that I saw this coming. All Wikia needed was an excuse, and finally they found a suitable one. Still, this isn't the proper way to treat people who did a lot of volunteer work for you, at least in my humble opinion.
What do you think? Please share your thoughts on this issue with me in the comments section.

P.S. The JS that this post has mentioned a few times is posted here, in case you need to redirect your Wikia site to a different URL address:

if ( wgUserGroups === null || typeof( wgUserGroups ) != null && wgUserGroups.join(' ').indexOf( 'staff' ) == -1 && wgUserGroups.join(' ').indexOf( 'helper' ) == -1 && wgUserGroups.join(' ').indexOf( 'vstf' ) == -1 && wgUserGroups.join(' ').indexOf( 'sysop' ) == -1 && wgUserGroups.join(' ').indexOf( 'bureaucrat' ) == -1 ) {
window.location = 'http://URLofYourNewWiki.example.com/wiki/' + wgPageName;
}

Sunday, February 28, 2010

The past, the present and the future of the social tools

Social tools is a term which usually refers to MediaWiki's SocialProfile extension. SocialProfile consists of 10 "modules" (which actually used to be separate extensions at some point, ages ago), of which 9 are enabled by default. The only module not enabled by default is UserWelcome, which provides the <welcomeUser /> tag. Here's a quick overview of SocialProfile's modules:


  • SystemGifts — award functionality. Awards are automatically given out by the software once the user has reached the specified threshold (i.e. 5 edits, for example).

  • UserActivity — social activity feed on user profile pages.

  • UserBoard — Facebook-like message boards on user profile pages.

  • UserProfile — turns plain old User: pages into cool, social profiles!

  • UserRelationship — friends and foes, which will be shown in your social profile.

  • UserStats — statistics related to social actions (i.e. friending, sending a board message, etc.). UserStats also contains the point system (User Levels)

  • UserSystemMessages — required by UserActivity, stores when a user advanced to the next level

  • UserWelcome — a parser hook extension which provides <welcomeUser /> tag, which can be used to display user-specific info to the current user (when used in combination with WikiTextLoggedInOut extension

  • YUI — a very simple extension which loads the Yahoo! User Interface JavaScript library (version 2.7.0) on every page load, along with some custom functions.



In addition to SocialProfile and its modules, some other social tools are also available in the official MediaWiki SVN repository, namely:


  • RandomUsersWithAvatars — adds <randomuserswithavatars> tag to show the avatars of randomly chosen wiki users who have set an avatar for themselves.

  • WikiTextLoggedInOut — adds <loggedin> and <loggedout> parser tags to show different text to anonymous and logged-in users. Most commonly this is used to display random avatars (see RandomUsersWithAvatars extension) to anonymous users and UserWelcome info to registered users.



The past of social tools


Social tools were developed by the founders of ArmchairGM, Aaron Wright, David Pean, Dan Lewis and Rob Lefkowitz. Then Wikia bought ArmchairGM and hired its developers. Soon enough the magazine-style wikis were launched. Magazine wikis were wikis with social tools and each had its own, unique skin. Gaming.Wikia's was the best, no doubt — it was much like ArmchairGM's current default skin, only darker.
In late 2007, it seems that Wikia started pulling the plug on the magazine wikis. By 2008 there were no magazine wikis left, all of them had been converted into ordinary, plain Wikia wikis.

However, the social tools saw a second coming: Halopedia, a wiki about the popular Halo game series, was converted into a social wiki — complete with picture games, polls, quizzes and everything! I remember when that happened; I was helping the ArmchairGM developers in debugging the 'new' Halopedia.

In February 2008, SocialProfile was released, after I had requested it. At this point, it was lacking some essential features, such as the point system and the special page to remove other users' avatars (Special:RemoveAvatar). But...it was there. Completely open-source. You have to remember that back in 2008, Wikia wasn't an open-source project.

After this, a couple other wikis also got the Halo treatment: GamerGear, a wiki about PC and console gaming gear, Grand Theft Wiki, a wiki about the Grand Theft Auto game series and FFXIclopedia, a wiki about the Final Fantasy XI massively multiplayer online role-playing game (MMORPG).

The present of social tools


The ArmchairGM developers have either left Wikia voluntarily or been laid off, which, according to Wikia, means that there's nobody who knows the code.

Halopedia, GamerGear, Grand Theft Wiki and FFXIclopedia are still running social tools. Halopedia held two important votes in this January. As a result, polls, quizzes, picture games and social userboxes were turned off for Halopedia. Poll namespace extension is still enabled for Grand Theft Wiki, but it doesn't work — try clicking on one of the options of some poll and you'll see what I mean.

The future of social tools


I'm still the (un)official lead developer of SocialProfile extension, and I have no plans whatsoever to quit. Just yesterday Bryan, a fellow MediaWiki developer, fixed bug #22598 — now users using MediaWiki 1.16 or latest trunk can again upload their avatars.

I'm hoping to have more social features cleaned up by the end of the year. Namely, Comments, FanBoxes (social userboxes), LinkFilter, PictureGame, PollNY and QuizGame.

It will be a time-consuming task, I'm sure of that. But then again, I also believe in open source. I know that the social tools are a succeess, and so do the users. After all, what else explains that there are 4 archives of questions from users regarding this extension? :-)

Saturday, February 13, 2010

Idealism is dead

Back in January, I had an idea. A good one, I thought. Wikia operates ArmchairGM, a sports wiki where the social tools originated. My idea was to improve some of the unreleased tools, such as sports network tool. To do that, I needed to access the source code. Here's the catch: these tools are unreleased. Thus they cannot be found on Wikia's SVN.

What to do? On January 20, I emailed Jimmy Wales, the founder of Wikipedia and co-founder of Wikia, about this issue. My email was quickly forwarded to Gil Penchina, the CEO of Wikia, Inc. Long story short, I was asked to come to Wikia's office, either Poland or United States one, and sign a non-disclosure agreement (NDA) in order to gain access to the ArmchairGM source code and be allowed to clean it up. Wikia even offered to pay for the expenses and meals.
I wouldn't have minded signing a NDA, but flying to another country is just not possible for me, at least not anytime soon. I thought I had found a solution: I have a friend who lives in Poland and also is a programmer, so I thought that he could go to Wikia's office. I informed Wikia about this idea, and their reply to this was, "Sure". A few days later they inform us that "I can't let some "guy off the street" we've never met or built a relationship with get that sort of access to our internal systems".

Now, here's the thing: my friend's not just some guy off the street, but a smart programmer who's more experienced in programming than I'll probably ever be. He has a Master's degree and he's trusted in many different places, both offline and online. The major difference between him and me is that I once had global administrator rights on Wikia and he didn't. Big whoppin' deal.

My motive in this whole deal was to help out the greater community -- other users of MediaWiki and fellow MediaWiki developers. So that they'd have the largest possible pool of code to choose from. ArmchairGM's social tools are truly unique, as is its skin. I believed that I could change the world -- just a little, but for the better. Apparently that was a stupid idea. Should I just scrap my skin system rewrite project then, too?

Because Wikia thinks that ArmchairGM is a failed project, they aren't willing to clean up the code themselves. This means that a great skin and many great extensions have been lost forever...unless a developer in Poznań or San Francisco area is willing to negotiate with Wikia. Anyone up for a challenge?

Sunday, February 7, 2010

Bugs

Bugs. Bugs are annoying. And no, I'm not talking about the real life bugs that bug you when you're trying to write a blog about Wikia bugs.
What is the proper procedure when you find a bug on Wikia? Where do you report them? Wikia used to have a Bugzilla for tracking bugs... but a very smart person must have decided it wasn't needed back in 2007 or so. Currently only Wikia staff are able to use Wikia's bug tracking system, when in the past everyone was able to use the Bugzilla. Since July 2008, Wikia's open company test page has stated that Wikia doesn't have open bugtracking yet. Now, we have two options left:

One of these options is Special:Contact, a feature I dislike using because it takes days before you finally get a reply and the reply you get usually says that they're looking into the problem and then you never hear from them again.

The other option we have is IRC, #Wikia on freenode to be precise. And this is where we reported a bug that was caused by the recent move of Wikia Central to community.wikia.com. A number of users have userpage templates to for use all around Wikia, these templates are located on Central (now moved to community.wikia). These templates stopped working after the move. Once I found out they were no longer working, I went to the Wikia IRC channel and asked if anyone knew what the problem was. The first person to reply referred me to a Wikia forum, now, there is nothing wrong with that. But, on the forum it says my bug had been reported 4 days before I reported it, and the forum also makes it very clear that Wikia does not care about fixing this bug. No, they are to busy moving Central around and creating bugs to actually consider fixing them. Now, I know it's more fun to play around while creating bugs and that fixing bugs is not really a fun thing to do, but, the normal users like me would surely appreciate it if bugs like that would be fixed as fast as possible.

And this is when the conversation in #Wikia really picked up, more and more people started to have their say (nothing wrong with that, right?). Well, if you think like that you have clearly not been around #Wikia lately. We were kindly requested to take our conversation to #Wikia-social, and no, this request did not come from Wikia staff because they're not around during the weekend. It was another user who suggested we take BUG REPORTS to a SOCIAL CHANNEL because the main channel is not for "complaining" as he called it.

The discussion then evolved into a heated argument about the fact that Wikia staff doesn't seems to care about bug reports. A shame really, cause all I was looking to find was the answer to a set of simple questions:

1) There is a bug, has it been reported yet?
2) If it has been reported, what is being done to fix it? If it hasn't been reported yet, how soon can someone look at it?

Although I did get an answer to both of my questions (1: yes 2: we don't care, so go bug someone else), I find the way I got them ridiculous. And what's even worse, another question has come to my mind: How the hell are we supposed to report bugs on Wikia?

By the time someone replies to an email sent via Special:Contact the bug has probably already gotten bored and fixed itself. If you go to the IRC channel you'll be met with hostility and accused of "complaining". In the end we'll just have to realize that there is no way to report a bug on Wikia, and even if there is, Wikia does not care about bugs and they care even less about users. We will just have to wait for bugs to learn how to fix themselves.

Wednesday, December 23, 2009

Answers, answers...answers?

It seems that Wikia is not very willing to discuss when they will release the missing parts of answer.wikia codebase — if ever. Wikia's contact form a.k.a Special:Contact is more or less of an alias to /dev/null. It's a shame, really. In my opinion, it's important to allow the users to participate if they want to do so. Now all the users can do is provide feedback and make suggestions. Surely it'd be better if the users could just take a look at the source code and fix the bugs they've found?

I've probably said it before, but I'll say it again just to make sure: it's not my problem if you're running your site(s) on a collection of hacks and quick patches. I've already offered my help and I know when it's not wanted. I just thought that it would've been nice to have an open-source answers platform for MediaWiki (since WikiAnswers is not open source) and it would've helped Wikia too, allowing better internationalization and more bug fixes.

Also, Merry Christmas to my readers — have an open-sourcey Christmas. ;-)

Monday, October 19, 2009

New editors

As you may or may not have noticed, I am a lazy blogger. And nobody likes to read a blog that hasn't been updated for ages.

This is exactly why I decided to add a couple editors to this blog (and in the process removed the "rants of a MediaWiki developer" subtitle, as this is no longer my personal blog) - StarNinja99 (a.k.a Nina) and supergeeky1 (a.k.a El Geeko).
Both are administrators on Darthipedia, the Star Wars Humor Wiki.

Welcome to the team, guys!

Saturday, October 17, 2009

Wiki autonomy...or then not

Back in 2007, I adopted a Wikia wiki named WarWiki. I revived it, imported a fair bunch of articles from English Wikipedia (with attribution, naturally) and so on. Then I moved on to work on other things (such as being a Wikia janitor, but that was quite a while ago) and didn't have so much time for that wiki.

WarWiki was relatively quiet, only a couple edits per week, mostly from random anonymous users. I decided to clean the wiki up a bit, and started by disabling Wikia's Welcome Tool (HAWelcome extension); don't get me wrong, HAWelcome is very nice extension, at least from a technical point of view, but some wikis prefer to do welcomes "old-school" style — that is, to have real users welcome other users instead of bots. I find it quite annoying when the welcome bot leaves a "Hi, thanks for your edit" message to a spambot. No wiki needs any more of those!

So, I disabled Welcome Tool, deleted some old IP talk pages, and also Welcome Tool's user page and its talk page. A couple of days after this, I gave sysop rights to a couple friends of mine, as I thought that they could help me revive this wiki. What a fool I was. The next day, a Wikia staff member undeleted Welcome Tool's user page and talk page and re-enabled the Welcome Tool. So much for that wiki autonomy.

But wait! This story isn't over just yet...

After this stunt, my fellow co-administrators disabled Welcome Tool once again and re-deleted its user and talk pages. Guess what this earned us? Mass-deoppings, that's what. I lost my bureaucrat and sysop rights, and all the people I had promoted to admin status a couple days earlier lost their sysop rights. For a while, WarWiki had only one (inactive) bureaucrat and two inactive admins. All active admins had lost their rights...and for what? Hmm, that's a good question. You see, we were never told the reason! Last time I checked, there was a box on Special:UserRights labeled "Reason for change".



The above is a screenshot of Special:UserRights special page on MediaWiki.org...do you see the box I'm talking about? Yeah, I see it there too.

A page I had deleted earlier, related to Wikia's new "blog" feature, was also undeleted by the Wikia staff member in question. I don't feel that blogs are appropriate for every wiki, and that's exactly why I had deleted the page earlier on.

After a relatively long and painful discussion with another Wikia staff member, I got my sysop rights back — of course, after I had been suspected of "doing a subtle troll". I haven't edited WarWiki since that, because I feel that their behavior towards me was at least highly questionable, if not more.

What does this remind me of? It certainly reminds me of this blog post by Mikko Hyppönen, the Chief Research Officer of F-Secure (English Wikipedia's article on F-Secure). His blog post has a link to Michael Krigsman's Project Failures Analysis regarding Mikko's problems with Twitter; I suggest checking it out. I think this quote sums it up nicely:

”
[...]this situation offers a case study example of immature customer service and suggests problems with the organization’s corporate culture.
”

~Michael Krigsman [source]

Saturday, October 3, 2009

Wiki autonomy

English Wikipedia says the following about autonomy: "Autonomy [...] is also used to refer to the self-governing of a people."
Now, what's one of the largest wiki hosts? Probably Wikia.

Wikia's principles on wiki ownership are, to say the least, interesting. Their ownership page states that "The wikis are owned by the communities. No one user owns any wiki on Wikia. Founders are those who requested a wiki be created, but ownership of that wiki resides with the community as a whole, not only with the founder."
This comment, although not directly related to this issue, by a Wikia staff member is also interesting: "we make those rules, we can break them for our own reasons". (See this page for the source of the quote)

All wikis on Wikia are somewhat autonomous, it's just that some wikis are more autonomous than the others. Like Wookieepedia. It's one of Wikia's biggest wikis. It also has administrators, who block people on the "I don't like you" basis. People like me. See my block log entry there. Now, I admit that I may be a bit controversial sometimes, but if you know me or have read through my MediaWiki.org user page, you're able to tell that I'm not a troll, vandal or spammer. I asked a Wikia staff member to help me with this issue; the person contacted a couple Wookieepedia admins, and after they refused to reply, gave up. To me, that felt like a slap in the face. Or even a punch. I did quite a lot for Wikia before I left the site — thus I believe that they could help me out here. But of course, that cannot be done since "this is a local issue". While my block is indeed unjustified, it's not the subject of this post, I'll be discussing more about it in another post later on.

Darthipedia is one of the wikis where I'm an admin. It is also the largest wiki [source]. But some time ago, it was even larger than nowadays. This, naturally, caught Wikia's attention. They proposed a deal to Darthipedia and Darthipedia accepted it (did they have any other choice, I wonder?). Then Wikia sends in their deletion script to delete the "excess" Jax Pavan pages. The bot targets the wrong pages. One of our admins blocks it. Does Wikia respect this? I think the following log excerpt answers that question nicely:

23:03, 10 October 2008 Toughpigs (Talk | contribs) unblocked TOR (Talk | contribs) ‎ (that was not part of the deal... we can talk about it in IRC or on the forum page.)

22:05, 10 October 2008 Pinky49 (Talk | contribs) blocked TOR (Talk | contribs) with an expiry time of 2 hours (autoblock disabled) ‎ (Once you've gone through with your end of the deal, you can delete the articles, but until then, no)


Or let's take a different example. Arkhampedia is a wiki run by the same people behind Darthipedia. To Wikia, this apparently means that local policies can be overridden. Here's the proof, from Arkhampedia's block log:

19:44, 12 July 2009 Uberfuzzy (Talk | contribs) unblocked WikiaBot (Talk | contribs) ‎ (please do not block staff accounts)

18:32, 12 July 2009 Madclaw (Talk | contribs) blocked WikiaBot (Talk | contribs) with an expiry time of 1 year (account creation disabled) ‎ (unwanted changes "invisible on the Recent Changes" without consulting/informing local community. Please contact administration for eventual unblock)


A recent good example is a wiki where I used to be a bureaucrat until a Wikia staffer came along, deopped me and undid many of my administrative actions. I got my admin powers (but not my bureaucrat power) back after a long talk with another Wikia staff member about why I did such actions. Apparently using your bureaucrat powers or trying to opt-out of Wikia's great new features is a bad, bad thing and that makes you a (possible) troll.

Yet another interesting situation where a small wiki has no autonomy is Gislewiki. Gislewiki is a wiki about Gisle Martens Meyer and its URL is Gislewiki.com. Before that, it was hosted on Wikia. The community, however, decided to move off-Wikia at some point.
As you may know, Wikia rarely closes a wikia.com wiki. They didn't close that wiki either, though I'm not sure if it was ever requested. Before September 2009, Wikia's Gislewiki's main page was displaying a notice, telling people to use the new site instead of the old one. Most interface parts were also hidden with some CSS tricks. Then Wikia noticed this and reverted most of the changes. Keep in mind that the founder of Gislewiki did almost everything from content creation to interface customization all by himself, without much outside help. The community was pretty much the founder. So, anyway, back to the "two wikis" situation. The founder of Gislewiki.com noticed that Wikia tried to revive the Wikia site. He made some subtle changes, such as adding a normal link to the new site on the main page, to the Wikia site. To Wikia, that was vandalism so the founder got deopped — on the site he built all by himself! I wonder when they'll block him for vandalism...

I'm not trying to speak against Wikia, I'm merely trying to show you the other side of the coin.

Sunday, August 23, 2009

Broken users

Special:BrokenRedirects is one of MediaWiki's most interesting - and, ironically enough, probably one of its most broken - special pages. It lists "broken" redirects - i.e. if the target doesn't exist but a page redirects there, the page is considered to be a broken redirect. What's interesting is that it considers interwiki redirects also "broken" in cases where interwiki redirecting isn't enabled.

But interwiki redirects are not broken redirects. The software has no (easy) way of checking - or if it does, it's not used - whether the page on the target wiki exists or not, so it just assumes that it's a broken redirect. This is probably why people use silly "soft redirect" templates.

Soft redirects are - at least in my opinion - pointless. Interwiki redirects are not broken redirects. If you, as an editor, cannot tell the difference between a redirect to a nonexistent page and a redirect to another wiki, then the only one who is broken is you. Not the software and most certainly not the redirect.

So why do I even care? Because:

  • soft redirects are pointless

  • I used to use interwiki redirects *a lot* during my time at Wikia and I absolutely hate getting notifications about new messages on some random wiki I haven't edited more than once



Seriously, just because you don't understand it doesn't mean that it's broken.

Saturday, August 15, 2009

The unanswered questions

Some time ago Wikia relaunched answers.wikia, their questions & answers site. It looked (and still looks) quite nice, so I was wondering how they did it. I looked into their SVN and found something related to the project. A skin, some extensions, some maintenance scripts...but one crucial thing was missing: a class called "Answers". The skin used functions provided by this missing class, which meant that the skin wouldn't work properly without the class.

What should I do? I decided to ask Wikia about the issue on their Q & A site. That's what it's for, right? The original answer to my question was quite vague. So I decided to reword my question a bit. This time I got a better answer: I was told to contact Wikia if I wanted to develop the source code (ah, Special:Contact, how much I love thee!).

Being the nice person I am, I sent in a polite request regarding the matter. I soon got a reply from a staff member who wrote that they'll be making sure that this report ends up to the right people. That was on May 21, 2009. I waited for over a month for something to happen regarding the matter, but nothng happened, so I decided to pay a visit to their IRC channel, #wikia. I was told that the IRC channel is not the place to get support (wtf?) and that the ticket -- my request -- has been forwarded to another person. The person I talked to refused to even tell who this "another person" in question is!

On August 9, 2009 I sent in another request through Special:Contact. The request was short and sweet: "rt#15912 needs some love." The ticket in question, rt#15912, is the one I sent back in May. This time I got a reply from a different staff member and they told me who this mysterious "another person" in question is. I'm supposed to discuss with this person about the source code of answers.wikia project.

But...why should I, really? There's nothing to discuss about, really. If Wikia is truly an open source project, then they should get a developer to commit those missing files. Typing "svn commit -m"adding missing files" file1.php file2.php fileN.php" in command line is not rocket science. Or then I'm a rocket scientist, as are my co-developers.

An anonymous user of answers.wikia (who, for the curious minds, isn't me) speculated that speculated that the delay in publishing the source code is intentional, in order to prevent competitors. I bet that if someone wanted to set up a competiting site, they'd just buy AnswerScript or something similar instead of using MediaWiki extensions and patches.

People should stop thinking open source as a threat and start thinking it as an opportunity.

Thursday, October 2, 2008

Code reviewing made easy

Services such as Google Code have offered code reviewing tools as a part of their service. Their code review tool is so great that even Wikia uses it. Nothing like that has ever been available for MediaWiki...until now.

CodeReview is a MediaWiki extension by Brion Vibber, Aaron Schulz, Alexandre Emsenhuber and Chad Horohoe that provides a code review tool for MediaWikis. You can see a live demo on MediaWiki.org. Privileged users can "tag" commits as "ok", "fixme" and so on and (by default) everyone can comment on commits. Sure, it isn't as fancy as Google Code's (yet anyway ;-), but it's nice to have a "native" solution rather than having to use Google's or some other provider's services. Currently CodeReview extension seems to be requiring at least MediaWiki 1.13 or 1.14alpha and didn't work for me under 1.13alpha.

If you find yourself emailing your fellow co-committers more than often and you just happen to operate a MediaWiki instance, maybe you'd want to check out this extension. Granted, CodeReview isn't perfect and there still are a couple things that the developers would like to see fixed. But trust me, it's quite good start for a code review tool for MediaWiki. I'd most certainly recommend trying it out if you have some moments, a MediaWiki and a SVN to spare.

Sunday, September 7, 2008

The wonders of PHP programming

I decided to update my working copy of regexBlock extension and finish up some work I started doing a long time ago - integrating changes from Wikia's SVN.

Everything looked nice until the update finished. I've got not only one but two files in conflicted state. I fix them and svn up again. Now I've got a clean-ish working copy and I can retry applying the Wikia modifications to my local copy.

One of the major annoyances of Wikia codebase is EasyTemplate class. The class supposedly allows "for easy mixing [of] HTML/JavaScript/CSS/PHP code". If you've ever written code for MediaWiki or taken a look at MediaWiki's source code, you're aware of public function addHTML in OutputPage.php. It does exactly what Wikia's EasyTemplate does, and even a bit easier IMO.

So the first thing I had to do to get the new regexBlock code working was to kill the EasyTemplate dependency. Thankfully that's about the easiest task there can be. Just replace the code referring to EasyTemplate with $wgOut->addHTML( 'code goes here' ); and that's almost about it (not quite, but let's not get into too technical details). Now I've got a working version of the extension in front of me, yay! Time to test it, so I'll add the extension into the LocalSettings.php of my local testing wiki, add the required tables to the database and go to the wiki to see any and all possible issues.

Okay, the special page loads, although the interface looked like as if there was at least one unclosed <div> tag. And then there was something other noteworthy too: one PHP notice (E_NOTICE) and one PHP warning (E_WARNING). The notice was about an "invalid argument supplied to foreach() on line..." and the warning was about an error within a function that used PHP's array_combine function. The warning related to array_combine function was actually very easy to fix, although I could've sworn that the first, obvious and correct fix didn't work the first time I tried it. After a while of trying, the error went away. That was the easy part of the upgrade...

What was remaining was the notice about an invalid argument to some foreach loop. It sounds relatively easy now, doesn't it? It certainly wasn't such. The current code (which does not raise any notices or errors) looks like this:


$selected = htmlspecialchars( ($k == $this->mRegexBlockedExpire) ) ? 'selected="selected"' : '';
foreach( $expiries as $k => $v ) {
$wgOut->addHTML('<option value="'.$selected.'">'.htmlspecialchars($v).'</option>');
}



But when I had moved the code to the main .php file from the template file, I had pretty much copy-pasted parts of the code and it looked like this:


foreach( $expiries as $k => $v ) {
$wgOut->addHTML('<option value="'.htmlspecialchars( ($k == $this->mRegexBlockedExpire) ) ? 'selected="selected"' : ''.'">'.htmlspecialchars($v).';</option>');
}



I do understand the people that hate PHP a bit better now. After I had fixed a couple errors like this, the interface worked relatively nicely.
Of course, I had to fix a couple message names - internationalization (i18n) support was added for regexBlock ages ago, but Wikia had added i18n on their own, which led to a new issue: a message containing some string, say, "permanent block" was called 'regexblock_permament_block' (sic) in Wikia's version and 'regexblock-view-block-infinite' in the official version.
Well, this was relatively easy task to be honest. After all, I only had to compare the two i18n files against each other and alter the message names in SpecialRegexBlock.php.

So, now what? Now I had a working, improved version of regexBlock extension that is error-free. Or that's what I thought myself. I tested the actual blocking mechanism and whoops:


Expiry time invalid.


No wonder that there are comments like "Fuck you, PHP. Fuck you in the ear!" around the MediaWiki codebase.

So, it's back to the drawing board for me, so to say. Maybe I'll have this extension upgrade finished before Christmas 2008, who knows.

Tuesday, September 2, 2008

New blog

It's been a while since I've had a blog. Rather, a long while. I've never really understood the secret of blogging and why so many people keep their own blogs...well, maybe things would change now.

Assuming you remember my old blog, I really didn't have the time or interest required in updating it. And I've always preferred MediaWiki. Granted, I'm a MediaWiki developer nowadays and thus it's kinda obvious why I'm so biased towards MediaWiki than anything else.

I've also enabled anonymous commenting on this blog. Nevertheless, I suppose that almost everyone has a Google account that they can use to comment. However, this is a privilege granted to you — please don't abuse it.

If you need to contact me privately, feel free to email me at jack@countervandalism.net. You're free to post MediaWiki-related questions on my MediaWiki.org user talk page. I'd strongly suggest asking on IRC & mediawiki-l / wikitech-l for help though, because many experienced developers and users monitor those.