Older blog entries for malcolm (starting at number 109)

Review of "Magic or Madness" Trilogy

Why I'm reading a young adult series has a bit of a back story, explained below. Why I'm reviewing it is just because I haven't seen a lot of reviews of this series around and it deserves some wider coverage, at least in Google searches.


Amongst the numerous blogs I read regularly are half a dozen or so by professional authors. Some of these are people whose books I read and enjoy — I've mentioned John Scalzi here before, for example. Others are people I've come across in one way or another, usually via an author's site I'm already reading. These blogs add a nice extra layer to books, because you can see them being developed, watch the author's excitement as they are released and read the readers' comment. Over the past couple of years, I've probably bought maybe a dozen books based on recommendations or curiosity from these writers.

For various reasons (mostly because they're interesting), some of the author sites I'm reading are"young adult" authors. Now, I'm not particularly young any longer (mid-30's-ish these days) and I'm not even particularly adult. However, having read along as Justine Larbalestier finished the third book of her trilogy and seen the eager comments from her young (I assume) fans, I thought I'd find out what goes into a good young adult novel these days. It was more of an curiosity satisfier than looking for a good book.

The Australian release date for Magic's Child came and went without it appearing in my local Border's — they still haven't got it on the shelves when I checked today — so I did what every decent person with a credit card would do: ordered the series of three books from Amazon.

The Books

I figured you can't just dive in and read the third book of a trilogy, so I read all three, Magic or Madness, Magic Lessons and Magic's Child. They were great fun.

Short version: 8 or 9 out of 10 from somebody way outside the target demographic.

I read fairly fast and at 270-odd pages each, the books felt very short, but I guess this isn't atypical for the genre (based on a rough sampling of books in the teenage section of the local bookshops). Since the timeline of the entire trilogy is only one and a half weeks (with the exception of a jump right at the end of book three), reading one book a night didn't feel like I was rushing the story at all.

Very hard to give much of a synopsis of the storyline, since so much is revealed in a way that is contrary to where you think it is going as you read along. However, generally, the books follow the adventures of three teenagers who have magical powers, but in a universe where magic is not a wonderous gift, but more of a curse — both using it and not using it have grave consequences. There seems to be not a lot of upside to having magical powers in this particular world, beyond short-term gratification, so the concept gives support to a great story about the three protagonsists learning about the wider implication of their "gift" and each dealing with it in their own way. The trade-off between short-term pleasure and long-term responsibility is at the front of the decisions throughout and I think Larbalestier has done a great job of capturing how people of that age might try to deal with the problems. They want to be grown up, but sometimes they just want to be kids, too.

The three main characters were just annoying enough that I figured they had to be well written. Likeable in most places, but you want to throttle them every couple of dozen pages or so. Pretty much normal teenagers, from my experience.

The books are set jointly in New York, USA and Sydney, Australia. Larbalestier is an Australian, married to a Texan (Scott Westerfeld), who lives in both cities. I usually cringe a bit when I'm reading Australian writers writing about Australia for overseas readers (or worse, movies that try to do the same — some of them are just plain awful). However, in this case, I think she's captured the differences between the countries without making either culture seem freaky. There's even some quite realistic-sounding scenes about life in Aboriginal camps and outback townships. The protagonsists tease each other about their different ways of speaking, but it highlights the differences without making them seem wrong. I am (clearly) not a writer, so it's hard to capture quite why this works in this case, for me, and not always in other books.

