www.andymorris.com.au

For the past two months now, Dave and I have been furiously designing a new product called Chorus. This is a large shift from our previous product, but we feel confident it was the right direction to pursue. What Chorus does is allow you to quickly and accurately gauge how happy your customers are based on what they are telling you. This tool will be very valuable for any company that emphasises their customer support as it measures what your customer support efforts are all ACTUALLY driving at: making your customers happier.

So how does it work? Chorus analyses all of the emails that customers send to you as well as taking into consideration things like Tweets and other social media channels. Chorus feeds this into Opinionator, which is a system combined of both NLP (Natural Language Processing) algorithms and human analysts in order to obtain extremely high accuracy. This data is then fed into various graphing, analysis, alerts and reporting systems that present the results in an easy and intuitive way.

There are three main ways we think companies will use Chorus:

  1. Customer Happines Metrics: In order to track the actual effectiveness of customer support improvements and changes in a company. Chorus offers the ability to track sentiment over time and see exactly what effect any change had to the happiness of companies.
  2. Urgent Customer Support Request: Chorus can help easily prevent an emergency where an important customer’s complaint slipped through the cracks and caused real issues in your relationship. With customisable email and SMS alerts, Chorus helps prevent this situation from ever occuring.
  3. Email Prioritisation: Answering the most important emails faster than those of lesser importance can be critical in maintaining the best relationship in your customer relationship. The trouble is, how do you know what the most important emails are before a customer support staff member has opened and read each one? Chorus can help solve this problem by allowing you to sort and group your emails by the customer sentiment: The unhappier they are, the sooner their issue will be responded to. This can easily turn a dissatisfied customer back into a loyal fan.

We have already seen some very promising responses to Chorus from customers and we have some big plans on how to further improve Chorus. We are developing a self-contained installer package that will allow customers with standard server and email setups to quickly and easily install the package themselves without requiring our assistance. We have a bunch of new features we plan on adding to our existing analysis and reporting dashboards. We have some ideas on how to further improve Opinionator to make it even more accurate (if that’s even possible!).

Chorus: Software that will make you sing!

Pivoting

Pivoting (changing the direction of your business somewhat) is possibly the most critical decision in startup world. Given that a startup can be defined as a process for searching for a business model, it is then unsurprising that you’re unlikely to find it with a first attempt! The trick is that the ability and willingness to pivot can, at times, run headlong into another desirable attribute for startups: determination and persistance when all seems lost. The skill of pushing as hard as possible while still recognising that the current approach isn’t working is possibly the most important skill for a startup.

When Dave and I started out, we first started designing Fedang. We have now pivoted and are not doing Fedang. To anyone in the startup world, this is one of the most natural occurences in the world, yet when I tell anyone else about this, they are immediately skeptical - they think you’re flaky and not really serious. “You can’t follow things through!” This attitude is frustratingly common, but I think I can credit this to people’s general lack of knowledge about startups. To most people, a business model is natural and relatively unchanging - you get a job, they tell you what your part of the working business model is and then they diligently execute that part. The long and complicated process of reaching that stage seems to be a big unknown to those that have not attempted it!

The trouble we were having with Fedang is that the vast majority of people on the internet participate with the internet in a strictly read-only fashion. They never leave a comment on a page and don’t really care about reading the comments of people who do. With Fedang, our aim was to be enticing enough to convert a portion of these read-only viewers into seasoned net commentators. Not the simplest of tasks! This is not to say impossible though - we fully believed (and still do!) that Fedang has the potential to be a great product, one that supersedes the need for the current array of seperate solutions to solve the problem of allowing feedback from readers. We do think that perhaps Fedang is a little ambitious for us at the moment, and we have settled on a somewhat simpler but much more realistic business direction. 

What, then, are we doing now? That is the topic of my next blog post, but in short: Chorus. Chorus allows you to quickly and accurately gauge how happy your customers are. We have been furiously working on Chorus for about 2 months now and have seen some very positive results already. I fully believe that pivoting from Fedang to Chorus was the correct decision and that things LIKE pivoting the business direction in some fashion will be required many more times before we arrive at a truly stable and repeatable business model.

Fedang

For a little over 2 weeks now, Dave and I have been feverishly working on www.fedang.com! The whole process has been awesome - creating things is always rewarding!

What Fedang is

Fedang is a service that allows you to track and display all comments, opinions and content that you publish to the internet, whether it is a blog, comment on a news article or a review for a movie you’ve seen. No matter where or what it is, you can track it using Fedang.

Once you’ve tracked all these opinions, what then do you actually do? You can use an amalgamation of these comments to build up and present a view of yourself online. This happens very naturally - simply browse around the internet like normal, leave opinions on things that you are passionate or knowledgable about and your Fedang profile will stay up-to-date. I like to think of this as an easy way to get most of benefits of actually blogging.

