November 26, 2014

How Not To Install Software

It's that time of the year again, when everyone and their pony puts on a sale, except now it seems to have started much earlier than the traditional Black Friday. Needless to say, this is the only time of year I go around buying expensive sample libraries. One of these libraries was recommended by a friend: LA Scoring Strings - First Chair 2, a cheaper version of LA Scoring Strings. It's $100 off, which is pretty nice, except that the page that describes the product doesn't actually have a link to buy it. You have to click the STORE link, and then buy it from there, because this is a completely obvious and intuitive interface design (it isn't).

So, after finding the proper link in the Store and verifying I am actually purchasing what I want to purchase, they give me exactly one payment option: Paypal. This is pretty common, so we'll let it slide, and the whole process seems to go smoothly until they give me my receipt. On the receipt page, they gave me a link to download the files, and a serial number. How helpful! Until I click the download link, which does not open in a new window, and instead opens a completely different webpage with absolutely no way to get back to the page I was just on, because there is no store page with this information and I have no user account on this site. So, I have to go to my e-mail, where they have helpfully e-mailed me a copy of the receipt (probably for this exact reason) to get the serial number.

I then go back to the download page only to discover that I am required to use their stupid download manager in order to download the product I just bought. There is no alternative option whatsoever. So I download their stupid download manager and it magically installs itself somewhere on my computer I will likely never be able to find because it never asked my permission to do anything, and then demands that I log in. Well, obviously, I don't have a log in, and no one asked me to register until now, so I go to register, which helpfully opens my web browser to register... on a forum. Well, ok, so I register on the forum with a randomly generated password, and activate my account.

So naturally, they then e-mail my password back to me, which by definition means they are storing it in plaintext. So now the password to my account was sent over an unencrypted, entirely open channel, which is insanely stupid, but this is just a sample library, so whatever. I go back to their download manager and put in my credentials and... the login fails. Well, maybe it takes a bit to propagate - no, it just isn't working. I try again, and triple check that I have the password right. I log out and back into the forum with that very same password, and it still works. It just doesn't work in the application.

Standard procedure at this point is for me to take every single weird punctuation character out of my password (making it much weaker) to address the possibility that these people are pants on head retarded and can't handle a password with punctuation in it. I change my password to an alphanumeric one, and lo and behold, I can suddenly log in to the download manager! Let's think about this for a moment. The password I used had some punctuation characters in it (like "!&#*@(?" etc.), but in order to make sure it was still a valid password, I logged in to the forum with that password, and it succeeded. I then went to this application and put in the same password and it failed to log me in, which means the program actually only accepts some random subset of all valid passwords that the forum lets you register with.

This is laughably bad programming, but my woes aren't over yet. I click the download button only to get this incredibly helpful message: "Cannot connect to download servers." Pissed off, I go play a game in the hopes that once I get back, the servers will work again. I close the game only to discover that my download manager is one giant grey screen no matter what i do to it. It's forgotten how to draw it's own UI at this point. I restart the program, and it has (of course) helpfully forgotten my login credentials. This time, it displays a EULA it apparently forgot to show me the first time around, and once I accept, clicking install successfully starts downloading the files!

Of course, once the files are installed, they aren't actually installed installed. I have to go into Kontakt and add the libraries to it's magical library in order for them to actually get recognized. I can't tell if this is AudioBro's fault or Native Instruments fault, but at this point I don't care, because this has already become the worst installation experience of any piece of software I have had to go through in my entire life.

What's frightening is that this is par for the course across the desolate wasteland that is Audio Sample Libraries. The entire audio engineering industry employs draconian and ultimately ineffective DRM security measures, often bundled with installers that look like they were written in 1998 and never updated. The entire industry uses software that is grotesquely bloated, digging it's filthy claws into my operating system and doing all sorts of unspeakable things, and there is no way out.

You can't disrupt this field, because samples rule everything. If you have good samples, people will buy your shitty sample libraries. EastWest moved from Kontakt (which is a pretty shitty piece of software considering it's the best sampler in the entire industry) to their own proprietary PLAY engine, which is unstable, bloated, entirely dependent on ASIO4ALL to even work, and prone to crashing. They still make tons of money, because they have the best orchestral samples, which means people will put up with their incredibly bad sampler just so they can use their samples, which are all in a proprietary format that will get you violently sued if you attempt to reverse engineer it.

