How I fixed my Logitech G500 mouse click problem

Several months ago, my favourite gaming mouse, a Logitech G500, developed an annoying problem that I will call “ghost clicks”. This is how I explained it to Logitech support:

If I hold the left mouse button for a long time, such as if I want to select a long section of text, it will randomly “let go” and my selection will be broken, even though my finger did *not* let go. Another case is if I click and hold a scroll bar to slowly scroll a webpage, it will randomly “let go”, as if the button released and re-clicked by itself.

Fortunately, Logitech has an excellent 3-year warranty and my mouse was only 2 years old, so they sent me a brand new G500s (the G500 model is now discontinued). Being the holiday season, I decided to gift the new one to my brother, use a spare mouse at work (3.5-year old MX518, still going strong!), and make do with my semi-broken G500 with the ghost-clicks at home.

Long story short, I had a mouse that still felt and looked great, but with a left mouse click that only worked about 70% of the time. This is just tantalizing enough to convince you that everything is OK, and then BAM! – a ghost click when you least expect it. After a few months I was determined to fix it. Read more »

Kongregate Night-mode script

This is a bookmarklet that sets a dark background colour on Kongregate game pages. The goal of this script is to dim nearly all the elements on the page, so as not to distract the player with bright lights, while keeping the chat box and achievement tabs legible.

The script works on Chrome 23 and IE 9, but doesn’t work at all only partially works in Firefox. The reason is this script relies on the $ and $$ functions that are defined in Kongregate’s javascripts. Apparently, Firefox doesn’t allow bookmarklets to access those. EDIT: This did not work in the “javascript:” URL version, but works in the bookmarklet version. However, still only half of it works in Firefox, because Firefox rejects my modifications to the CSS rules, throwing “Error: SecurityError: The operation is insecure.” This rule modification is required for dynamically inserted elements, like chat messages, to use the dark style. Firefox-compatible version to come later.

Kongregate Nightmode Screenshot

EDIT (Dec. 11, 2012): I updated the script to version 2, which colourizes more elements.

—> Instructions to install the script here <—

Read more »

Banjo-Kazooie Maps

I found these maps originally here, but there were two level locations missing (Clanker’s Cavern and Freezeezy Peak), so I decided to edit them. I added level labels, as well as colour-coded the cauldron portals — cauldrons with the same colour dot teleport to each other.

Here are the improved maps for Banjo-Kazooie, one of my favourite games on the N64:

Reversola – Reverse Engineering Sola Rola



I was browsing the Kongregate forums one day, when a post caught my eye. It was a list of broken games on the site that still had achievements to earn, and the clever ways that people had found to progress in those games far enough to earn the achievements. Sola Rola: The Gravity Maze was one of the few that hadn’t been solved. This game was interesting because not only was it broken on Kongregate, it was also broken on every single other Flash game portal out there, including the game’s own sponsor Gimme5Games and the website of its creator, EvilFree Productions.

This was a simple physics-based game where you rotate the environment, similar to Loco Roco, but with its own cheeky characters having to navigate a maze. Around September 24, 2010, something changed that broke the game. No matter which website or computer you accessed it from, the game would show the sponsor logo and then a blank white screen. For two years, seemingly no one could figure it out, so in September of 2012, I set out to investigate it myself. Two weeks later, with the help of the Kongregate community, we were able to recreate the original levels to get a working version of the game for people to play and — if they are into this sort of thing — earn the achievements.

Why it Doesn’t Work

A few people already found out why the game doesn’t load. When the game starts, it tries to load two XML files: translate.xml, containing language strings, and levelList.xml, containing the level list. The problem is these files were ONLY located on the Gimme5Games server and the files are now nowhere to be found. This explains why the game was broken no matter which portal hosted the game (SWF file). After an hour of fruitless searching through internet archives, and several efforts to contact the developer, it was clear the original files would not be found. Another approach had to be taken.

In April of 2012, askon, a Kongregate user, posted the source code decompiled from the game’s SWF file, and a way to fool the game into starting with an empty XML file. All that was missing were the contents of that file — the level data! Fortunately, someone had recorded every single level of the game on Youtube, so we had hope to reconstruct the levels, if we only we knew the structure of the XML files. That is where I would come in. More on that later.

Getting the Game to Start

Network diagram

The hosts file entry bypasses the DNS lookup and redirects requests to our server.

When the game starts, it requests the XML files using ordinary HTTP requests to “” and “”. Since those are gone forever, we need the game to look for those files on a different server — one that we control. One obvious way would be to modify the compiled SWF file itself, however that wouldn’t allow us to earn achievements on the Kongregate site. Instead, we will redirect the request at the DNS lookup step. The easiest way to do this is to modify the “hosts” file of the local machine. Now, instead of asking a remote DNS server for the IP address of, our PC will simply use the entry in our hosts file.

Read more »

Spoiler-free VODs for Eurocup 2012 on TSN offers free video-on-demand (VOD) replays of full Eurocup matches this year. However, on the same page, they also have links to highlight clips, whose titles are unfortunately shown along with the final scores. So if you were planning to watch a full match, the result has already been spoiled once you visit the page. My brother brought this up, and I came up with the following solution – a user script to hide/remove the scores from the VOD page.

