My God Charlie!

Ever come across a situation that just makes you think…. What the fuck is wrong with this world?  This is one of those moments.

As I mentioned, Charlie Stross has written a book called accelerando and i’m reading it, and its good.  He has released it for download under the creative commons licence. If you’re not familiar with the creative commons, its a creative licence (so its applied to things like music, podcasts, books) that takes inspiration from the open source movement.  The most commonly seen creative commons licence is the no derivs, no commercialisation licence which basically means you can use the product (read/listen/etc), you can share it with friends and bounce it around the net, but you can’t change it, sell it or use it as a basis for your own work.

I’m not convinced yet of the future of creative commons when it comes to novels.  Music, sure, because free music generates hype, publicity and popularity and thus more people go to your concerts and might buy your cd.  Selective creative commons perhaps too, as it does the same thing.  However some people say that people “Hate reading on a screen and will read a bit then buy the book.” Which isn’t always true. Look at me, I love reading on my pda.

In anycase, i’m getting off the topic.  I went to fictionwise, my favorite ebook store, to search for more Stross books to add to my wishlist.  See, that free publicity worked.  I noticed that accelerando, the book that is released for free under creative commons, is also an ebook for sale.  This by itself, whilst perhaps counter-intuitive, is not overly strange.  There are people who give their work away for free and hope to make a living under the donations model, sort of like artists and patrons of old europe but in a wide-spread, techno sort of way.  This could just be a variation of that.

However, this book, Accelerando, which is released for -free- under creative commons in a completely -unrestricted- pdf format is available for purchase at Fictionwise as a locked down, sewn up DRM protected version.  This is just fucking stupid.

If you’ve been paying attention to my ranting at all, you’ll have an understanding of my views of DRM.  It is my firm belief that they have no place in this world, and i’ve stated why on many occasions.  I think this just goes to show how stupid people can be.  Even with free versions floating around, the publishers still lock the sell version down under drm.

Now, I’ve never bought a drm’d book, movie, software or whatever that I couldn’t break.  I do my research and if I can’t break the DRM, I don’t buy.  When I do buy so called “Protected” books, before I read them what do you think I do? Thats right, I break the DRM.  I don’t do it because I’m a massive super pirate (for a calm considered view on ebook piracy by the publisher who is leading the way and constantly breaking new ground in ebooks see the intro to the baen free library.)  I don’t do it because I necessarly want access to denied functions.  Since I have my pda now I don’t really have a need to print books and I don’t like the artificial voice in the “Read aloud” functions that are disabled.  In fact, to me, theres very little difference between reading the drm book and one without drm.

I do it because I can.  I do it because i’ll be damned if the publisher is going to tell me what I can do with the book I shelled out my hard earned bucks for.  I do it because I might, later on in life, decide I want to read it as a pdf rather than a microsoft .lit file.

I do it to show them that artifiical restrictions on technology don’t work, and make them look as stupid as they are.

Now I -know- that Charlie Stross is smarter than this. Read the first half of accelerando and you’ll know it to, he recognises that current economics are based on economics of scarcity and that this may have to fundamentally change as society moves on.  When a manuscript can, without cost, be duplicated a million times and passed out to a million consumers, you cannot base the cost or price on the old economics of scarcity.  Scarcity no longer exists because the bits are free, its the bandwidth that costs.  We don’t have the same limited resources involved in its creation – paper, ink, physical location – none of these mean anything in the production of an ebook. 

With DRM publishers try to enforce scarcity on a resource that is not scarce.  Charlie Stross knows this.

So I can only hope that this stupid situation occured because the publishers enforced it, not Charlie himself.

Otherwise…. Why Charlie – Why?

New toy – iPaq hx2790

Anyone who knows me (particularly the Minion), knows how excited I have been about getting a new pda and it finally arrived last night.  I would heartily recommend an iPaq to anyone who is thinking about getting a pda, they are fantastic.  My previous one was an old one that work let me use (because no-one else wanted it), so it is a massive step up to go from that to this one.

The hx2700 series is a fairly expensive, top-end business oriented pda so it comes with extra memory, serious security features, wireless – the whole 9 yards basically.  Luckily, I picked one up on ebay for about 200$ below retail (they have just released the 2795 with a few updates, such as a longer battery life).

I chose this particular device for a few reasons – the reason I chose this one above its cheaper siblings was simple – it runs windows mobile 5 instead of windows mobile 2003.  This means it runs on .Net 2.0.  This is a bother in some ways, as hardly any software is aimed at that platform (some older programs work fine, some dont), but that is cancelled out by the fact that it will be a brilliant testbed for me to try out some mobile and ubiquitous programming – something I havn’t dipped into much so far.

