The confusion of cats.

Quite some time ago I wrote a slightly surreal rant after becoming ever more frustrated with the utterly absurd ways that people break the tools and libraries I maintain. The metaphor I ended up with was intended to describe behaviour that I find absurd, painful and more than a little cruel and it was done in the abstract in an attempt to avoid pointing out specific people and/or projects. Mentioning names always tends to be divisive and drag debate to the merits of the people or projects rather than lead to any useful discussion of the problems caused by poor practices and/or writing tutorials and libraries dependent on devkitPro provided software without discussion of how that impacts on the tools and the habits of homebrewers who use the tools.

Responses to the original post have been almost as absurd as the behaviour that led to the writing of that post in the first place. One homebrewer suggested that it was better to clean your windows with a cat than to end up crashing into a ditch due to not being able to see through dirty windows. That one missed the point on several levels.

Some suggested that the post had rather a tone of superiority and putting myself forward as knowing better than the homebrewers involved. Considering I know why I’ve put the tools together in the way I have and I know best how I intended them to be used I’m not really sure how best to respond to that. There is, however, a long history of adjusting the development environment we maintain in response to constructive criticism from those who use the tools.

Many people proclaimed that they knew exactly what I was talking about and the metaphor was rather apt as well as quite entertaining. Some of those suggested ways in which I might be guilty of cleaning windows with cats but most seemed to be rather missing the context where decisions were made and unaware of why.

Others have considered themselves to be the people who clean windows with cats and want to defend their behaviour which is … interesting. I do have to say it’s not so much the actual cleaning windows with cats I object to – if you want to make your own life more painful than it needs to be then who am I to judge? What frustrates me is the people who encourage others to continue doing absurd things instead of listening to good advice. It’s the terrible tutorials and the workarounds to fix problems that never existed before someone wrote a step by step guide to installing a devkitPro toolchain and then replacing some of the components with incompatible and/or just broken versions.

I may write more in the future about the history of devkitPro and how the toolchains came to be but, for now, I’d like to try and get across some idea of the mission. Many things make more sense with some idea of the objectives we have in mind and the problems we set out to solve. Once those are understood I’d hope that more people begin to understand the frustration we feel and become motivated to help mitigate it.

The primary objective of everything we do is to make homebrew programming more accessible by providing a well defined environment that’s consistent across all the platforms we support. A project created for any of the consoles we support within this environment will, for the most part, compile cleanly regardless of a user’s host OS whether that is linux, OSX or windows. Over the years we’ve progressed from the early days of complex instructions to extract archives of various components through a windows installer & some perl scripts to the delights of using pacman to manage all the components automatically. Everything is aimed towards a potential homebrew programmer being able to get the tools installed and have the ability to build the example code as quickly and easily as possible.

There is, of course, much more work to do and many things currently in progress. We’d like to have better documentation and clearer workflows for those new to homebrew and even those with more experience. Such things take time, energy and motivation which, sadly, can often be in short supply. Those resources become even more depleted when people write their own guides without consulting us on how things are expected to work. If people create “easy” libraries for use with the tools and libraries we supply without consulting us then they’re extremely likely to break as we improve our own software. Treating our software as if it’s just something to build your own product on top of and pretending we don’t exist leads to nothing but pain and anguish for everyone involved. This, especially when it involves instructing users to inappropriately modify their toolchain install, is what I refer to as using a cat to clean windows. Some people just seem to be pathologically incapable of seeing the big picture and understanding that their behaviour impacts on 10s, if not 100s of 1000s of homebrew programmers.

Thankfully there are people around who understand and support what we’re trying to achieve and we are eternally grateful for the suggestions and the bug reports and the contributions we receive. It’s always a joy to see the creations made possible by the tools and libraries we provide. That joy is short lived when we find people repackaging our work without consideration for us or the users who depend on it. It’s especially galling when people use us and the resources we provide as the basis for self promotion then complain vociferously that we’re somehow oppressing them when it all breaks because they haven’t considered or asked how everything should fit together.

