I must be on a roll - two blog posts in a matter of hours.
Like many who live in the UK I know Stephen Fry as a "celebrity" with a love for "gadgets". However, this recent interview demonstrates that he also groks software, design and usability.
My favourite section contrasts what he calls functional software with Apple's offerings (starting around 6 minutes in):
"[It's] as if these devices are only function objects, and that's what Apple realise, supremely, and others are now beginning to realise. The point is they're made for human beings and human beings are first and foremost emotional creatures. We are creatures of emotion. Our emotion hits the brain, this is study-able - you can see this on encephalographs and things. Emotions hit us before cognitive thought and that means that if we have an object that's in our pocket all the time [...] and we take it out it's something we have a relationship with: we touch it, we feel it, we look at it - whether or not we want [to], that means we have an emotional engagement. And therefore anybody who produces it merely to say, "press this it does this, press that it does that" doesn't understand what it is to be human.
Apple understand that we are all, as human beings, people who want to cradle, stroke, fondle, smile, get annoyed, treat "as alive" an object. That's not pretentious, it's not what Ruskin would call "the pathetic fallacy" it is the way all humans respond to what is around us. Apple got this by making us smile, by making us delight in the things they offered. And now, fortunately, all the other big players: Google and HTC and even Microsoft (god bless them), Motorola and Palm - they're all understanding that users want (to use that terribly hackneyed word) an "experience". Not just a series of functions that "this provides that" as if it's a cupboard, a filing system and that's it - they want to hug it and technology finally allows that."
I agree with him: good software puts the human user at the heart of what it does.
This morning I noticed a tweet from Cory Doctrow about a vote in the European Parliament concerning ACTA, the Anti-Counterfeiting Trade Agreement. As Wikipedia will tell you, it’s a “proposed plurilateral trade agreement for establishing international standards on intellectual property rights enforcement throughout participating countries”. Unfortunately, it’s rather draconian, negotiated in secret and has an impact on our digital civil liberties.
Given that I was an a hurry with only minutes to spare I quickly followed this advice (given by Glen Moody who wrote the excellent Rebel Code). I scanned his example text and sent it off:
“I believe that there is a plenary vote today: I am writing to ask you to take that opportunity to sign the Written Declaration 12 on ACTA, which I feel is an important document that deserves your support for the sake of the European electorate and European democracy.”
(This document explains what Written Declaration 12 is.)
Whilst Glenis’s official explained she will respond soon and Emma assured me that “the content of [my] email has been noted” I got the following interesting response from Bill:
“The plenary vote (which has just been completed) is not connected with Written Declarations which “lie on the table for many weeks” hoping to collect signatures. Could you explain, please, why the sake of European Democracy this needs our signatures? You say you “feel” but could you give me the arguments, please ?”
OK… well, as you asked Bill, here’s how I responded (I’ve corrected a couple of typos):
“Dear Bill,
Many thanks for your prompt reply.
A bit of context: I am a former professional musician who now works as an independent software developer / consultant. As a result, the issue of intellectual property in the digital world is of interest to me on several levels (and I acknowledge that ACTA is broader in scope than just the digital world).
First of all, looking at the quick message I sent you makes me shudder as “feel” is definitely not the most appropriate term to use to bring your attention to the issue – let alone persuade you to act. To be honest, I was reacting very quickly to a “tweet” sent out by the well know author and activist Cory Doctrow (see: https://twitter.com/doctorow/status/11026659037). As you probably realise, proof reading and putting forth strong arguments do not mix well with a deadline only noticed with a minute to spare. ;-) Ergo, you’d be correct in thinking this was a compulsive act on my part.
In any case, as you asked, here are my fleshed out (yet pithy) arguments for why ACTA sucks harder than the proverbial black hole:
1) The secrecy surrounding the content of the treaty is wrong
2) It has the potential to infringe upon civil liberties
3) It’s un-enforcable in any case
For each point in more detail:
1. Secrecy
Regarding my “for the sake of European Democracy”... Yes, this sounds bombastic but as the negotiations for this treaty are held in secret and I can only read the proposed wording of the treaty via leaked documents (see here for example: http://en.swpat.org/wiki/ACTA-6437-10.pdf_as_text) I fear that the open democratic process is being subverted. How, for instance, can I and many other like me whose work is directly affected by this treaty “officially” make our voices heard when its content is shrouded in secrecy..? (Granted, I’m writing to you.)
Whilst I understand the need for secrecy in matters concerning the military or security – surrounding ACTA with such secrecy is hard to comprehend especially given the impact it’ll have on many of the EU’s citizens. Unfortunately, it gives the impression that some sort of nefarious hood-winking is afoot… Surely, in an open democratic society citizens should be able to see what their elected officials and government institutions are up to on their behalf..? If this freedom of information is denied to the voter how are they to independently decide how to hold such elected officials to account come polling day? Hence, for the “sake of European democracy” I urge you to do everything you can to make ACTA open to public scrutiny.
2. Civil Liberties
Apparently (see my point about secrecy), the act will allow trademark and copyright holders to force Internet Service Providers (ISPs) to provide information about suspected copyright infringers without a warrant (i.e. due process). The problem here is when the words “suspected” and “without a warrant” are found in the same sentence. To my mind this makes it legal for an invasion of privacy. Hence my concerns for the European electorate (yes, another bombastic remark).
Border checks… fine for heroin, human trafficking and so on… but for mp3 files..? My gripe here concerns a (lack of a) proportional response to a problem (there are far more serious things our border officials should be checking on) and how such checks makes it legal for yet another invasion of privacy.
3. Enforceability
Put simply, no matter what ACTA says – it is relatively easy to circumvent DRM and distribution limitations. Furthermore, because of the nature of the digital medium, once a means to circumvent controls and distribute content is found it spreads quickly. While this is not my area of expertise, I know several people who most definitely are experts in this field and their reaction to some of the proposals ranges from disbelief to knowing amusement.
Concerning the problem of invasions of civil liberties – of course private citizens are going to push against this – see http://www.torproject.org/ for a good example of a mature and well known solution. My fear is that authorities will begin to contemplate control of such software that has quite legitimate uses.
I hope this answers your request for my arguments.
To be honest, this strikes me as a a classic case of political lobbying trumping an open democratic process. The film and recording industry who are promoting the adoption of ACTA have a business model that can’t survive the Internet in the same way scribes couldn’t survive the arrival of the printing press. Let’s not prolong their demise with despotic legislation. Composers will still compose, musicians will still perform, films will still be shot, dancers will still dance, painters will still paint, writers will write and we will still think their work amazing. Please remember that our “culture” does not depend on an “industry” for it to flourish but it does depend on the freedom to share our artistic heritage. Try to imagine what Beethoven would have done if Haydn had trademarked the “String Quartet”.
Finally, I hope you don’t mind, but I’ll share our correspondence with other friends of mine who live in your constituency (mainly in Northamptonshire). As I’m sure you’d agree, it’s important to encourage and make visible participation with our European representatives.
Well done for getting to the end of rather a long email…! ;-)
With best wishes,
Nicholas”
As I explained at the end of the email, this blog post is my means of sharing the correspondence and I’ll post updates should anything result from this exchange.
Edit 1 The other two MEPs just got back to me. Both answered as themselves: Roger Helmer simply explained he was absent and Derek Clark responded as follows:
“Thank you for your message. Yes I was in Brussels yesterday but I did not sign this written declaration. I do not sign written declarations because they always ask the Commission to take some kind of action but the Commission is composed of unelected individuals and I do not believe in handing them yet more authority.
You are quite right to draw attention to ACTA but there are hundreds of issues like this and they have mostly been resolved in the past by Governments acting together in common interest. I do not acknowledge the authority of the European Union.”
Edit 2 Bill has just got back to me. Here’s what he has to say:
Thanks !
Fame at last
And thanks, too, for the detailed explanation – which I have printed out and will study, before deciding “to sign or not to sign”.
I’ve replied as follows:
Many thanks for the response and taking time to study my email. I and many others would be interested in how you decide to act and (more importantly) why. To many of us who are passionate about such issues the movement of thought by which our elected representatives arrive at such decisions is opaque. To my mind, this doesn’t encourage engagement, participation or accountability – essential attributes for a healthy democracy.
I look forward to hearing how you reach your decision.
Edit 3 Bill’s response is to the point:
How do I decide?
At Westminster where there is no separation of powers, MPs do what their party whips tell them to do (or they are cast into outer darkness, out of favour).
In a modern parliament, where whips must be polite, we make up our own minds. It is as, famously, Burke wrote to his electors in Bristol 200 years ago, “I am your representative, sent to exercise my best judgment… I am not your delegate, taking instructions….”
So, I listen to as many sides as offer me advice, also consult my own Liberal colleagues, and then make up my own mind!
The Edmund Burke quote is a great encapsulation of representational democracy and I’m pleased to hear you explain that MEPs have the opportunity to make their own minds up rather than follow a party whip. This is all the more interesting as you are listed at votewatch.eu as the Lib-Dem whip since 2004.
That’s the “how” answered – I’d be most grateful if/when you make up your mind on ACTA to let me know the “why”. Think of it as an opportunity to show that you ”...exercise [your] best judgement”.
I’m not suggesting that you do not exercise good judgement – rather, I simply feel it important that politicians provide evidence of judgement so that the electorate see what they’re up to. Of course, you may disagree in which case I quite understand if I don’t get a response! :-)
In any case, top marks out of all the East Midland’s MEPs for taking the time to respond thus far.
Edit 4 Bill has emailed me to explain that votewatch.eu are out of date: he is no longer the whip. He also explains:
“In any case, EP whips are limited to being very polite, and having no powers!”
Posted by Nicholas H.TollerveyFiled in Miscellaneous
On Tuesday and Wednesday of this week I attended droidcon, the Android developer’s conference organised by the friendly folks at Skills Matter and Kevin and Carl from Novoda – the most enthusiastic mobile software development company on the planet.
Tuesday was a barcamp and a great opportunity to meet people and learn from others. I especially enjoyed Carl’s talk on his work using RESTful APIs from Android (something I’ve been experiment with in conjunction with FluidDB). Other highlights of the day included learning about the Zii Egg and recently announced Trinity device, seeing the worlds longest nested if/else statement (don’t ask – very diagonal) and some really great chats both technical and “blue sky” about the potential for mobile (and specifically Android) devices.
The second day was a more traditional presentation-based conference and we had some great talks. Highlights for me were a couple of presentations that delved into and demonstrated the NDK (native development kit), both of which were musical in nature (spot on for me) and had me dusting off my C/C++ books when I got home. I was also amazed by what Gabor Paller had managed to achieve with his Dedexer tool for Dalvic byte-code disassembly. The “park-bench” and Yan Minagawa’s talk about the future of mobile were particularly entertaining for the group discussion that ensued, and I’d never heard of the c-base space station that had crashed into the heart of Berlin – it sounds an awesome place. Finally, Diego Torres Milano’s talk on test driven development on Android was something I was especially pleased to see on the programme. I advocate and use TDD in my day job (and at the code dojo) – so it was great to learn how to do it on Android.
As always, some of the best stuff was in the chatting over pizza / drinks and in the intervals. Lots of cool pointers and advice as well as a sneak preview of Motorola’s “Droid”.
Great job guys and I’m looking forward to the next one…
(If you can’t wait there is always the Londroid group whose next meeting is on 21st January – I’ll be there).
I’ve recently got back from this year’s Europython conference. It’s a bit of a long post (there was so much good stuff), but here’s my round-up of what I learned, found interesting, intriguing and cool.
FluidDB
FluidDB is a fascinating (if unintentionally secretive) project that I’ve known about since watching this video. The “talking head” is one of the founders, Terry Jones. I was so intrigued by what I saw that I emailed Terry a bunch of daft questions and he was kind enough to reply.
As a result, I was looking forward to two talks about FluidDB: Terry’s own Introducing FluidDB and Esteve Fernandez’s Twisted, AMQP and Thrift. The former being a high level “philosophical” view of whilst the latter being more concerned with some of the underlying (Python based) technology.
I have to admit that it is the “philosophical” aspect of this project that has me hooked. “A database with the heart of a wiki” is the tag line of the project, but, as far as I can tell, that only scratches the surface (Terry also describes it as a metadata engine for everyone and everything). If I understand Terry correctly…
FluidDB is not a relational database but stores sets of tag / value pairs.
Each set represents a “thing”. All “things” are public in that anyone can add tag / value pairs to it.
All tag / value pairs are protected by a strong yet simple permissions based system.
Tags are also “things” that can themselves be tagged (higher order / meta tagging).
Tags are organised in namespaces that are owned by an account (for a person, organisation or application [for example]).
It is schema-less in that the tag / value pairs associated with a “thing” are not predefined.
It is an “open” system in that any account can add data without having to ask permission.
Retrieving data is easy through the use of a simple query language.
It’s been designed to scale.
Given such a back-of-a-postcard (and probably inaccurate) description – why is FluidDB so interesting? Two things immediately strike me:
Free to write, with finely grained contributions (by looking at the tag/namespace one can tell who has contributed what).
Evolution as a means of database development.
Free to Write – Anyone can add a tag / value pair to a “thing”. However, you might not be able to nor want to see everything associated with a “thing”: you might not have permission to view some of the tags from certain namespaces and you might only be interested in those from other namespaces.
Evolutionary development – Because of the “fluid” nature of FluidDB conventions and practices emerge due to evolutionary pressure in exactly the same way they do for our wider social conventions. This is important because, until now, database development (and thus, the way information is organised / presented) has been decided by the likes of me – a software developer – and there isn’t any guarantee I’ll do this in a way that is useful for you (either because of my lack of skill or because I want to retain / impose control and also because it’s impossible to anticipate what people will want to do with things).
Perhaps an example might shed some light…
So a “thing” (Set) consists of tag / value pairs from various namespaces..?
Absolutely!
But what does it represent?
Whatever the tag / value pairs seem to imply.
Actually, there is already a helpful convention for working out what a thing represents: a special immutable tag called “about” whose value is unique and can only be set when the thing to which it refers is created. It allows you [and everyone else] to ask for an object about X where X is something helpfully unique like “NASDAQ:GOOG”.
So, if a “thing” had a “nicholas/title” tag with the associated value “Seven Pillars of Wisdom”, a “nicholas/author” tag with the associated value “T.E.Lawrence” and another tag called “nicholas/ISBN” with the value “0954641809” then you can be pretty sure that I am attempting to describe a book (the tags exist within my “nicholas” namespace). Furthermore, the special “about” tag might have been set to “ISBN:0954641809” when the “thing” was first created – indicating the thing is a book with a particular ISBN.
Contrast this with a regular database schema or API (such as that from Amazon.com) and you’ll notice that they have already defined the concept of a “book” as represented in a “books” table with certain fields defined with certain types and perhaps a many-to-many relation to an “authors” table or other “helpful” stuff. The conventional system is imposing structure whereas FluidDB does not: you invent your own.
For example, the same set might also contain the following additional tag / value pairs along the lines of:
Tag
Value
wahida/location
“Wadi Rum”
wahida/long
29.5765
wahida/lat
35.419928
amazon.com/Product Description
“Seven Pillars of Wisdom is the monumental work that assured T.E. Lawrence’s place in history as “Lawrence of Arabia.” Not only a consummate military history, but also a colorful epic and a lyrical exploration of the mind of a great man, this is one of the indisputable classics of 20th century English literature. Line drawings throughout.”
amazon.com/Average Customer Review
4.5
fred/rating
“10/10”
jill/score
“5 stars”
bill/genre
“Autobiography, War”
Wahida is obviously describing the rock formation that is also called the Seven Pillars of Wisdom and has provided the coordinates for the location.
Amazon.com and Bill have attached some product information and Fred and Jill have both indicated positive opinions.
How do we know the namespace Amazon.com is associated with the bookseller with that domain name? I’ll let Terry answer that question (quoted from an email):
“Fluidinfo will only give namespaces that match domains to the actual domain owner, [so] you’ll know that’s an official amazon tag. That’s part of allowing the evolution of reputation and trust – with a giant headstart seeing as we get to import the trust associated with internet domain names.”
Interestingly, Fred and Jill use different tag-names and scoring systems to represent their opinions. Furthermore, they don’t make it clear to what they refer that has the name “Seven Pillars of Wisdom” (although we’ll probably assume they’re referring to the book rather than the location).
By adding such information we have an example of “Free to write” and an evolving schema.
Assuming all these tag / value pairs are public, then I could start to cross reference information such as the rather obvious “best reviewed books by T.E.Lawrence” to the not-so-obvious “books associated with places in Arabia”. I might also be buddies with Fred and would like to find out what he likes to read but find the publicity bumph from Amazon misleading so select to search using only Fred’s tags.
Over a period of time Wahida might create a new thing about the rock formation, move her tags / values over and associate the original thing (the book by T.E.Lawrence) with the new one via a tag called “named after” that stores the unique ID of her new “thing”. She does this because she’s noticed that other people are making a distinction between a place and things associated with that place.
Also, Jill decides to use the tag name “rating” rather than “score” and to give her marks “out of ten” because that’s just what more people do. Notice that the database “schema” changes as conventions become apparent over time. This is evolution at work as the fitness of the convention is determined by how useful it is to the people namespace authors care about.
Is this such a strange idea? Absolutely not, it’s exactly how we get stuff done in our wider “social” world – for example, like the philosopher John Searle talks about when he refers to social reality.
I’m pretty sure I’ve missed something or not fully understood everything. But then, with no documentation or implementation to explore I’m doing nothing more than recollecting and guessing. Nevertheless, we were told we would get both these things “in a month”. [Edit – Terry has been in touch and given me a sneak peek at the docs – unfortunately I haven’t had chance to read them yet.]
Finally, I spoke to both Terry (just after his talk) and Esteve (in one of those really interesting corridor conversations) and their attitude reminds me of a quote from the introduction to T.E.Lawrence’s book mentioned above:
“All men dream; but not equally. Those who dream by night in the dusty recesses of their minds wake in the day to find that it was vanity; but the dreamers of the day are dangerous men, for they may act out their dreams with open eyes, to make it possible.”
Terry and Esteve are dangerous men!
Best of luck with your venture guys and I look forward to playing with it in the not-too-distant future.
Pythonic Music
I’m a classically trained musician so so I’m always interested to hear about tools for musical composition / development. There were two examples of this at the conference: RjDjpresented by Chris McCormick and a display in the foyer for Ableton Live (who were looking for developers to join their team).
RjDj is an iPhone application that uses “scenes” (akin to musical “recipes” that act as proxies for the original composer) to take input (via the microphone or motion sensors) and mix it with other sounds provided by the composer to produce what I’d call an “auditory experience” that is always unique.
Chris’s boss demonstrates the product in this video (at about 4 minutes in you get to see him use pens, staplers and his mug as the sources of input sounds into a scene):
All very cool.
What has this to do with Python..? Whilst the audio libraries are coded in C++ and the iPhone application is obviously in Obj-C all the glue code is in Python (including a Django based website).
I get the impression that Chris hates developing for the iPhone as we were treated to a very entertaining rant targeted at Apple (I can’t wait to get this on Android!).
I also ended up chatting to the Ableton guys during lunch on Thursday. When I explained I had a musical background they gave me a quick demo, handed me a demo CD and told me to check out the site. Apparently, much of their software is written in Python with only the high-performance audio functionality being written in C/C++.
I’ve had a lot of fun playing with the demo version – I followed a couple of tutorials and then did my own thing. I also had a look around the web-site and their promo-video pretty much sums up what their product is capable of.
Un-conference / Corridor Chats
For me, it is often the corridor chats and conversations over lunch that are the most rewarding aspects of a conference. Europython 2009 was no exception: speech recognition and natural language processing, Zen Buddhism, FOSS in a corporate environment, Django / Pinax, music and software apprenticeship were just some of the topics covered.
Bruce Eckel gave a quick pre-keynote presentation on unconferences – conferences based around a theme and consisting of participant-led talks and presentations. Sounds like my kind of place and, happily, PyConUK this year will be organised along these principles (happening at the same location at EuroPython sometime in September). Can’t wait!
Bletchley Park
I live about 12 miles north of Bletchley Park (in Towcester) and visit several times a year with my kids. As well as being important from a historical perspective (the centre of British code-breaking during WWII and home of the world’s first programmable digital computer) it is also a “grand day out” with lots of things to see and do.
So I was especially pleased to hear the keynote by Sue Black and Simon Greenish about Bletchely Park. Unfortunately, not enough people know about this gem of a museum or its continuing financial woes. The attendees of EuroPython strike me as a sympathetic audience to pitch to and the resulting interest in the authentic Enigma machine (see photo above) and a trip to Bletchley organised on the conference mailing list demonstrated Sue and Simon are onto something.
Lets hope they continue to make progress with their fundraising efforts.
Put simply, Python now has a module that engages with kids like my daughter. Furthermore, she can play – as kids should – in an environment that encourages play as a means of learning. Finally, she can “graduate”, should she choose to do so, into other modules and the wider Python language. Turtle.py is worth its weight in gold (yeah – I know source code doesn’t weigh anything) simply because it facilitates the transition from childlike playfulness to the playful creativity that is programming.
I was also entertained by Gregor’s examples: As he showed off ever increasingly complex software written with the turtle.py module I came to the realisation that everything in Gregor’s world is a turtle. This appealed to my sense of humour – especially when he put up a slide with the text “A Website” and I mistakenly thought he’d written a simple web-server “out of turtles” (I was wrong – he was asking for help with the project website).
IronPython
Prior to my Python work I was a .NET guy so I was particularly looking forward to Michael Foord’sIntroduction to IronPython (it turns out Michael lives quite close to me: two Pythonistas in rural Northamptonshire..? There must be something in the water).
I have a little knowledge of IronPython from my days at Barclays Capital: we looked at including it in a tool I had built so our end customers (other developers in the bank) could customize various aspects of the software. In the end we had other priorities and I left the bank to learn Python.
Michael managed to pitch it just right to newbies like me with feet in both “camps”. I was especially interested to hear how IronPython consolidates itself with non-Pythonic aspects of the CLR (method overloading for example) and integrates with the wider .NET framework. It certainly whetted my appetite and I’m now chomping my way through some of the chapters in his recently published IronPython in Action (a very good read – although I’m still trying to work out what the guy on the front cover is all about, there isn’t a colophon like in O’Reilly books).
Thanks
I want to end with a big “thank you” to all those involved in the organisation and execution of the conference – I had a great time and I’m already looking forward to next year. ;-)
I met up with James Tauber yesterday morning. We had lots to talk about, one subject being how you explain Pinax to developers. We had a lot of fun creating an analogy with Lego (best toy ever invented IMHO).
Lego bricks and your imagination are all you need to build interesting toys. In our analogy, Django is Lego bricks: it gives you the building blocks you need to build interesting things on the web.
Yet rather than building from scratch each time you want to create a toy you can buy off-the-shelf Lego sets for the most common types: cars, trucks, space-ships, movie themed locations, towns and so on…
Pinax is a collection of Lego sets: it gives you a set of off-the-shelf components commonly used in web-development: a wiki, OpenID, Twitter clone and so on…
What’s more, Lego sets are themed and interchangeable and if you really want to do something “out there” you can break them all down to the brick level and re-use only what you need. Pinax’s applications are “themed” (social networking, CMS, messaging etc), interchangeable and, should you want to do something extremely bespoke, they’re open-source so you can re-use only what you need.
Voila, now even my four year old son can understand what I’m up to! :-)