Since I travel a bit between Australia and the US for work and I love New York (and live in the northern suburbs of Sydney), the descriptions about the differences between Manhattan and Sydney really resonated. It's a lovely city, but it's so different in many ways. Their (the United States peoples') love of all-day breakfasts and serving sizes that could feed a small family of four alone, is something that I have pegged as iconically dentifying about that country and it's one of the many small differences brought out as the characters move between the two countries.

I've been struggling for a few days to put my finger on exactly why I like these books. The storyline isn't particularly complicated. I think it's the characters. Setting aside the slightly flukey setup that all three of them met up in the same ten day period that they had to make life-and-death decisions, which I found a little contrived at first, they are basically very human people. They have real and different interests: The boy, Tom, has an interest in fashion and creating clothes, which is unusual but doesn't feel out of place. One of the girls, Reason, keeps order in her thinking through mathematics and problem solving, so the Fibonacci sequence and perfect numbers put in a regular appearance (making this another entry on my list of books with cool female lead characters who are mathematicians in some sense). The other girl, Jay-Tee is the American and more of a nightlife and party girl. Each characters interests and thinking was consistent and fit in with their behaviour throughout. I like characters with a some depth, but I hate it when they seem to have been brought up with ridiculously improbable and fortuitious things happening in their childhood or present. Okay, in this case, some of the characters have magical powers and that's bordering on the improbable. But the rest of their experiences weren't completely far-fetched. The short verison is that I prefer intelligent, ordinary background characters to Ritchie Rich-style protagonists.

I also really enjoyed the frequency with which I would just start to draw conclusions about one of the characters and my assumption would be challenged (and turn out to be wrong). The timing here was uncanny — I think Larbalestier has a good intuitive sense of how fast the reader is going to form an impression, let's it just start to take root and then has a good laugh to herself as she removes the chair you're sitting on. Either that or she needs to get out of my head, because it was uncanny. This wasn't so apparent in book three as in the earlier books, though, so either I was becoming more wary, or by the time the third book was written, we already knew too much about the characters for much to be surprising. Still, there were a few nice moments of timing even in the third book and it's a writing style I'm going to want to think about a bit more: how does it work so effectively here?


Would I recommend reading this series? Absolutely. I really enjoyed them a lot more than I expected to.

Would I recommend buying them? Harder to say. If you're me, maybe not worth it. Books are not cheap these days and these three were a bit short for three volumes. On the other hand, if I was a teenage me, I would beg somebody to buy them for me or save up my money and go for it (of course, how would I know I liked them so much in that case? And wouldn't Justine Larbalestier be too young to be a published author back then... hmmm). If I was a parent looking for a present for my well-behaved, all her homework done on time, child: definitely.

Syndicated 2007-04-24 00:02:56 from Malcolm Tredinnick

Documenting Helps Design

As a counterpoint to yesterday's quote about designer's being intelligent, here's one I ran across today.

"Before long I figured out that if Caroline [Rose, a technical writer,] had trouble understanding something, it probably meant the design was flawed. On a number of occasions, I told her to come back after she asked me a penetrating question, and I revised the API to fix the flaw she had pointed out. I began to imagine her questions when I was coding something new, which made me work harder to get things clearer before I went over them with her."

This is Andy Hertzfeld in his fantastic book Revolution In The Valley, which I recently bought and am slowly reading. Caroline Rose was writing the first version of the early Macintosh developer documentation in mid-1982.

Good design doesn't happen in a vacuum. You need to road test your decisions from time to time.

Syndicated 2007-04-07 19:41:52 from Malcolm Tredinnick

Odd Python Fact

Using the long weekend to get some intensive hacking done, I'm converting Django's internals to be more transparently unicode aware. All this character encoding twiddling has me thinking about performance, so I've been writing lots of little test programs to time features.

One unusual result that popped up this afternoon concerned reading a UTF-8-encoded file. Contrary to my intuition, this version:

  data = open(filename).read()

was consistently a little bit faster than this version:

  data = codecs.open(filename, 'r', 'utf-8').read()

Admittedly the differences were generally (much) less than 5%, in favour of the first version, but I was a little surprised there was any real difference at all. I'm not worried by this result, but I would have guessed incorrectly.

In both cases, I'm reading in the data and converting it a unicode string. I was running it against some examples I had lying around from Markus Kuhn. The results were consistent if I changed the order of the tests or intermixed them. Aliasing codecs.open to a global variable sped up the second method very slightly, but not enough to catch up. I was careful to pre-fill the disk buffer cache and run each test enough times in a loop for any noise on a single run to be absorbed.

Turns out, the results are closest (essentially identical speed) for files that have mostly one byte per character (pure ASCII files being the fastest) and diverged the most for more complex characters. The runic poem, with lots of three byte characters, and Greek text, which is entirely two byte characters were the most divergent.

Syndicated 2007-04-07 19:26:47 from Malcolm Tredinnick

Software Design Responsibility

Being a public holiday today, I spent the morning lazing in bed and ended up re-reading most of Chris Crawford's book, On Game Design. It's a fun read from somebody who has both experience and opinions.

It also contains a passage that stuck with me the first time I read it and has guided a lot of my design thinking since then (from chapter 18):