There are two scripts. The first simply removes any numbers from the Highlights row. The second removes the entire Highlights row, including the thumbnails (which could be a spoiler as well). Use whichever you like. The 2nd script is best for maximum protection from spoilers.

How to use these: AFTER the VOD page has already loaded, copy one of the scripts into your web browser’s address bar and hit <Enter>. (You will have to avert your eyes at the beginning to avoid seeing the scores before the script runs. An easy way is to resize the browser to a small size before going to the TSN site.)

Note for Google Chrome users: Chrome has a security measure that won’t let you copy/paste a URL with javascript in it. When you paste, “javascript:” is automatically removed from the beginning and it won’t work. The solution is to manually type “javascript:” in front of the URL. To minimize your typing, I suggest copying the script starting from the second letter, i.e. “avascript: …”, manually typing a “j”, then pasting the rest.

This was tested to work on Google Chrome (v19) and Mozilla Firefox (3.6).

* Scripts to remove spoilers (scores/results) from TSN video on demand
* Author: zAlbee, 2012-06-13

Script 1. Replaces all numbers with X:

javascript:var list=document.querySelectorAll(".playlistitem");
for(var i in list){
var childs=list[i].childNodes;
for(var j=0;j<childs.length;j++){
var ch=childs[j];

Same as above, but on one line:

javascript:var list=document.querySelectorAll(".playlistitem");for(var i in list){var childs=list[i].childNodes;for(var j=0;j<childs.length;j++){var ch=childs[j];if(ch.nodeName=="H3")ch.innerHTML=ch.innerHTML.replace(/[0-9]+/g,'X');}}


Script 2. Removes entire highlights row:


That’s it.

Why I sold my Apple iPad and bought an ASUS Transformer tablet

When Apple first announced their first ever tablet, the iPad, I wasn’t too interested. Like many people, I laughed it off as a giant iPod Touch with a silly name. A large, expensive touchscreen with no physical keyboard or buttons, running only toy apps designed for an iPod/iPhone, minus the phone capability — sounds pretty useless, right? (Well, we all know how that turned out.) Imagine my surprise when my fiancée’s father had already bought one — with 64GB and 3G, no less — and moreover, he didn’t have a use for it, so they were going to give it to me! I wasn’t sure whether to be excited or tell him he’d wasted his money. After all, I didn’t have any real use for it either, but it would be my first iOS (actually my first Apple) device, and I wanted to see what all the hype was about.

Fast forward 10 months later, and I was starting to find a use for the tablet… in bed. No joke. I kept it on a nightstand unused for weeks at a time (a testament to the great battery life), and only picked it up after an especially tiring day, when I just wanted to lie back and relax. (Why? If I’m awake, I’d be using my real laptop connected to a 23″ monitor at my desk.) I loved the large touch-screen, the light weight, and the long battery life, but it was also frustrating. So much potential, but there was so much that I just couldn’t do.

Read more »

Kongregate Stats and Graphs

Some interesting graphs I conjured up a while back for achievements earned on Kongregate, the popular Flash gaming portal.

Graph 1: Users with X number of badges

The first one is based on user data collected by MrRubix in late August 2011. It shows how many users have collected a certain number of badges. The data is very bottom-heavy, so it’s using a log scale (for amusement, the graph using a standard scale is mostly useless). 744670 users have only 1 badge, while only 23 users have all 1593 badges (the max number at the time). Interestingly, the graph is mostly descending until the end, where there’s a sharp increase.

The next set is generated by my own script:

Graph 2: Earned Points over Time (zAlbee) Read more »

2011 WTF Games of the Year

I have updated my annual list with 3 games!

This year’s winners are a pair of deceptively simple but frustratingly difficult games, QWOP and GIRP. Plus I added an extra one to 2010 for fun. Click below to see these reviews and more:

zAlbee’s WTF Game of the Year

Ghost House Wallpaper

I was playing some old SNES games on emulator and decided to make a new desktop wallpaper, inspired by the SomethingAwful thread of 2003 (yikes, that was a long time ago). The idea was that, with computer monitors being so high resolution, you could fit a lot more on screen than a Super NES on NTSC TV’s 480 lines, or whatever it was. That is, you could fit an entire game level. However, 8 years ago, I didn’t have an HD 1080p monitor… now I do. Last last weekend, I made a new one:

This wallpaper contains the complete Super Mario World level, Forest of Illusion Ghost House. Stitching together screenshots from the game takes a lot of time. Fortunately, Stefan Mahrla already did most of the mapping work. I rearranged and edited the little things, like replacing labels with original sprites and adding extra space for the taskbar. Notice that even at 1080p resolution, the image is scaled down from the original size of 2816×1584! Click below to download.

Forest Ghost House Wallpaper by zAlbee – 1920×1080 (581 KB)


Moving to WordPress for CMS/blog software instead of editing my own HTML. Let’s see if I pay more attention to it now. I just wasn’t updating the old way, not for lack of content, but because of a laziness threshold that needed to be surpassed whenever manually updating things.

I thought it’d be painful to port over my old content, but so far that’s not the case. I can backdate things without touching the database. I’m also trying to restrain myself from hacking the code to bits, like I did with the IMmerge website. Embrace the built-in features… *deep breath*

I have to say, the dynamically PHP-generated pages load noticeably slower than static HTML. Maybe it’s the server.