So, even if you develop the best sampler in the world, it won't matter, because without samples, your software is dead on arrival. Almost all the samples that are worth having come in proprietary formats that your program can't understand, and no one can convert these samples to another format (unless they want to reverse engineer the program and get sued, that is). So now the entire sampling industry is locked in a oligopoly of competing samplers that refuse to talk to each other, thus crushing competition by making the cost of entrance so prohibitively high no one can possibly compete with them. And then you get this shit.

November 22, 2014

Never Reinventing The Wheel Is Anticompetitive

Reality is that which, when you stop believing in it, doesn't go away.
― Philip K. Dick
Nowadays, you aren't supposed to write anything yourself. In the world of open-source software, you're supposed to find a library that does what you want, and if that doesn't work, commit a change that makes it work. Writing your own library is a bad thing because it's perceived as redundant if there's already a library that does most of what you want. The problem is that this is inherently anti-competitive. If there's only one library that does something, you have a monopoly, and then you get Heartbleed, because there's zero diversification. However, if I try to invent my own wheel, I'll just be scolded and told to contribute to an existing wheel instead, even if my wheel needs to have giant spikes on it.

I'm beginning to wonder if these people actually understand how software works. Code is not some kind of magical, amorphous blob that can just get better. It's a skyscraper, built on top of layers and layers of code, all sitting on top of a foundation that dictates the direction the code evolves in. If someone invents a better way to architect your program, you can't just swap pieces of it out anymore, because you are literally changing how the pieces fit together in order to improve the program. Now, I'm sure many coders would say that, if there's a better architecture, you should just rip the entire program apart and rebuild it the better way.

The problem is that there is no one-size fits all solution for a given task. Ever. This is true for any discipline, and it is still true in the magical world of programming no matter how loudly you shout "LALALALALALA" while plugging your ears. By definition you cannot create a software library that is constructed in two different ways, because that is literally two different software libraries. Thus, just like how we have many different wheels for different situations, it is perfectly fine to reinvent the wheel to better suit the problem you are tackling instead of trying to extend an existing library to do what you want, because otherwise you'll end up with a bloated piece of crap that still doesn't do what you want. If you actually believe that it is possible to write a vector math library that covers all possible use scenarios for every possible solution, then I invite you to put monster truck tires on your smartcar and tell me how well that works. We might as well ask the Flying Spaghetti Monster to solve our problems instead.

You want there to be several different libraries for rendering vector graphics. You want there to be many different programming languages. You want there to be multiple text layout engines. These things create competition, and as each codebase vies to be used by more and more people, each will start catering to a slightly different set of problems. This creates lots of different tools that programmers can use, so instead of having to use their Super Awesome Mega Swiss Army Knife 4000, they can just use a butter knife because that's all they goddamn need.

At this point, most coders will struggle to defend their position by falling back on the tried and true saying of "well, for most programmers, this is perfectly reasonable." Exactly what do they mean by most programmers? Because most programmers use C++, C, and Java, and are probably maintaining systems that are 20 years old and couldn't possibly apply anything they were just told in any realistic scenario. Do they just mean programmers who are making hip WebGL applications? What arbitrary subset of programmers are we talking about here? Of course, at this point, it doesn't matter, because they are literally cherry picking whatever programming community supports their opinion, and we're praying to the Flying Spaghetti Monster again.

Diversity is important. I am tired of programmers living in some fantasy world where all diversity has been eliminated and everyone follows the One True Path, and uses the One True Library for each individual task. This is not a world I want to live in, because my problems are not your problems, and even if your library is amazing at solving your problems, it probably won't solve mine. I'll go even further and say that this kind of thinking is dangerous. It reeks of cargo-cult coding and institutionalized knowledge designed to destroy creativity.

When people say you shouldn't re-invent the wheel, they mean you shouldn't re-invent the wheel if that's not what you're trying to do. If your main goal is to make a game, you shouldn't write a graphics engine. If your main goal is to make a webpage, you shouldn't write a webpage designer. However, if you just finished a game and think "Gee, that graphics engine was terrible, I'm going to make a better one," then writing your own graphics engine is perfectly fine.