Sometimes people claim that they’re just trying to help which, of course, is appreciated but … if people are writing up tutorials and/or helping people to use the tools without reference to the toolchain and library maintainers then the tutorials and the advice are often going to be wrong. When that happens in places outside our influence – i.e. random blogs and forums unassociated with us, then we can’t fix any of it when it becomes out of date. We especially can’t fix it if nobody tells us it exists and it’s extremely frustrating to discover these things because someone has followed a guide or a youtube video from 10 years ago and ended up in a complete mess for no really good reason.

We do need help with many things and it would be good if people approached us before embarking on huge projects that will impact on all the toolchain users. Ideally we’d like to see more collaboration towards making things better for everyone and we have very strong opinions on how that can work best but we need more people who understand the vision. We need more people who don’t buy into the diversity and competition myth, who understand the paradox of choice and who are willing to contribute for the greater good.

We can be found in the places listed at Talk to us, help us make better things.

dslink 2.1.0

I’ve uploaded new binaries of dslink and the installer built with latest libnds/dswifi and some DSi related fixes. Thanks to some poking around by fincs we now have dswifi working with the DWM-W024 boards but still only with WEP unfortunately.

So far there’s still no progress on writing dslink to the flash on the DWM-W024 boards but we may yet find a way to unlock the new chip.

dslink 2.1.0
dslink 2.1.0
View post
177.1 KiB

A slightly surreal rant.

Some days I end up having discussions in various places on the internet where someone has come looking for help with the devkitPro toolchains. Usually I take a few minutes, maybe even half an hour & help someone solve a problem and they’re usually happy with the end result. Sometimes I even get a donation shortly afterwards.

Other days things get a little weird. I was attempting to explain some of this to my partner (who doesn’t code) the other night and I came up with a story that might help make the point a little.

Imagine, if you will, walking out your front door one morning where you encounter your neighbour who has a large tabby cat sitting on his window sill tied to a piece of string. He brandishes an electrc razor at the cat, who makes his fur all spiky, hisses and screeches at your neighbour then leaps up and claws his face drawing blood.

“What on earth are you doing?” you enquire?

“I’m cleaning my windows” says your neighbour.

“What? You can’t clean windows like that!?”

“Sure you can. Look, when he leaps up to claw me with all that spiky fur he brushes against the window and all the dirt comes off” explains your neighbour.

“But”, you say, “This would be so much easier with a bucket of water and a squeegee”.

“That sounds a bit complicated. I’ve never used those before and I don’t own either of those things anyway”

“There’s a shop down the road that sells them, you could have them in half an hour and I could show you how to use them if you like”

“Well, that’s kind of you but I don’t really have time to go to the shops and learn how to use a bucket and a squeegee. It’s taken me all morning to do these windows and I’m nearly done now, then I have to go to the hospital and get some of these cuts stitched up.”

While you’re considering a response to this, another neigbour turns up. “Hi Jeff” he says, brightly. “Cleaning the windows again I see. That cat has made a right mess of you today”

“Yes” says Jeff, “I really should do something about his claws”

“Maybe you could get a domestic long hair instead of that tabby. You could get him declawed at that vet in town and a long hair might have  a better temperament”

“You’re absolutely right” says Jeff, and he takes the cat back inside then heads off into town to see if he can buy a domestic long hair somewhere”

“Why did you do that George?” you say to your other neighbour, “He’d be much better off with a bucket and a squeegee”

“Maybe”, says George, “but he enjoys cleaning his windows with a cat so much”

A few days later, you’re reading the local newspaper and you discover an article Jeff has got published. It’s entitled “How to choose the best cat to clean windows”.

dslink updated again

Martin Korth got in touch to ask about dslink and requested a few improvements since he’s using it to help with research for the DSi updates in no$gba.  I love his notes on the dsi exploit – “Cooking Coach is the best thing ever. This game allows you to make healthy food with dead animals – and, with wintermute’s exploit, it’s allowing to run homebrew code on the DSi” 🙂