But, over all, I bought it to read.  I am a big fan of books, and since first owning a pocket pc (a very old hp one I picked up for next to nothing), i’ve been a huge fan of ebooks.  I have a lot of them, and it is very good to be able to carry around a small library in my pocket.  When I was younger I was one of those people who always had a book in my bag for any waiting period that mighjt occur – whether its riding a bus, or just kicking back after dinner at my parents place in the warmth.  Now I can carry a whole bunch of books.

There are other benefits too.  I am a huge laurell k hamilton fan for instance and read every one of her anita blake novels.  Every one that is, except Micah – her latest, which still isn’t available down here.  However, I can pick it up at fictionwise for cheaper than i’d buy it in paperback, and download it instantly, and be reading it a few moments later.

The main downside is of course that not every author is available as an ebook.  For instance, one of my favorites – Steven Erikson – doesn’t seem to have embraced the ebook revolution.  This is unfortunate, as if he did, i’d immediately buy downloads of every single one and load them all onto my ipaq tonight.

Because he doesn’t, it means I probably wont read his books anymore. At least, not straight away.  A friend of mine got me on to him, so I can always borrow them from him when he is done.  See Steven (or Tor), lost a sale.  Actually, lost about seven sales.

I spent about $520 on my ipaq.  I do spend a lot on books, but when I buy fiction books it varies from about $15 for a mass-market paperback to about $40 for particularly expensive hardbacks, which I dont buy that often.  So I’ll set an average at about $20 per book.

I need to read 26 books on it to make it worth it, purely as an ebook reader, without spending any more money on books. Turns out I have 26 books sitting there unread in ebook format.  The first is accellerando, by Chris Stross, who released it under creative commons.  I’m about halway through it already.

Of course, 26 books is assuming I only used it for books, which as i’ve said, i’m not.  Library of books in your pocket is cool, but Monkey Island on the go? That is beyond cool.

Slave Hack Companion Addendum

Actually, I should probably provide some quick instructions to get you going if you download my utility, it’s not all self evident.

You’ll use the “Run Entry” tab most of all.  I set that up to mimic an average slave run.  You enter the ip and password (option) and then clear the log on entry, so save whatever is there in the “entry log” part (optional) and again clearing when you leave (exit log).  THen just hit add.  That page brings together the functionality of the other pages, where you can review the logs and passwords you’ve save.

If you’ve already been to this particular ip before, it will add the password/logs to that ip rather than creatign a duplicate entry.

Also, the “untried” section, just clicking on one of the ips on that list automagically copies it to the clipboard.  Click log scan will scan -all- the logs you’ve saved and extract any ips it finds. 

The rest should be self evident. Feel free to leave any questions.

Slave Hack Companion V0.2

The last few days i’ve been addicted to a fairly recent browser based game called “Slave Hack” at http://www.slavehack.com.

Its hard to explain it to people unfamiliar with the genre of “Hacking Simulations”, such as Neuromancer (a classic game based on the book by William Gibson) or more recently, Uplink and Street Hacker. If you like any of those games, you’ll enjoy SlaveHack. If you didn’t, you wont like this one either. If you’ve never tried one, heres your chance, though it can be a bit rough and brutal at the early stages as a newbie. One of the things that makes this game so addictive is the fact that most of the machines you are hacking are other players. There is nothing quite like uploading a virus to another player’s machine to send spam out and earn you some needed cash, or turning the machine into a ddos zombie. Or realising that the player you just hacked forgot to clean out their logs and left their bank account number there just waiting for you.

If you’re already a player, welcome. I’ve written a small utility to help store info while you play. It has a few nice features, my favorite being stripping IP’s out of logs automatically so you can store a list of places to visit later. I can think of a few things I might change later, but for now it suits me better than notepad.

Be warned, this is an alpha product. No warrenties, no documentation, no installer. Just unzip to a directory and run. It’ll save automatically when you close the program – it hasn’t crashed for me yet but again, no guarentees. Save often.

If you like it, or have any questions, or hate it, or have suggestions, leave a comment and i’ll do what I can to help.

Get the program here. It requires the .Net Framework 2.0 to run.
Killroy 2.0 is everywhere.

Edit – 29th June, 2007:  Slave Hack Companion has been released under the GPL.  Download the binary and the source at http://sourceforge.net/projects/shcompanion/ 

Well. It’s over.

So ends the Australian campaign for the World Cup.  We got further than anyone expected and proved to the world that we could make a challenge.