One cool way we think Fedang will be used is to browse your friends profiles. You can easily find out cool and interesting articles on the internet - just look at what your friends have been commenting on! We are also planning on creating a service that suggests interesting things that you might be interested in based on what the people you like are commenting on and reading.

Blog Features

If you are a blogger (and if not, why not?!), we have a few additional services we think are really cool and valuable for you. We have created a little widget that will automatically pull your comments and opinions from your Fedang feed and update your home page. I personally really like this feature, as I sometimes struggle to update this blog as much as I’d like, and to have some interesting content on the page between updates is awesome!

This also has the effect of transforming your page into a form of aggregation service, where people can come to find the interesting parts of the web according to your tastes. This could become a great way to attract people to become repeat visitors to your blog - there’s always something new and interesting there, even if it’s just your opinion on some cool article!

We are also in the middle of implementing a feature to allow you to automatically publish select comments as actual blog posts, where the post consists of your comment, maybe some context and also a link to the article. That way, if you write a particularly good/interesting/funny response to an article, you can incorporate that as a part of your blog, allowing easy addition of content to your blog - no longer will all those things you write fade into obscurity on the internet!

The Creation Process

Developing Fedang has been an awesome experience. The process has largely consisted of working in my apartment, drinking frankly ridiculous amounts of Fedang Fuel (aka Coke Zero) and working until the silly hours of the morning - then waking up and repeating the process!

As expected, everyone was right about how challenging and tough it can be at times. Having invested myself fully into this idea, it certainly can be a downer when you get less than positive response from marketing efforts. By the same token, though, a positive response rocks your world!

Lessons Learned

Good tools are awesome! I really underestimated the impact that the editor I use has on my productivity. I have done all my coding in Vim so far, something I had limited experience before I started this project. I don’t think I could go back to using a Visual Studio-style IDE now - I didn’t even realise how much better a coding environment could be until now.

Those tools extend to the OS as well. Especially for development, Windows pales so far in comparison to a Unix-based OS that it’s really difficult for me to conceive of going back to developing on a Windows machine again. I love the lack of registry, and the file system is way more logical. I have found that, even as a relative Unix newbie, I have had very little trouble in getting things like FTP, SVN, Django, multiple versions of Python, Apache, mod_wsgi and more up and running both locally and on a remote server. These are tasks I wouldn’t really want to tackle on Windows machine, despite nearly two decades of experience with Windows. Everything is designed so much better on Unix, everything works together and everything behaves in predictable ways. Sure there are a few exceptions to this but, by and large, it’s been a very pleasant experience on Unix.

Python and Django have been similarly impressive. There have been a few little hiccups (adding new fields to the User model class seems very needlessly complicated) but, overall, Django and Python have lived up to the hype, making it very quick to setup the whole site, databases and all. I’m still yet to require any real debugging on anything I’ve coded for Fedang, which I think is a real achievement - I’m still a newbie to both of these, remember!

The Road Ahead

We have big plans for Fedang. Our biggest challenge right now is to get more people using it! To this ends, we are looking heavily at our marketing, as well as trying to get out some more killer features that we think will make Fedang even more awesome! It’s already very cool now - you can fully track your comments right across the breadth of the internet!

So what are you waiting for … sign up to Fedang now!

Ayjay on Fedang/blog

C++

I’ve come to the end of my tenure with C++ for the forseeable future. As I’m starting to use different languages, platforms and methodologies, I want to take a quick snapshot of my mental state re. programming now, with the aim of being able to diff it with my mental state after a year or so.

How I code

I evolve my coding style a LOT. Every time I start a new project, I specifically use one new thing; in a rough order, that has been:

  1. Inheritance
  2. Pointer-to-members, both functions and attributes
  3. Preferring composition to inheritance
  4. Polymorphism only through interfaces
  5. Polymorphism with templates
  6. Exceptions
  7. STL (all of it, not just the containers)
  8. Test-driven development
  9. Functional programming (eg. closures, first-class functions, aiming to minimise state .. in everything!!)

I think it’s important to do this - if you don’t keep forcing yourself to try new things, you won’t ever find better ways of working!

Inheritance

I don’t like inheritance much. I’ve found polymorphism through inheritance tends to complicate your code. For instance, imagine a class hierarchy A -> B -> C with a virtual function foo(). If you override A.foo() in B, you have to make a choice .. do I call A.foo() in B, or do I just override it completely? There’s no single answer to that question. To fully answer it, you’d need either:

  • A detailed understanding of A’s implementation
  • External documentation
  • Guess and test

All 3 of those are bad solutions. But ok, you’ve used one of those solutions and you know whether to call the superclass or not. Being the good programmer you are, you’ve made sure that the functioning of B.foo() is in no way critical to the object functioning - after all, it might not ever get called if a base class were to override it!