"Some people think that open mindedness requires a deisgner to hear out every idea, to give every suggestion its day in court. This isn't noble; it's stupid. Seriously considering every idea that drifts by isn't a sign of open mindedness; it's an indicator of indecisivness. A good designer has already thought through all the basics of the design and so should be able to reject a great many ideas without much consideration, To put it another way, you should already have considered most of the ideas that are put to you; if somebody surprises you with an idea you didn't think of, you should consider it a warning sign that you haven't thought through the design carefully enough. If the rgeat majority of ideas that are offered you have already gone through your mill, you should have no problem rejecting them without much consideration. Other people will consider you a narrow-minded prima donna for doing so; let them. Your job is to build a great design, not gratify your co-worker. Be courteous, but concentrate on doing your job."

I'm not in 100% agreement with this as it applies to Open Source development. There are many areas in a project where the primary developers and designers mentaly or explicitly mark an area as "we'll work that out later" or "to be revisited when we have time". Design discussions in those areas are often fruitful and enightening to everybody.

In many areas, though, the main designers usually have thought through a lot of the decisions and have developed an intuition about what works, what won't and what direction they want to head in. I do think this sort of approach to open mindedness is only applicable for reasonably well established designs by developers with a certain track record of success. Something in the early stages of development or being as a first project should welcome holistic reassessment.

It is not incumbent upon a software package maintainer, even in Open Source circles, to continually revisit and rejustify every decision whenever somebody new wants to challenge a particular case. That is ineffective.

When reading through source code, you can often work out, without too much difficulty, the design thread running through various decisions. Initially, accept that as gospel. Later, as you become more familiar, look for areas of inconsistency. Does the inconsistency matter? Can it be reconciled? Is it actually a cause for problems? True sharp edges or ill-fitting pieces exist in most applications. Sometimes it's best to just acknowledge they are there and move on. Sometimes, you can smooth them off with a bit of a rewrite, although this may force some changes on the users, too. Often, the number of inconsistencies are not as great as people might think. Any number of alternative solutions may not be implemented or even explored in great detail; because they do not need to be. Once you have one solution that fits your design approach succesfully, it's usually pragmatic to move on. Iterative improvements will still be made, but radical design changes aren't as necessary as some people would like to believe.

Finally, the closing sentence in the above quote is an important responsibility for the designer:being polite never killed anybody. Soliciting suggestions, even though you may have already implicitly considered many of them already is a tricky task. You need the haystack, for it contains the one needle that fixes an important problem. Encourage contributors, but ask them to have realistic expectations, too.

Postscript: I probably didn't make it clear why this quote from Crawford has influenced my thinking. It caused me to think.. Because I don't completely agree with it, yet can see some elements of wisdom there, it has made me think a lot about when design discussion are useful and when a project design leader should cut off the discussions and pick a path.

Second postscript: Turns out I've blogged about this quote before (see October 25 and 27 entries on that page).

Syndicated 2007-04-06 21:32:24 from Malcolm Tredinnick

Australian Open Content Licensing

The proceedings of a 2005 conference, "Open Content Licensing: Cultivating The Creative Commons", held at Queensland University of Technology are now available.

I've only read a few articles so far, but the contents look interesting and read well. I originally noticed this via Glynn Moody's "open..." blog and he made a throwaway remark wondering why it took so long to produce. These are well-edited articles. Given the caliber of the speakers (some law professors, judges, lawyers, ...), it's not surprising they are busy people, so a bit of time for the back-and-forth is not unexpected. The results seem worth the wait.

One thing I did note about the list of speakers, though: nobody that I recognised as representing the Australian Open Source community. Yes, Open Source development is not the same as Creative Commons production, but Open Source contributors do generate both a lot of Creative Commons content and tools for working with said content. They aren't completely disjoint fields.

Syndicated 2007-04-03 20:04:29 from Malcolm Tredinnick

Things You Don't Realise Ahead Of Time...