Including the entire jQuery library just so you can have the $("id") shortcut is like driving a smartcar with spiked monster truck wheels down a freeway. It's dangerous, stupid, and completely unnecessary.

October 18, 2014

Everyone Can Be Above Average

When everyone's special, no one is.
 — Anonymous
Time and time again, I hear the wise old members of our society insisting that my generation has been gravely misled. They claim that, by telling every child that they are special, no one is. They claim that everyone can't be above average.

This is painfully ridiculous.

When someone says that every child is special, they are saying that each child is special in their own way. Each child is blessed with a gift of their own, wholly unique to them. Every child being above average is only a paradox if you are lumping every single human experience into one giant number, which is an insulting perversion of the diversity of life.

No human being will ever produce the exact same art, or solve a problem in the exact same way. Each of us brings our own unique experiences to the table, and that is why we are all valuable. Only by exploring a plurality of techniques can we find a better one. Only by bringing to bear a huge number of unique perspectives on a problem can we find an exceptionally elegant solution. One of those perspectives will see something that most of us don't. One of those perspectives will create a work of art that no other human being could have conceived.

Yes, every child is special. Yes, every child can be above average... in their chosen field of interest.

A good example of this is to look at artists. Almost any artist who can do rudimentary shading is an above average artist. This is because most people aren't professional artists. Once you start looking at professions, having even the tiniest drop of talent will likely catapult you into being above average, because our modern world is full of specialists. If you pick any random profession, the average skill level of that profession, when summing over the whole of the human race, will be close to zero, because most people aren't in that profession.

So, simply by choosing a profession and learning the basics of it, a human being will be capable of doing things most other people can't.

Telling kids they're special is simply saying that they are unique, and that no other human being is like them. This is, much to the frustration of the institutions who would prefer us to be mindless factory drones, the truth. We each approach life in our own way, slightly different from everyone else. One person's perspective may seem useless and bland, just a pale shadow of everyone else, until they happen to stumble on that one place where their slightly different view of the world let's them see something no one else can.

When talking about a person as a whole, no one is better than anyone else. We simply experience the world in different, equally valid ways. We can be better than other people at a specific thing, but not in general.

Every snowflake is unique, but only when you look at them under a microscope. In the grand flurry of life, they all seem to blur together, forming featureless piles of uniformity. It is not enough to look for the truly exceptional. We must recognize that even the most insignificant details can make all the difference in the world.

It's the little things that matter.

September 22, 2014

What Use Is A Good Job?

I am not a particularly happy person these days.

Certainly this is not because of my financial situation. I have a six-figure job at some giant software corporation writing code no one will ever see. I can afford to buy whatever tickles my fancy because I have no family to raise, or even a romantic interest. I could stay here for years and make so much money I wouldn't know what to do with it all.

People often think that I am successful. Perhaps I am. I don't care. It doesn't matter to me. Things like cars and gaming rigs and fancy TVs are just a waste of space. The most precious material possession I currently have is a $130 custom plush I bought on a whim at a convention. The other things I buy are usually art prints or games that are on sale, never anything that costs more than $30. My total material purchases each month amount to 0.2% of my paycheck. Most of it goes towards supporting artists, not because I want more things.

A lot of my friends are artists. Most of them live in a dump. They don't have good medical insurance, and they survive on shitty jobs that pay almost nothing, if they can find a job at all. I can't tell you how depressing it is when all the people you care about are struggling to make ends meet and the most you can do is buy some of their prints. Every now and then some emergency comes up and I help them pay a particularly nasty bill, but none of this actually solves the underlying problem of them needing a better job.

The most important thing in the world to me is art and music. It is creativity in all its forms. Few people seem to share this viewpoint with me, and even fewer still put their money where their mouth is. To me, a world without art is dull and meaningless, and yet artists get no respect. They get paid almost nothing, they are scammed, and they are taken advantage of at every turn. The reaction most people have to this is "artists need to get a real job."