In an ideal world, you shouldn’t need to bother with this - when designing a class, you should always allow for the possibility of your virtual functions to be overridden. This can be quite tricky to actually do though, especially when code gets a bit older. When the requirements for the class change, sometimes the only place to neatly change the code is in a virtual function and pray that subclasses all call it - otherwise, it can get very messy.

No repeated code

Achieving this goal of never repeating code is the reason I started investigating pointer-to-members, templates and the STL algorithms. I’ve found there’s always a way to remove redundant code, which is good - it should be eliminated everywhere! Multiple copies of the code makes the code harder to understand and change, and also introduces the possibility of a bug fix or other change only being applied to one version the code. Those are fun bugs to find!

Avoid macros and the preprocessor

The easiest way I’ve seen yet to completely obfuscate code is to abuse the preprocessor. You can code in ways that make life extremely difficult for other people. To make life worse, debuggers don’t always support macros well if at all. Macros share none of the semantics expected of C++ and they can make your code extremely difficult to follow and have very obscure bugs. I’ve always found it possible to use some of the other C++ features to avoid ever having to use macros. I still use them infrequently for debugging purposes, but that’s a little different - none of that ships.

Don’t use the preprocessor!

Exceptions are awesome

When I first started coding C++, I didn’t use exceptions. They seemed to be glorified GOTO statements. Instead, I would check everything that could fail, whenever it could fail, and return false from the function if it DID fail. This was painful. Functions no longer return values, they return error codes. This causes multiple problems:

  • Functions don’t read as well, as you have to pass in the return value by reference. This also means you have to also instantiate it on another line to the function call.
  • The error has to be noticed and handled at every single level in every single function. Programmers are lazy and forgetful and will get anything manual and repetitive wrong. I’ve had some people say “well, be less lazy and forgetful”; instead, why not use the computer to remove the opportunity to get things wrong?
  • Functions become way bigger when you test everything as often as you can. Trying as I do to keep functions as small and concise as possible, adding what can amount to triple the amount of code to check errors looks and feels ungainly, and the logic becomes much harder to follow.

Instead of expecting and checking for errors everywhere, it is much easier to define a single entry point to the code, check for any argument errors there (and there only) and from then on, assume your code all works. If it doesn’t work, fix those bugs. I’ve found a very easy way to protect against null pointers is to pass everything into the entry point as a reference. Once it’s inside your code, go nuts with pointers if you want/have to - you can guarantee they point at something valid. Also, if a function should logically return some value, you can have it actually return that value! Following these principles has lead to much cleaner and simpler code.

Use the STL

The STL forms a large part of the standard libraries that come with C++. They are designed to allow for higher-order coding, with decent approximations of various functional programming tools, such as higher-order functions and closures. Admittedly, when you first come to the STL algorithms, they look like hard work. Looking hard isn’t exactly a bad thing though. Writing out mathematical concepts in words looks easier than using mathematical notation, but that’s not an argument against mathematical notation: you just have to learn how to use it first.

So why bother with using for_each instead of hand-coding a for loop? Firstly, they’re harder to get wrong. Hand-coding the loop logic isn’t terribly difficult, but you can still potentially get it wrong. It’s nearly impossible to get the for_each logic wrong. If you have the luxury of using boost’s Range library, it’s even harder (or you can hand-code a set of wrapper functions that take a collection and just call begin and end, if you don’t have access to Boost - it’s not hard, and it teaches you a lot about STL-style coding).

More importantly, though, using the STL algorithms helps the readability of the code. Instead of using the same for loop for things ranging from transformations, calling a function on every element or accumulating a value, you instead clue the reader in just by looking at the name: (eg. transform(), for_each(), accumulate()). The STL also contains lots of little tricks to make your code run faster, and LOTS of checks to make sure that you have got your logic correct. These checks all generally disappear in release, meaning that you can have much better confidence in the code at basically no cost.

Coding with the STL can at times be tricky, especially if you start using the bind() functionality offered by TR1 or in C++0x. I’ve found that bind tends to get quite complicated as soon as you have more than about 2 or 3 nested calls to it. I generally favour writing custom functors over using the equivalent bind calls, as I find it reads a lot better. Admittedly, the syntax for functors can get overly verbose. Trapping variables manually, worrying about const issues and sorting out references can sometimes take as much code as the body of the functor itself. Again, if you’re lucky enough to use boost or C++0x, you can get around this somewhat using lambdas. If you aren’t … well, that’s just a weakness of C++. But, still, even though the functor is a bit overly verbose, the actual usage of it remains very small and readable. Encapsulate the mess away!

What do I like about C++?