I’ve improved the connection speed of dslink a bit by adjusting the way dswifi scans for access points at Martin’s suggestion & these changes are now in the latest dswifi release. Booting minimal a22i compiled nds files doesn’t work just yet but some of the official wmb demos kicking around do boot now when transferred via dslink. There’s no sound or touchscreen unfortunately – the touchscreen is handled differently in DSi mode so I’m not sure that’s fixable without some patching although the audio may just need enabling.

In the meantime, enjoy faster connections & more reliable booting of code with this version. When I get some more time I’ll look into initialising things properly so Martin’s code will boot as well. Pretty sure it’s mainly because the cache is disabled when the nds file is booted which causes issues when both arm7 & arm9 are running in ewram.

For those who’ve been badgering me for the source code I finally got around to tidying everything up & putting it on github. You’ll find the dslink code at, the installer code at and the host application code is in the dstools repo at

DSi Homebrew redux

I’ve now updated dslink with a new save exploit for The Biggest Loser which isn’t blocked on the most recent DSi firmware.

In my original release of dslink I said that Nintendo had “beefed up security” by denying write access to the wifi flash chip but it appears that I was wrong. After some more investigation it turns out that there’s simply a new chip used to store user settings and wifi configuration. This chip appears to contain no writable flash apart from the user settings and storage for wifi access points. Replacing the whole board with an earlier model (DWM-W015 vs the DWM-W024 board in later consoles) restores the ability to write to flash and boot dslink this way. I’m also told that the later boards can be converted by installing a pre-programmed flash chip in the space that still exists but I haven’t yet verified this. I do have some extra DWM-W024 boards to play with but I’m not entirely sure my soldering skills are up to the job – it’s definitely something I plan to attempt in the near future.

For now, enjoy renewed access to DSi mode homebrew if you still have a compatible console.

dslink 2.1.0
dslink 2.1.0
View post
177.1 KiB


Here’s a little something that 3DS homebrewers might like. It’s a wifi code upload tool for quick and easy testing of 3DS homebrew.

I finally got around to porting dslink to 3DS while we’ve been testing some devkitARM enhancements and improvements in the libctru code. The result turned out well so, rather than waiting until we roll out the new updates, I thought people might like the binaries in the meantime. It definitely makes testing code on hardware much less tedious than the current methods available.

I intend to replace the netloader code in hbmenu with the 3DS client side and add the upload tool to the devkitARM binaries soon. Source will be available once we’re ready to roll updates and make sure everything is working properly.

And here’s a little video of 3dslink in action.

Gateway 3DS flashcard bricking consoles.

I’ve just caught up with the disturbing news that Gateway have included code in their latest firmware which bricks 3DS consoles if their code has been modified. The company has implied that they’ve done this in response to the people cloning their cards and using modified binaries of Gateway code.

This is completely unacceptable behaviour – destroying expensive hardware in a fit of pique is  far beyond any idea of a reasonable response and Gateway should face the consequences of their actions.

For that reason I call on all resellers to remove the Gateway 3DS from sale and return their stock for refund citing safety concerns. If you’re currently promoting the Gateway 3DS card in any way, including but not limited to reviews of the card, advertising places to buy the card, tutorials on how to use the card etc, please consider removing links which could potentially lead to purchases. Please stop promoting this company in any way.

I fully understand that you may be reluctant to do anything which may impact on your ability to make a living but the fact is that these cards are dangerous and will lead to the destruction of expensive hardware. The actions of this company are indefensible and I will not condone any justification for not protecting consumers from such unethical actions regardless of the ethics of their own behaviour.

I find the statements from the gaming press that users cannot force Gateway to be held responsible due to the legality of the devices to be completely reprehensible. Journalists should be seeking ways to help the victims of this unethical company, not rubbing salt in the wounds. I’m looking at you, Eurogamer, The Escapist, MCVUK and Nintendo Everything to name but a few.

Getting Xilinx ISE 14.7 Labtools to work on Windows 8

I recently picked up a Diligent CoolRunner-II™ Starter Board to help with a little project I have in mind to repurpose an old PassMe board I have from the early days of DS Homebrew. Unfortunately when I installed the Xilinx Labtools and tried to obtain a license the Xilinx License Manager (xlcm.exe) decided to crash on me.