Oh, really? Is that what this is all about? Everyone should get a degree in applied mathematics and write software, huh? Whose going to draw all the icons? Whose going to draw the logo? Whose going to design the interface? Whose going to create the sound effects? Have you ever tried actually doing these things? It's hard! It's just as hard as writing software, but some people are better at drawing things than writing software. I'm tired of people thinking that artists are artists because they can't do anything else. Artists are artists because they can do things you can't do. They should at least be respected for that.

What do people even want with all this money? What are you going to do, buy another car? Does this make you happy, having a bunch of useless crap in your garage? Does buying a giant house that says "I'm richer than you are" make you happy? If you're going to tell my friends to get a real job, then surely you won't mind me telling you to get some real friends?

You know, friends who care about things other than consumerism. Friends who care about you because you're a human being instead of all the things you have. Friends who don't care how much money you have, or your social status, or whether or not you put on cologne in the morning. Friends who will go exploring with you, friends who follow you to conventions, friends who will fight to help you survive even when they themselves can barely pay the bills. Real friends are loyal to each other's hearts, not each other's things.

I've been on both sides of the fence, now. I can tell you that money stops mattering once you can pay rent on a nice place, buy food, and afford dentist appointments. Everything beyond that is meaningless and empty. It's just numbers on a screen. Sometimes it lets you buy an expensive toy for yourself that you wouldn't have been able to afford otherwise, but they are always just that - expensive toys. They fade with time.

Friendships don't.

There is a future for me out there. I cannot walk that road alone. I will not leave my friends behind simply because society doesn't think they're important. I don't know how I'm going to get there yet, but one of these days, I'll figure it out. That day, I will find a better job. A job that doesn't involve satisfying the whims of a bunch of old men in business suits. It will be hard, it won't pay very well, and I won't be able to afford a new car, but contrary to what everyone thinks, it is possible.

And I'll be a lot happier than I am now.

August 8, 2014

Can We Choose What We Enjoy?

One of the most bizarre arguments I have ever heard in ethics is whether or not people can choose to be gay or not. The idea is, if being gay is genetically predetermined, it's not their fault, therefore you can't prosecute them for something they have no control over.

Since when did anyone get to choose what makes them happy? Can you choose to like strawberries? Can you choose to enjoy the smell of dandelions? At best, you can subject yourself to something over and over and over again and enjoy it as a sort of acquired taste, but this doesn't always work, and the fact remains that you are still predisposed to enjoying certain experiences. Unless we make a concentrated effort to change our preferences, all enjoyable sensory experiences occur without our consent. We are not in charge of what combination of neural impulses our brain happens to find enjoyable. All we can do is slowly influence those preferences, and even then, only sometimes.

This concept of people choosing what they enjoy seems to have infected society, and is often at the root of much bizarre and often unfair prosecution. If we assume that people cannot significantly change the preferences they were dealt by life, either as a result of genetic or environmental influences, a host of moral issues become apparent.

Gender roles stop making sense. In fact, prosecuting anyone on the LGTB spectrum immediately becomes invalid. Attacking anyone's sexual preferences, provided they are harmless, becomes unacceptable. Trying to attack anyone's artistic or musical preferences becomes difficult, at best. We know for a fact that someone's culinary preferences are influenced by the genetic distribution of taste buds in their mouth. It's even hard to properly critique someone's fashion choices if they happened to despise denim or some other fabric.

As far as I'm concerned, the answer to the question "why would someone like [x]" is always "because their brain is wired in a way that enjoys it." Humans are, at a fundamental level, sensory processing machines that accidentally achieved self-awareness. We enjoy something because we are programmed to enjoy it. To insult what kinds of sensory input someone enjoys simply because they do not match up with your own is laughably juvenile. The only time this kind of critique is valid is when someone's preferences cause harm to another person. We all have our own unique ways of processing sensory input, and so we will naturally enjoy different things, through no fault of our own. Sometimes, with a substantial amount of effort, we can slowly change some of those preferences, but most of the time, we're stuck with whatever we were born with (or whatever environmental factors shaped our perception in our childhood).

Instead of accusing someone of liking something you don't approve of, maybe next time you should try to understand why they like it, instead. Maybe you'll find a new friend.