The best thing about C++ is that it’s native. After you’ve been using it for a while, you can work out exactly what assembly will be generated for a given bit of code. I really like how C++ has managed to shoehorn in all the language features it has while still retaining a very close relationship with the underlying assembly. It also allows for some pretty awesome optimisations. There’s something to be said for getting right down to the bare metal - watching all those abstract concepts we deal with in day-to-day coding become morphed into something the computer actually understands is something I always find interesting!

The template system is also very nice. Duck typing can go a long way to sorting out nasty type-related edge cases in writing generic code, though you have to be careful to be clear about this when you do it. If you’re not using boost’s concepts to document what requirements a template class/function has, life can get pretty damn tricky!

What don’t I like about C++?

Well, the whole const thing I find gets quite complicated. It’s good in theory, but implementing it always has issues. When you’re first designing your code, you don’t really know at all what needs to, or can be, const, so usually it gets ignored at the early, exploratory phase of coding. 

C++ can also be overly verbose for things. This isn’t usually a HUGE problem unless you’re a very slow typist, it does feel inelegant when you compare it to more compact languages.

Goodbye old friend

I try not to become religious about any language - I’m always trying to reassess my opinions on what I do and don’t like about all languages. I don’t hate C++. For any uber-performance tasks in future I will most likely return to it (unless those PyPy guys succeed…). I don’t feel it’s the most productive language in the world, but I don’t think there’s anyone left who’d debate me on that point. I think C++ (or at least C) is a language everyone should learn at some point, if only to get a better feel for how our coding translates into machine instructions - that’s not a critical skill, but knowing it can sometimes lead to understanding why things have been built in particular ways, and also can sometimes help debug nasty issues.

But now? Now I’m using Python!

Ayjay on Fedang/coding/c++

Interesting reading that article given that i’ve just recently blogged about this topic.

Having heard a few responses to that blog post, I’ve had a few common questions asked and accusations levelled. I think some of these points need addressing.

“People won’t create content unless they get paid for it”

The implicit assumption behind this question is that a copyright system is the only way to get people to create content. This is absolutely false. The first copyright statue was only enacted in 1709. That is after Shakespeare, Leonardo da Vinci and countless other of history’s greatest content producers operated without any form of copyright. 

In modern times, the prevalence of open source software also flies against copyright being required for content production. I figure if a high proportion of the world’s smartest hackers, whose primary work is creating content, dislike copyright to such an extent there might be something to the position.

“Intellectual property is just like other property - your arguments don’t extend to real property, hence they don’t translate to intellectual property”

Uhh .. no it’s not. Real property has the defining difference of being “real”. “Intellectual property” shares very few of the characteristics that define real property. Most importantly, real property is limited - one chair can only be used by one person. With intellectual property, it’s unlimited - one song can be listened to by every single person.

This is probably the part of copyright that annoys me the most. We have, right now, the technical capability for every person in the world to have easy access to every single piece of media ever created instantly. Yet instead of trying to unleash this revolution, as a society we have opted against this - we have largely decided that a better use of our efforts would be to actively prevent this by devoting development time to things like DRM, closing file sharing networks and wasting advertising dollars on campaigns designed to try to deny people access to this content.

I think in the IP world, a communist model has a great many advantages over our current system. Every single person would be able to freely access the sum total of our society’s culture - not only would they be able to enjoy it, they could use it to create other works. Shakespeare himself built most of his content by borrowing very heavily from his contemporaries - I don’t think we should ignore his lesson!

Before anyone tries to counter that with the usual anti-communism counterarguments, I need to point out that a communist approach affects the IP world fundamentally differently from the rest of society. It doesn’t matter about efficiency - we’re not just talking about a raw level of production here. An example using the standard assumption that communism is less efficient at producing things than capitalism.

Capitalism produces 1000 TV sets. Communism produces 800 TV set. 200 more people get TVs under capitalism. Net win for capitalism.

Capitalism produces 1000 songs, of which say the average person can afford to have access to 100. Communism produces 800 songs, of which the average person has access to 800 songs. Huge net win for communism.

In reality, the difference would be much greater - even in the smallest niche, it’s doubtful to find someone who has purchased every last thing that they would enjoy. Communism just avoids the entire issue.

“You don’t have any copyright works, so you can’t speak about it”

Well, what would an argument be without some ad hominems.

Regardless, I’m a content consumer, I am writing a game and website that will soon fall under this and I have researched and contemplated this whole IP thing more than is probably healthy (surf Slashdot and it’s rather inevitable).

The biggest problem with IP law is that it kinda works. We get some content produced that is of pretty good quality. Does that mean we should stop looking for ways to improve the system? Unfortunately, I think enough people think that it does to make any chance of improvement very difficult.

But who knows! If enough crazy bloggers keep waving the anti-copyright banner, maybe we’ll get there!

Ayjay on Fedang/copyright

Calm before the storm

A bit of a status update here.