But i’m sure i’m not the only one disappointed with how it ended.  I don’t want to insult the Italian team at all, the played a brilliant defensive game and in the end deserved to win as much as we did.  Just not like that.  If I were an Italian team supporter, I’d be no less dissapointed with how the match ended (although, I guess that is balanced by the fact that they one.)

We had controversy in our first match with the official.  Ok we said, anyone can have a bad day. The official even apologised for his worst decision.  The official for the Brazil match likewise made a few errors in judgement, however we didn’t make too much of a fuss – overall we thought the match went pretty well.  No-one expected us to actually beat Brazil of course, and the showing we put in made all Aussie’s proud.

When I saw some of the poor decisions the referee made in the third game I was puzzled.  I would have thought the quality of officials would be better than this in the world cup.

After watching last night’s game, I think it is quite obvious that we are not welcome in FIFA or the world cup.  This might seem a bold statement to anyone unfamiliar with the way Australian football has been screwed by Fifa over the last decade or so, but its pretty obvious to us. So much for kick racism out of football.  I would have accepted even three poorly referee’d matches as just co-incidence, but four matches with obviously poor calls going against the Australian team? Crap.

I just wish it’d gone to extra time. Or even penaltys. Then if we lost, we would have been beaten by a better team and there is no dishonour in that. Italy is a great team, they played a great match.  I just wish they’d beaten us, rather than the referee.

The located assembly’s manifest definition with name ‘xxxxxx’ does not match the assembly reference

This was an interesting problem I ran across today. There are a lot of articles on the net regarding this happening in asp .net, however I was working on class libraries and none of the articles fit this specific situation.

This problem appears when you’ve produced a new version of a referenced assembly, but for some reason your application is still trying to use an older version.  Its likely it would only occur with strongly named assemblies too, as version numbers aren’t checked for non-strongly-named assemblies.

The reason this is such a strange problem when working with class libraries is that visual studio, by default, updates all of your references when they are updated for you.  So if you recompile an assembly (A) that is referenced by assembly (B), then the next time you compile (B) it will update itself to use the new version of (A).  In theory then, this situation should never happen.

Except that things got a little bit more complicated.  I had an assembly (A).  This assembly referenced a type-assembly (B), and another assembly (C).  I had recompiled both C and B and was in the process of recompiling (A).  Each of these libraries had unit tests using NUnit and though they had all passed for C and B, A’s tests gave the error I mentioned above.  The assembly it was talking about was assembly B.

When I recompiled B however, it should have updated the references in A for me.  I also manually stripped out all of A’s references and re-added them, with no success.

The solution to this problem was hard to spot at first because it actually didn’t have anything to do with Assembly A, thats just where the symptoms showed up.  Turned out, Assembly C also referenced Assembly B, and I had recompiled C first.  This means that C was trying to reference the old version of B, whilst A tried to reference the new version.  All that had to be done was a recompilation of C.and the problem is solved.

I guess the moral of this story is keep track of your reference tree and if you’re doing a full library-wide recompile, compile from the bottom up. 

Listbox / Combobox – Data binding using an IList variable

What a pain in the ass this was.  There are fifty thousand tutorials on the net talking about this and all of them give some variation of this:-

System.Collections.Arraylist list = new System.Collections.Arraylist();
list.add(new item(“Woot”));
list.add(new item(“Funky”));
list.add(new item(“EarthCrack”));

_randomListbox.DataSource = list;
_randomListbox.DisplayValue = “SmackTalk”;

Where item is a simple data structure with a string value called “SmackTalk” which will be used as the display string. This is where they all end!  Assuming that what, we’ve completely finished data processing and there will be no changes? No user input or interaction? Argh, I was tearing my hair out!  What they never mention is this.

Unless an IList also implements IBinding (which the most common IList, ArrayList, and its strongly typed sibling List<> don’t.), then changes to the list will NOT reflect as changes in the listbox.

The answer to this is so stupid its almost funny, except for the sheer amount of time (easily upwards of an hour) I spent on this problem tonight. Not because there arn’t other ways to do this (hell, give me a foreach loop any day), but because I hate it when I know something should be working and isn’t.

The solution?  Add this snippet underneath any changes you make to your IList and you want the listbox updated.

list.add(new item(“Killroy2.0IsEverywhere”));
BindingManagerBase bmb = _randomListBox.BindingContext[list];
bmb.SuspendBinding();
bmb.ResumeBinding();

Apparently suspending and resuming the binding process (something you normally do to save processing power and prevent constant refreshing during long updates I guess) forces the list to recheck the IList manually.  Thus, it updates for us.

Thank god for that at long last.