Just over a month ago, I was in a car accident and broke a couple of ribs (ironic, since I don't drive — I was a passenger). Fortunately, that was the worst of the injuries anybody suffered, so it ended reasonably well for all involved. I'm not going to be permanently incapacitated or anything like that. I still look as ugly as I always did. No bad facial injuries that required a miraculous plastic surgery reconstruction or anything like that. Good luck all around.

However, the ribs still hurt... and quite a lot. Doctor tells me today it could be another four weeks or so before I stop feeling twinges when I move anything attached to my left side. I haven't hurt my ribs badly before, at least not that I'm aware of. You hear about how annoying it is when somebody else does it. Believe them! Laughing, coughing, moving in your chair or bed.. even breathing. Ouch. :-(

Turns out the human body is a very inter-connected piece of machinery. You have an arm connected to each side, the shoulder muscles run across the front and sides of the rib cage. Your lungs expand inside the rib cage. There's a (hopefully) beating heart in there. All these moving parts!

I'm just saying, you know?! (Actually, I'm just bitching. You can all go back to sleep now, the whining has stopped.)

Syndicated 2007-04-03 17:44:00 from Malcolm Tredinnick

An Amusing Quote

This let me start the day with a smile...

"One thing that Django does very well is its debug mode error pages. I saw more of those then I probably should have. ;-)"

Django: helping users maintain good humour in the face of periodic failures since 2005.

(From Speno's Python Avocado via Planet Python )

Syndicated 2007-04-02 10:33:35 from Malcolm Tredinnick

Hugo Assigned Reading

The Hugo award nominees for 2007 were published yesterday-ish. I was looking through the list of novels and realised I had only read one of them and had only peripherally heard of two of the other authors. Normally I have a slightly better batting average than that. Must have been a bad year. More likely, I'm getting old and unadventurous in my reading choices — I have noticed I've bought a lot less science fiction this past year.

This called for a spontaneous visit to the local bookshop so that I can mix with the cool people at cocktail parties and talk about the plot twists of each novel. For future reference, if you're going to go to a bookshop to buy the various nominated books, it's a good idea to know what they are! This may sound obvious, in hindsight, but it was an important first step that I did not make. So I'll be going back tomorrow.

For future reference, too, Naomi Novik's book is published in Australia under the UK title of Temeraire , not the way cooler Her Majesty's Dragon title. I'd actually only heard of this book a few days ago because of some randomness on Justine Larbelestier's blog. So Novik was one of the two author's I'd heard of but not read. The other is Charlie Stross, which is an oversight on my part, because I keep hearing good things about his books.

Syndicated 2007-03-30 22:55:38 from Malcolm Tredinnick

Qantas Messes Up Request For Help

Qantas — the Australian international airline — sent out a mass mailing earlier this evening asking for people to volunteer for their Customer Advisory Panel. This option is available to Gold and Platinum level frequent fliers.

I don't mind participating in things like this from time to time and I try to support OneWorld airlines when I travel so that I can have some benefits from being a decent frequent flier.

Except it's been nothing but disappointment so far. The email contained a link to the initial entry survey, which I guess is part of the sign-up process, there being no other obvious way to sign up. The link goes to the right website, but returns an error. It's an opaque link, so no way to work out if there's just a typo. There's a second opaque link to the Terms and Conditions for the marketing drive (which is what this is) does work, though, and it mentions that the whole process is outsourced to a Canadian firm. So much for "buy Australian", but not a huge problem for me — I'm a citizen of the planet, not just one particular country.

Okay, so back to my error page... look in the HTML for any obvious problems. Nothing in the comments. Although somebody needs to run the generated page through a validator or at least something that checks to make sure all tags are closed. The trailing '>' character is not optional in HTML tags.

Let's try emailing their support address, which is linked on the page. Click on the mailto: link. Compose the email containing all the information, including my frequent flier number. Off she goes... hmm... back she comes... :-( Turns out the mail cannot be delivered. The target server did not accept the RCPT TO line and returned a 550. So the initial link is broken, the generated HTML is broken (minor point, but indicative) and the support email address is broken. It's just roses all around.

Now, why am I worried that the current Qantas takeover bid is going to screw around their so-called valued customers? I may have to join my bunker-mentality friends and start cashing in my frequent flier points if this sort of behaviour keeps up.

Syndicated 2007-03-30 19:44:35 from Malcolm Tredinnick

My List(s) Of Working Programmer's Books

A couple of weeks ago, Bill de hÓra published his updated list of ten books for the working programmer. There are other such lists around, of course. Bill's list was the one that most recently crossed my eyesight and reminded me I've been meaning to publish my own list.

It's not completely clear what the rules of this game are, so I had to invent my own a little bit. I've stuck to Bill's choice to be language and platform neutral, as much as possible. Rather than try to pick ten books I think everybody should read, I wrote a list of books I currently use regularly and find useful in my day-to-day work. I've added a few near-finalists and some other interesting books at the end, too.

Any list like this is going to be swayed by the experiences and interests of the author. I realised my list is a bit more skewed towards process than practice than it might have been five years ago. This is partially a reflection of the fact that I've done a lot more project and team management in the last few years than at any previous point. All the books on this list are ones I either consult regularly as a reference, or try to re-read every now and again to keep the thoughts moving around in my head.

In no particular order:

First obvious difference with other "top 10" lists: mine only has eight items. Life's like that sometimes.

I'm surprised that Introduction to Algorithms doesn't get more words written about it. Sure, it's a pretty fundamental book. However, it includes a lot of the basic thoeretical underpinnings about the algorithms and implementation differences for algorithms that just isn't written down in other places. I don't use this book every day, but when I need the details of many algorithms, it's the first book I'll reach for. Still, this really is a fundamentals book, whilst the Algorithm Design Manual is more educational and thought provoking for real world, large information set problems.

I often work around problems that require security of various levels. Practical Cryptography is a bit like Introduction to Algorithms, albeit at a slightly more mathematical level, in that it gives a very solid theoretical grounding in the fundamentals of hashing and encrypting. It is futile to enter a discussion about the security of one approach over the other if you don't know this information and can't back it up with a reference to a book like this. Cryptography being a fast moving area of reasearch, a four year old book is going to show some dating by now, but it's still something I use regularly to back up my hunches or as a citation source.

Most of the others should be self-explanatory if you've read them. There appears to be some genuine controversy about whether Scott Berkun's book on project management is great or gross (see the comments on Bill's post, for example). I was surprised to see that my take was almost identical the thoughts Bill expressed in a comment — the Berkun book is very practical.

I'll just mention, too, that most lists like this include Steve McConnell's Code Complete (usually meaning the 2nd edition). I'm not a great fan of that book. It's a nice read and I have no argument with the content or approach. It's just not a book that I've found helped me a great deal. The McConnell book in my list above, Rapid Development is one I get more use out of as a way of translating between my brain and a more professional, standard way of presenting ideas. Using McConnell's approach and terminology eases the presentation to more formal project managers and decision makers.

There are some near misses. Mostly books that I have gotten a lot of education from, but no longer use on a regular basis because I feel I have absorbed their lessons. All of these books still sit on my shelves, though, and I would give them to versions of myself that were five or ten or 15 years less experienced (not all at once, some require more experience than others to be useful):

  • Master Regular Expression (Friedl)
  • Herding Cats: A Primer For Programmers Who Lead Programmers (Rainwater)
  • Career Programmer: Guerilla Tactics for an Imperfect World (Duncan)

The Friedl book on regular expressions makes a lot of peoples' lists, but I've never really struggled with regular expressions, so once I'd absorbed the lessons on optimisation and testing in different engine types, I found I wasn't going back to it too often. I recently re-read the latest edition and didn't feel I'd forgotten much. I may be weird in this way, though — I enjoy regular expression munging and use it a fair bit, so it stays fresh in my brain.

The other two books are of a much more practical, professional nature. As I worked in different organisations (or even the same organisation with revolving reporting charts), I needed to work a lot more on my pragmatism. I didn't (still don't to some extent) handle bad working conditions well when I'm trying to produce technical product, or manage other people to do the same. So this was an area I needed to put a lot of learning into over the past five years. These books would have been useless to a ten-year-younger version of me, but came along at the right time when I needed them.

Finally, some books that, whilst not indespensible, have been a great inspiration for learning more and thinking in different ways about my areas of expertise:

  • The Deadline (de Marco)
  • Game Programming Gems, Graphics Programming Gems
  • Mathematical Writing (Knuth)

De Marco's book is a great presentation — via fiction — about why project management is hard in the real world. Knuth's book on writing is special because it covers specifically technical writing about theoretical, logical work and focuses on presentation and differing approaches. Although about mathematics (obviously), which was how I first discovered it, a lot of the lessons transfer well to theoretical computer science presentations as well. Maybe not useful to the intensely practical programmer, but more than once I've had to prove that a program or approach worked and document that. The ... Programming Gems books are just a good source of short algorithm fragments and can make learning fun. If you can't have fun in this industry, you're just not reading the right books.

Syndicated 2007-03-26 21:29:38 from Malcolm Tredinnick

100 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!