I’ve less than 2 weeks now until my GO date officially rolls around. In the last 2.5 months, I’ve met lots of really cool people and have worked on several different projects. In short, I’ve been casting a wide net in trying to determine what I need to focus on.

And I really need to focus on something!

Trying to do multiple things is really hard. I feel guilty about lack of progress on whatever I’m not working on. I feel like I’m spreading myself a little thin, and doing a half-ass job on a few things rather than a crazy awesome job on one. Not to mention, going to work for 9 hours a day and then coming home and then working for 6 hours can be draining!

One of the things I’ve loved about this last period is the shift in my perception. I actually am starting to look at everything I read with an naturally entrepreneurial outlook. What’s awesome is how many ideas I’m having now. When I handed in my notice to my job, I had one idea that I wasn’t even that happy with. I now have a list on my hard drive with 8 ideas I think are workable. I love thinking of these ideas, because each one feels like a tree - they start out at some point, but the branching possibilities quickly become endless! I have an idea for a church royalty management site, that could easily morph into a music marketplace, or into a presentation creation tool, or heaps of other things. My fervent hope is that whatever idea I pick doesn’t stay as that idea for very long - the set of potential ideas is so large that I’d hate for me to have already had my best idea!!

I’ve been pretty happy with my work rate for this period. I’ve learnt quite a few things that I think will help me a lot. I’ve vastly improved my vi skills, have started tinkering again with JavaScript, I’ve fully configured a Linux-based web server with FTP and MySQL services and I’ve been using Django and Python a lot. I’ve decided that this will be the limit of what I will focus on learning-wise for the first 3 months of startup-timel after that, I’ll look at where things are and reassess this (I’d really like to learn Clojure! But no! … must …. focus!)

Currently I’m trying to settle on what my first week on my own will look like. My current plan is to devote 2 days to my website, 2 days to my iPhone game and 1 day to meeting with other entrepreneurs, testing, feeling and speccing out some ideas with the aim of being able to decide what I’m going to do based on some form of evidence. Any further plans are a little silly I think.

I’m also trying to work on the forming of a kickass team to band with me in my quest to take over the world. It sometimes is a little hard to get a handle on people based on meeting them for brief brunches or whatever, but I think I’ve met a few really good people - it’s just a matter of sorting out desires and timetables and other inconvenient facts of life.

So despite the odd “what am I DOING” moment, I’m still really looking forward to striking out. I can’t wait for that first day!!

Ayjay on Fedang/startup/quityourjob

Copywrong

Everyone loves their media. Whether it’s TV, movies, music, software or whatever, we all love something … and so we’re all are affected by copyright law. So I think it’s in our best interests to try to get it right!

I’m going to to try to simplify down the entire convoluted mess as well as I can, because I think what the whole debate is missing is exactly that: simplicity!

The worst part of it all is the massive appealing to morality from all sides. ”It isn’t right to take people’s work for nothing!” ”Information wants to be free!” etc.

The arguments that base solely on a moral basis are what is causing the vast majority of the problems - when you portray your opponents as “evil” and your argument as “good”, it’s very hard to get past that and debate objectively.

So here’s my grandiose attempt at an argument: We’re all right, and we’re all wrong.

I think we need and deserve a better intellectual property system. We have been able to find workable solutions for pretty much every other socio-economic problem we have encountered, so why not copyright?

Who’s involved?

  1. Content producers: These guys have been around forever. They create the things that we want: they make music that we like, direct movies we desire and write software that we use and need.
  2. Content distributor: These guys are relatively recent (100 yrs or so). They take what the content producers make and sell it to people. They find the people who already desire the content, and they also find people who don’t know they desire the content and let them know about it.
  3. Content consumers: These guys want what is being produced. I’m going to further subdivide this category into a spectrum. People can be at either end of this spectrum for any given producer/channel (and are rarely at either extremity)
    a) Responsible: Pay for their music, want to ensure that their content being produced keeps on getting produced.
    b) Irresponsible: Does not pay for music, either (1) assumes that enough type (a) compensation is being generated that their content will keep being produced, or (2) doesn’t care if the content stream dries up after they’ve gotten their part - if it dries up, type 3. people will ultimately find something else

Whew! That’s actually a complicated matrix, full of conflicting desires and goals. I think the important thing to note is: All of these positions are morally defensible!

While I’m doing this information dump, I’ll list the various positions on content consumption:

  1. The right thing to do is to never pirate material and buy everything I consume.
  2. The right thing to do is to support the artists I deem worth supporting in the fashion I choose, and pirate the rest of my desires.
  3. I don’t really care about the morality, I want these things and I can get them for free, so I will

Again, I don’t really disparage any position. They all have significant merit. It’s position (3) there I want to actually defend:

