## 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.

## July 6, 2014

### I Don't Care Anymore

This weekend, I went to a convention and bought a ton of stuff. This was unusual for me, because I am not normally someone who invests in materialism. Having a lot of stuff is not something that is important to me. Two things changed this year: I now have an obscene amount of disposable income, and I stopped caring about what other people think is important, because they don't care about what I think is important.

Respect is, inherently, a two-way street. When we are talking about things that are inherently subjective, like what kind of food I enjoy eating, or what books I like to read, I will not respect your opinion if you refuse to respect mine. There is absolutely no reason for me to care about what you think if you don't care about what I think. On the flipside, if you respect my opinion, but disagree with me, I will also respect your opinion, even if I disagree with it.

I buy art prints because I want to support artists. I want to support artists because I think art is more important than anything else, but few people share this view. Furthermore, most people don't care what I think, and expect me to conform to whatever vision of importance they subscribe to.

Before, I grudgingly tried to give society the benefit of the doubt. I tried to show respect to other people's admittedly bizarre concept of what is important in a human life, in the hopes that this respect would be reciprocated. It is now clear to me that society at large is dumber than a rock and isn't worth my time, so I'm not even trying to appease it. I simply don't care anymore.

I do not have time for meaningless debates about my life choices. If people don't understand how I spend my money or my time, it's because they don't see the world the way I see it. They don't value the same things I value. This does not automatically make me wrong, it makes me different, and I don't give a shit about stupid ideological bullcrap. I don't care about what they think is important because they don't care about what I think is important. They can sit there all day long, writing stupid comments about how I am wasting my talents, or how I should join a startup, or work for some company they love, or how I'm depriving humanity of some stupid thing I don't care about. I don't care.

I may like art that you think is stupid. I don't care, I like it, and I think it's important. I think every facet of human diversity is a beautiful thing that should be encouraged instead of brutally stamped out in elementary school. I think creativity is what makes us human, and what will ultimately be our last useful skill after robots have taken over everything else. I think we have better things to do then argue about shows for little girls.

I'm going to do everything in my power to support those artists, because other people won't. I will spend my entire life fighting with every fiber of my being for better welfare and support for artists that live in poverty. These artists aren't poor because they're lazy, they're poor because people won't support them. They're poor because society doesn't think they're important.

But I do, and you can be damn sure I'm going to do something about it.

## June 28, 2014

### How To Make Your Profiler 10x Faster

Frustrated with C profilers that are either so minimal as to be useless, or giant behemoths that require you to install device drivers, I started writing a lightweight profiler for my utility library. I already had a high precision timer class, so it was just a matter of using a radix trie that didn't blow up the cache. I was very careful about minimizing the impact the profiler had on the code, even going so far as to check if extended precision floating point calculations were slowing it down.

Of course, since I was writing a profiler, I could use the profiler to profile itself. By pretending to profile a random number added to a cache-murdering int stuck in the middle of an array, I could do a fairly good simulation of profiling a function, while also profiling the act of profiling the function. The difference between the two measurements is how much overhead the profiler has. Unfortunately, my initial results were... unfavorable, to say the least.
BSS Profiler Heat Output:
[main.cpp:3851] test_PROFILE: 1370173 µs   [##########
[code]: 545902.7 µs   [##########
[main.cpp:3866] outer: 5530.022 ns   [....
[code]: 3872.883 ns   [...
[main.cpp:3868] inner: 1653.139 ns   [.
[main.cpp:3856] control: 1661.779 ns   [.
[main.cpp:3876] beginend: 1645.466 ns   [.

The profiler had an overhead of almost 4 microseconds. When you're dealing with functions that are called thousands of times a second, you need to be aware of code speed on the scale of nanoseconds, and this profiler would completely ruin the code. At first, I thought it was my fault, but none of my tweaks seemed to have any measureable effect on the speed whatsoever. On a whim, I decided to comment out the actual _querytime function that was calling QueryPerformanceCounter, then run an external profiler on it.
Average control: 35 ns
What?! Well no wonder my tweaks weren't doing anything, all my code was taking a scant 35 nanoseconds to run. The other 99.9% of the time was spent on that single, stupid call, which also happened to be the one call I couldn't get rid of. However, that isn't the end of the story; _querytime() looks like this:
void cHighPrecisionTimer::_querytime(unsigned __int64* _pval)
{

QueryPerformanceCounter((LARGE_INTEGER*)_pval);

}

Years ago, it was standard practice to wrap all calls to QueryPerformanceCounter in a CPU core mask to force it to operate on a single core due to potential glitches in the BIOS messing up your calculations. Microsoft itself had recommended it, and you could find this same code in almost any open-source library that was taking measurements. It turns out that this is no longer necessary:
Do I need to set the thread affinity to a single core to use QPC?
No. For more info, see Guidance for acquiring time stamps. This scenario is neither necessary nor desirable.
I couldn't get rid of the QueryPerformanceCounter call itself, but I could get rid of all that other crap it was doing. I commented it out, and voilà! The overhead had been reduced to a scant 340 nanoseconds, only a tenth of what it had been before. I'm still spending 90% of my calculation time calling that stupid function, but there isn't much I can do about that. Either way, it was a good reminder about the entire reason for using a profiler - bottlenecks tend to crop up in the most unexpected places.
BSS Profiler Heat Output:
[main.cpp:3851] test_PROFILE: 142416 µs   [##########
[code]: 56575.4 µs   [##########
[main.cpp:3866] outer: 515.43 ns   [....
[code]: 343.465 ns   [...
[main.cpp:3868] inner: 171.965 ns   [.
[main.cpp:3876] beginend: 173.025 ns   [.
[main.cpp:3856] control: 169.954 ns   [.

I also tried adding standard deviation measurements, but that ended up giving me ludicrous values of 342±27348 ns, which isn't very helpful. Apparently there's quite a lot of variance in function call times, so much so that while the averages always tend to be the same over time, the statistical variance goes through the roof. This is probably why most profilers don't include the standard deviation. I was able to add in accurate unprofiled code measurements, though, and the profiler uses a dynamic triple magnitude method of displaying how much time a function takes.

The Black Sphere Studios Utility Library for C/C++ is a collection of classes and functions designed for realtime, high-performance applications. It is lightweight, fast, and minimalistic, and if you only use header file specific template code, you won't even need to include the DLL in your project.