After a bit of googling I found out that Xilinx don’t support Windows 8 (what’s that about? It’s really annoying) and although there were several workarounds listed none of them seemed to apply to my installation. I managed to fix it eventually though so I’ve documented the process in case it might be useful to others.

  1. Rename <install location>\Xilinx\14.7\LabTools\LabTools\lib\nt64\libportability.dll to libportability.dll.orig
  2. Rename <install location>\Xilinx\14.7\LabTools\common\lib\nt64\libportability.dll to libportability.dll.orig
  3. Copy <install location>\Xilinx\14.7\LabTools\LabTools\lib\nt64\libportabilityNOSH.dll to <install location>\Xilinx\14.7\LabTools\LabTools\lib\nt64\libportability.dll
  4. Copy <install location>\Xilinx\14.7\LabTools\LabTools\lib\nt64\libportabilityNOSH.dll to <install location>\Xilinx\14.7\LabTools\common\lib\nt64\libportability.dll

Hey presto – working Xilinx License Manager. I hope someone else finds this useful.

Please join me in supporting the Open Rights Group

To all my internet friends.

You may know that I am a supporter of ORG , the Open Rights Group, which aims to promote and preserve rights on the internet and provide sensible information to politicians, parliament and journalists about technology. ORG relies on its supporters and we’re having a recruitment drive to fund a Legal Officer to allow ORG to intervene in legal cases.

If you are concerned why people are being arrested for being foolish on Twitter, or worried about the Government’s plans to ‘spy’ on the whole internet, these are typical of the areas where ORG is fighting for your rights. You can find out more at the campaign page, or grab me online in one of the many IRC channels I hang around in if you want to chat to about what ORG does and why I’m a supporter.

You’ll get a free copy of Cory Doctorow and Charles Stross’s new book – the Rapture of the Nerds. Cory and Charles are both ORG supporters and so is Neil Gaiman: here’s why. Your support will really make a difference. The target is 300 new supporters to fund a full-time Legal Officer. Please be one of them!

If you join me in supporting ORG (it’s only £5 a month) using this link then I’m in with a chance of winning a Raspberry Pi or a MaKey MaKey:

I’d really like you to join, because this stuff is going to affect our digital life for years to come.

Putting Curiosity in Perspective

Yesterday I got involved in a slightly disturbing argument on facebook prompted by a rather misleading image that’s been doing the rounds. I assume it’s a response to the Dear Religion image on the left which I found kind of amusing but does imply that all religious people are anti science. Personally I’ve met some religious people who are quite open minded in other ways so, it seems to me, they’re not all hopeless creationists.

The image that started the argument was this one that claims the rover which just landed on Mars cost $100billion – a number that can be refuted with a simple google search which hardly qualifies as in depth research. An article on Space News about the Mars Science Lab  cites the cradle to grave cost of the mission as $2.5 billion or, to put it another way, this image claims the mission is costing some 40 times more than it actually does.

What angers and appalls me most about this particular image and the resulting discussion isn’t so much the lack of accuracy as the wilful ignorance and lack of perspective that goes into creating and sharing this kind of misinformation. I was asked if I thought it would have been kinder to spend that money on sick, hungry and deprived people which led me to do a little research.

According to the fast food global industry guide the global market for fast food was worth $252.9 billion in 2011, or some hundred times the cost of the Mars Science Lab. Even worse, that figure is for a single year and the mars mission is amortised over 8 years so it’s more like 800 times the cost. I have no idea how to begin placing a value on the benefits that the space program brings to society or the horrible costs the fast food industry brings to the table in terms of health problems and environmental damage.

I also took a look at some figures for purchasing power parity gross domestic product of the 10 largest economies of the world and plugged a few figures into a spreadsheet to try and put the numbers into some sort of perspective. Averaging out the numbers shows that Curiosity cost the population of the 10 largest economies approximately $0.70 per person and apparently the fast food industry takes around $70 per person per year.

Here’s the spreadsheet – play with the numbers, form your own conclusion. I’m just going to finish off with another amusing image.

Follow Me