The way our economy is designed is that we have a status quo that remains as such until new technology comes along and obsoletes it; then we all move to the new technology and the cycle continues. This has traditionally worked extremely well. I wonder whether this revolution is fundamentally different to others we’ve seen before.

Fundamentally, the Internet has rendered the traditional media distribution industry completely irrelevant, in the same way that the steam engine obsoleted horse-driven power. It is near infinitely more efficient to distribute information and content via the Internet than it is to distribute it on physical media via physical channels. By our traditional economical model, we should expect that physical distribution will very quickly become obsolete and we should all be obtaining cost-free media at will, because the technology enables it.

But this can’t happen in media, because then there would be no more media to distribute!! It appears that this paradox is unique in the IP world due to the cost of media transfer becoming 0. When the steam engine was invented, it significantly reduced transport costs, but it didn’t reduce them to 0.

We created our current IP system to deal with content in a pre-IP world, then we developed a technology that completely invalidated the IP law assumptions. We are struggling right now with the repercussions of this change. This paradox is unique in the development of the Internet, and is the reason why IP law remains hugely controversial at basically every level.

As one of the basic tenets of law is to give people both guidelines and boundaries to acceptable behaviour, I think it is a valid position to object to Copyright law itself. It is currently not up to the task of satisfying ANY of the stakeholders in this debate.

Producers aren’t happy: they see traditional profits lessen with no recompense.

Distributors aren’t happy: they see their rewards diminish to nothing, whilst they still provide a service (informing consumers of their product).

Responsible consumers aren’t happy: they pay extra because acting ethically now comes at a price, both monetary and with regards to the convenience of consuming a currently-legal product. The reduction in profits from media also sees a lesser amount of desirable content produced.

Irresponsible consumers aren’t happy: they push the boundaries as far as they can, whilst watching a hugely positive social oppurtunity for no-cost cultural distribution go wasted because our legal system is not designed for it. Though it is a secondary concern, the current legal system also allows content producers/distributors to threaten a very select few individuals with an abhorrent amount of financial debt. Pursuing a legal course of action is about the stupidest action that the distributors could ever take! Pirates look at litigation objectively as extremely unlikely to happen to them (so it doesn’t really weigh into their own decisions as to whether to pirate), but as extremely unfair behaviour from the distributors (so it very negatively affect their chances of ever paying for their media).

There’s another terrible aspect to the current system: incorrect signals are being sent to the distributors (who control the money, remember!).

A show targeting a demographic that is more susceptible to piracy will perform badly. For example, sci-fi audiences tend to have much higher proportions of people ready to use the internet for their TV-show needs, thus vastly reducing the common-Cable viewership of the given show. The classic example of this is Firefly. This commonly ranks among the best TV shows EVER to air on any channel, yet it got cancelled after a mere 10 episodes. This is despite possibly the largest audience on any geek-oriented show. This has resulted in one of the largest (unsuccessful) campaigns to re-air a program - unsuccessful due primarily to the fact that, even if a resulting show was successful, the only audience would not result in any money!

So - yeah, everyone’s unhappy.

How do you fix it then, Andy!?

Well, if I’d thought of a bulletproof solution, I would be on my way to becoming a multi-billionaire! Given that the party that develops a good solution and can exploit it will become the new standard for wealth in our economy, there should be a fair amount of interest in this problem.

The one constant in all of the relevant positions is that everyone LOVES their media, and they all want ever-increasing amounts of it! How do we find an economic strategy that encourages all the things we want (new media development, easy distribution) without all the caveats our current system requires (eg. extremely inefficient distribution)?

Well, I think one insight might be gained in looking into instances where we’ve seen content distribution done right - the Steam platform for game distribution. Despite my initial reservations, it has actually transformed into my favourite example of how to manage IP correctly: make it EASY, make it CHEAP and make it DESIRABLE!!

Before Steam, the only constant with gaming was the stuff-around factor. You ALWAYS had to mess about with installs, configuration files, drivers, WHATEVER, in order to play the game. Steam has completely eliminated that, and made it as easy as Right-click -> Install!

Further, adding protection to your content ALWAYS decreases the value due to the lesser control. Steam acknowledged this, and so reduces the restrictions as much as is possible. You can access your content as many times as you like, from however many computers you want … even allowing you to access your games from both Mac and PC platforms. To me, this has been the absolute best example of copyright management done RIGHT: make it so that you are trivially easy to use, you add value and you don’t make the consumer ever feel bad about your service.

iTunes performs a similar service for music distribution, but it is more modelled on the traditional Apple “lock-down” method. The issue with locking everything down like this is that your users can only then use it in proscribed ways - any unforeseen problems can fast become unresolvable. One of the hardest problems in designing new systems is managing failure correctly: if your system doesn’t fail the right way, it isn’t the right system.

I just experienced this problem: I was trying to copy my music from my iPhone onto my MacBook. This is something that not only “should” but “NEEDS” to be easy in order to prevent me getting disheartened and looking to “alternatives”.

Alas, despite being a programmer of some talent, I spent 45 minutes on Google and found only a few crappy apps purporting to be my solution (of which none worked). This should be DEFAULT BEHAVIOUR. iPhone -> computer syncing should be a path of least resistance - if no-one has thought of exactly what I’m doing, it should be allowed. Not only that: if I want to, for example, have completely seperate music libraries on my 2 computers and my iPhone, it becomes a nightmare to maintain. This is not a contrived scenario: this is the state I’ve been at for the last 2 nights. It’s becoming increasingly obvious that iTunes is much harder work than just pirating the music and completely avoiding all these issues. And I know I’m not alone.

What is the correct model for copyright law in developed countries?

Well, for the most part, I think the BBC model works well. Some of the best video content in the world has been funded by the BBC . You get some really cool shows and radio content, because they don’t have to worry about satisfying market interests. Maybe some socialism would work in the media industry, where a governing body distributes funds to the better-looking media?

As an ultimate solution, though, I think it fails on a couple of levels. The first is obviously censorship - some of the most culturally important media is created with the aim of upsetting the status quo. Having the government (which is pretty much the definition of the “status quo”) approve funding for everything would deny lots of important content from being created.

This idea also falls down when considering the very fast-moving yet copyright-reliant sector of IT. There seems to be absolutely no way to get Government moving fast enough to be able to keep up with the IT industry (look at the dismal history of software patents for evidence of that claim).

The current way I obtain media maybe is some form of solution, though enforcement is an issue.

I consider myself very interested in music, yet I rarely buy music. I don’t like supporting physical distribution channels, and the middle men involved aren’t deserving of the size of the cut that they get. Instead, I buy tickets to concerts. The key difference in this is that the band has produced some non-reproducible work that I’m willing to pay for… in this case, the performance of the music.

Extending that to other fields is considerably harder. How do you “perform” a TV show? I don’t know. Maybe we could use the BBC model for TV, a Steam system for games, and a performance system for music and movies (of which the theatre is the “performance”).

I feel like humanity has missed something in the IP field … in every other field, we’ve worked out how to be very efficient, but when it comes to IP we all fall over each other to prove how “morally right” we are whilst ignoring the socio-economic effects.

Being in the interesting position of creating a startup, I think I’m in quite a good position to help out in this area. I just need to work out how!

Ayjay on Fedang/copyright

Speaking the Language of Code

What’s the best language to code in?

I’ve been struggling with this question for a while now. I’m on the verge of being able to decide what language I use in my day-to-day coding, so I’ve been putting a lot of thought into this. Should I even ask that question? Are the differences important enough to even worry about? After all, as long as I pick a Turing-complete language I’ll theoretically be able to accomplish the exact same time - but the more I think about it, the more I don’t believe that. Language isn’t just the way we express ourselves, but the way we think.

I’ve been coding since I was about 5 (I think - it’s hard to remember that age, so it might have been a bit later, but certainly before I was 7). My mental development has very closely followed my coding experience (quick chicken-egg thing here: did I start coding because my brain was wired this way, or did coding cause it to become wired this way?) to the point that I can’t really separate them. I look at things extremely logically now. I try to factor everything down to it’s root abstraction to more easily categorise them - this is an integral part of designing code as well. I also usually spend way more time and effort trying to determine the underlying connections and structure of things I need to understand than I actually need to.

When I’m designing code I’ve learnt that, to a large extent, the way I think about coding now is largely a function of the language constructs I had available:

  • When all I knew was IF and GOTO, that’s how I thought - “do this, then do that, then do that if this happens” etc.
  • When I learnt subroutines, I learnt to think in the different functional components, and then use my initial IF and GOTO experience to write those.
  • When I learnt OO, I thought in terms of objects and their subroutines
  • When I learnt polymorphism, I thought in heirarchies - what’s common, what can be defined as a special-case of something else?
  • When I learn design patterns, I thought in terms of these patterns, rather than the specific implementation
  • Now I’m learning functional programming, I’m beginning to think in terms of the abstract algorithmic steps needed as opposed to nitty-gritty detail

My mental design process has been evolving over time, towards what it is now. As I learn new languages, it not only helps me when I use those languages (which can sometimes be rare - I don’t always have a handy new project to start where I can use that language!). I also tend to then use those new constructs in other languages.

Take learning Lisp as an example. I knew the basics of functional programming, but had never really took the time to think about how and why it worked. One of the biggest cornerstones of functional programming is the lack of state, which leads to its greatest advantage - you write the code, test it and then … you’re done! I’ve discovered that state is a real pain in programming because your code becomes a lot harder to understand. 

For a really simple program - a class with a few functions that don’t have any state. Given that each function is quite small (as they should be!), it should be pretty trivial to verify that the logic is correct and that the program will work. Not only will it work once, but it will work every single time - and even in multi-threaded environments you don’t ever need to worry!

Add a few properties to that class though - whole new story.

For every property you have, you start multiplying the amount of things you need to verify. Given just one integer property, and suddenly there are quite a few more things you have to check for each function. What if it’s 0? What if it’s negative? What if it’s really big? What if it overflows? What if another thread changes it while you’re processing??

Suddenly, your simple class with a few functions got a LOT harder to verify. And that’s just 1 property - every time you add another property, you then get to multiply all your work again!

It seems like state is something you want to reduce as much as you can. In some languages, like Clojure, this is easy (it is, after all, the entire design aim!) In C++ , not so much. In fact, it’s not really feasible to design a stateless program in C++. But that doesn’t mean I won’t try to remove as much state as I can! And the results are great - my code is much more readable and understandable, as you usually don’t have to worry about what state things are in when a function is entered - it’s all right there, passed in as the arguments in most cases. My C++ code became better because I learnt Lisp.

Learning new languages has made me a better programmer - I have picked up at least one thing from every language I have learnt that I apply whenever I’m coding in any language. But what language do I actually want to use??

Splitting that into its parts gives:

  1. “What is the most productive language for me?”
  2. “What is the most fun language?”

At the moment, respectively ”Python” and “Python”. I guess that is telling. Python is really cool to code in, and the way that you can just DO pretty much anything you want in it is very liberating. And, in fact, I’ve already started using Python for the website I’m about to deploy (Django is awesome!)

The trouble is - I haven’t used all the languages! Out of the languages I don’t know, the one I really want to learn more is Lisp. I’m still way too new to Lisp to get any kind of feel for whether they could contend for either question. Paul Graham certainly seems convinced it’s the best - and his inspirational insight into business is basically what caused me to develop this whole crazy entrepreneurial idea. Lisp itself seems pretty crazy-awesome in what you can do in it and having the entire syntax be programmable makes me swoon slightly, but … I know that I live in the real world and can’t learn every single language in order to decide. I won’t have the time to learn Lisp in any fashion before my entrepreneurial debut, so for now I’m putting it on the backburner.

Be warned, though, citizens of the Net - one day, and one day not far off, I will return to Lisp!

Ayjay on Fedang/coding

An inspiring YouTube comment?

Well, I never thought I’d see the day but a comment on YouTube has actually inspired me.

Growing up is more than some needless or shitty transition; it’s a challenge, so meet it. It’s a gift, so accept it. It’s a sorrow, so overcome it. It’s a tragedy, so face it. It’s a journey, so complete it. It’s a struggle, so fight it. It’s a chance to explore and experience the best that you can become. 

Growing up, at least from my perspective, is courage that is patience under pressure. Anything less is not worthy. 
Enjoy being who you are, not a replica, but an orginal.
Peace,”

I hope I never stop growing up.

Ayjay on Fedang/inspiring

Depth

Well, I’ll be the first to admit that I’m out of my depth.

Despite having researched and read up on startups for the better part of 18 months now, the biggest thing I’ve discovered is that: I still have absolutely no idea!

Yeah, I know, I know: Just like everyone said I wouldn’t.

At the moment, I find it very troubling. Human’s are, in general, not used to hard questions. I don’t mean the type that is “scholastically hard” - the one where you either know the formula to apply or you don’t. The really hard problems are ones in which you don’t even know how to start answering! I’m routinely confronted with problems that I have no context in how to solve: what are the qualities that make a good startup idea? I don’t know: I’ve never done it before!!

In the past week especially, I have been confronted with questions about a lot of things that I just plain don’t how to start answering - when to actually found a company? what web host to use? what technology to use? what to work on?? These are not questions I’m used to solving or even know HOW to solve. The only real solution I have at the moment is: ask someone who DOES know.

Now, that approach currently seems to be working. I hate to admit that I don’t know anything about this whole startup game after 18 months of research but the fact remains that I really don’t. The only real reason that I’ve got anything done at all is because I know some fantastic people in the game!

My current response is to procrastinate. If I’m forced to make a decision completely on my own, I tend to freeze up and not handle it. For the best example, see the email I received from one of the best potential co-founders I’ve met.

I didn’t know how to respond. It called for me to define my position on a very hard issue. My response to this was to run away - not answer the email for 2 weeks, because it scared me.

I think I need to grow out of this if I want to become a successful entrepreneur. It does no good to anyone (especially myself) to delay.

From my limited experience so far, the key part of entrepreneurship is: it doesn’t matter what decision you end up making!

If you follow your principles and, most importantly, decide SOMETHING, everyone seems to end up OK!

Ayjay on Fedang/startup