Abandoning the SpartanPress Theme

Part of the reason I set this blog up was to have a testing ground for WordPress theme development. About a year ago, I started learning the ins and outs of basic WordPress development, and having a testing ground of my own gave me some room to mess around.

However, I’ve lately found that I’m not too interested in working in WordPress in my spare time. I want to spend more time working on actually writing content, as opposed to thinking about the methods of delivering that content. Developers can easily spend hours and days messing with the fringes of a website’s design, just to forget about writing the content itself. I miss the times in college where I’d write 500+ words of blogs per day on anything from politics to technology to personal drama. Regular sharpens my writing and keeps me in a creative mindset, so re-dedicating myself to that seems to be a smart move for both my mental health and professional development.

So for now, I’m moving my site to the Responsive theme, which I’ll probably fine-tune when I have the time. It seems readable, straightforward, and allows for a notable amount of in-theme customization.

My plan is to get back into writing once I get back from my wedding. Naturally, I must acknowledge the fact that this is probably the second or third of these dedications that I’ve made in that time, but as the flakes always say: this time I mean it. Perhaps spending more time talking about the topics I deal with the most – communications, technology, games – will actually turn this blog into something another human being would find worthwhile to read. But for now, suppose I have nothing to share but this little piece of navel-gazing.

Posted in General

Facebook Open Graph tries to make us use Facebook properly

Facebook recently announced an update to their Open Graph API, that included this notable shift in policy:

You must not incentivize people to use social plugins or to like a Page. This includes offering rewards, or gating apps or app content based on whether or not a person has liked a Page. It remains acceptable to incentivize people to login to your app, checkin at a place or enter a promotion on your app’s Page. To ensure quality connections and help businesses reach the people who matter to them, we want people to like Pages because they want to connect and hear from the business, not because of artificial incentives. We believe this update will benefit people and advertisers alike.

I haven’t heard a huge fuss made out of this, but it seems like a pretty significant change. How many different facebook games, local stores and other places have encouraged you to “like” their page in order to get some sort of discount or virtual currency? It works largely because it’s still “free” to the end user. I know I’ve liked my local exterminator to save $10 on a flea spraying, even though I couldn’t care less what they have to say on Facebook. Now, a relatively subtle tweak in Facebook’s Open Graph policy has effectively thrown that entire practice out the window.

Presumably this change is to prevent non-organic growth of a company’s facebook page. Facebook wants a like to be an indication that you find value in what someone is saying. To use my earlier example, I traded my Facebook “like” for a coupon, not because of the content that was shared by my exterminator. I’m also likely to quickly unsubscribe or mute the company’s posts after I get my coupon, since I didn’t care that much about them anyways.

That behavior has significant consequences. You end up gaining a large number of followers that don’t actually care about your message, and just end up padding your number of “likes.” Depending on how Facebook’s filtering algorithm works, it may even mess with the people who actually do care about what your saying. So really, these “like us to get a thing” campaigns are potentially trading actual engagement for a higher number of likes.

Think People, not Numbers

This is a trap I expect many organizations fall into, and I’ve seen how it happens firsthand. Quite often, the first (or sometimes only) bullet point on a report about your social media is your number of likes/follows. Data like number of shares, comments, or impressions is secondary at best. Most people don’t have a good concept of what those numbers “should” be, but they can easily look at their competitor’s Facebook page and see how many likes they have.

But that’s not the right way to think about social media. Good social media pages will recognize that a relatively small pool of passionate fan swill get you much more value than large numbers of uninterested followers. You’ll create a group of people who not only purchase your products, but advocate for you. One passionate follower who shares your post can expand your reach by hundreds – all with a personal endorsement attached. That’s the real promise and benefit of social media, not the number of “likes” on your page.

You also avoid the trap that websites like Groupon fall into – attracting people who only care about a bargain vs your brand. No disrespect to the coupon-clippers of the world, but they’re by and large not returning customers, nor are they going to bother to advocate on your behalf.

So maybe, by taking away a tool like this, Facebook can incentivize page owners to get their followers the old fashioned way. Facebook is trying to do to social media what Google has been trying to do with SEO – get rid of the ability to “game” the system and instead identify exactly what their users would want to see. You don’t follow somebody on Facebook, you like them. The term implies a much stronger relationship than what’s built off of a coupon.

I’m partially disappointed, because I’ve considered using campaigns like this in the past. For example, we could give 10% discounts to an event in exchange for liking us on facebook, as a way to kickstart the Facebook page of a new annual event. I’d like to think that, once having those followers, I would then create content that they find valuable. But maybe I, like many other marketers, need to be better about not taking shortcuts on social media. We need to stop trying to manipulate the platform to force our message onto people. That’s an old media way of thinking.

Posted in Marketing

I’m not a game developer

I remember coming across an article in EGM or some other gaming magazine about DigiPen sometime in the late 90′s/early 2000′s. I was in late elementary school or early middle school – at a point where I understood that at some point I’d have to have an “adult job” and do something with my life, but years away from really understanding what that meant. ‘Jobs’ had become more than the childhood list of ‘Firefighter, Astronaut, President or Doctor,’ but I didn’t really know what that meant for me in the long term.

But then, reading about DigiPen, it finally hit me: I could be a game programmer. Mind you, I barely knew what programming was, or what I’d have to do to become a programmer, but in that moment, ‘game programmer’ seemed like my ticket out of having to have a real adult job. After all, I would be working with games!

For a couple years, I made small steps to understand programming. My mom and dad introduced me to Visual Basic, went to a couple of summer computer camps, and bought or borrowed multiple books on programming. I got enough out of this to understand the basics of programming, but honestly I never got near the level of actually being able to write a game. But that was fine – I assumed all of that could come later.

In retrospect, I think what I actually wanted to be was a designer, not a programmer. Even when I played around with programming languages, they were always just a means to an end. I wanted to create worlds and adventures, not code engines or learn programming languages.

I remember sitting around with some friends in middle school, talking about the awesome games we could program when we grew up. We’d talk about these elaborate worlds, storylines and ideas for building an epic adventure. Concepts like ‘design scope’ or ‘memory limits’ were beyond us – we just knew it would be awesome to make a game as epic as our imaginations.

I honestly don’t remember when I abandoned the idea of being a ‘game programmer.’ I think I gradually came to understand that it was a job much more complicated than I’d imagined, and that I’d actually need Math. I think for a while I decided I could make my fortune in writing epic adventures instead or programming them (another story of misplaced ambition, for another time). Regardless, I know by the time I was a year or two into high school, I’d given up on the idea of being a programmer or game developer.

In the past few years, I’ve become tempted to revisit game design. Tools like Unity and GameMaker have made game design seem more accessible than it has ever been in the past, and more and more 1-2 man teams have made great games. Maybe I wouldn’t make a career out of it, but it could be an interesting hobby.

My career has gone in a much different direction, but I’ve maintained a love for the gaming medium even when others have ‘grown out of it.’ Maybe the idea of game design is appealing to me because it justifies continuing my childhood passion into adulthood. An obsession with games seems much more rational if there’s some kind of professional angle to it.

But I’ve come to realize that’s the wrong way to think about these things. You can’t look to a job to justify your hobbies. Hobbies have to be a thing you love. Some people make careers out of their hobbies, but that doesn’t feel like it’s right for me. I like playing games and I like thinking about them, but that’s not the same thing as making them.

On the other hand, I suppose I could give games journalism a crack… that’s a booming, profitable field right now, isn’t it?

Posted in Games

Scratching the Right Itch

I’ve noticed a pattern in my gaming habits as of late. I’ll flounder around between a few games, maybe putting an hour in here, twenty minutes in there, maybe even a full evening if the mood strikes. I’ll mindlessly progress in something, partially for lack of a better idea, but secretly just hoping something was going to ‘click.’

When I was younger, worrying about a game ‘clicking’ wasn’t on my radar. I knew I got maybe 2-3 new games in any given year, and I’d play whatever I had with an obsession and focus that can only be mustered by a single 12 year old. I’d put 20 hours into a Final Fantasy game, then erase my progress and start over just because I wanted to play a part I’d liked again. I’d spend a week trying to see if that one rumor about getting Mew in Pokemon was true. I didn’t do these things because I wanted an achievement, or because I thought it gave me any sort of tangible benefit – I just did them because it was fun.

Games are rarely like that for me anymore. I’ll play a game for 5-10 hours over the course of a month, beat it, uninstall it, and stare blankly at the rest of my steam games until something else seems appealing. Sometimes I’ll spend entire evenings looking at my Steam library without booting anything up.

But then, maybe a few times in a year, something will click. I’ll get absolutely engrossed in a game – thinking about it while I’m at work, reading through all the posts on a relevant subreddit, watching Twitch streamers who play the game to, and, of course, spending as much time as I can at home playing. In the past few months, these games have been Diablo and Hearthsone, though it seems like both have faded for me at this point.

I guess it’s just a part of growing up. Even if you still like the things you liked as a kid, you enjoy them in a different way. Games may be different today, but so am I. Maybe part of the problem is that I spend too much time thinking about enjoying myself, and not enough time actually enjoying myself.

Posted in Games

Some notes on StreamBuddies

I’ve been working on a website for about a month now called streambuddies.com. It’s a fairly basic Twitch.TV stream viewing tool that makes it easy to see who’s online and jump between streams.

The app was a good introduction to a couple of different concepts for me. I thought it could be interesting to run through each of those here. This isn’t by any means full documentation of my code, but more of a run-through of what I learned in the process.

The Setup

When I first thought of this project, I knew I would need to do a few specific things:

  • Load content from the Twitch API
  • Regularly re-check that API for updates (to update stream information, and see when people come online)
  • Take the api result (a JSON object) and display the online and offline streams

External Components

With that in mind, I decided that the best way to manage the app was through a (relatively) sparse HTML page using JavaScript templates. Initially I was going to use Underscore.js for templating, but eventually settled on Handlebars.js, primarily because of its simplicity. My scripts didn’t need to be particularly dynamic, just a variable here or there. JQuery was used as well, though that probably goes without saying these days.

I also initially planned on using Bootstrap for the majority of the stylesheet, but ultimately found the mobile-first nature not quite appropriate for a stream viewer (which is inherently hobbled by being dependent on Flash), and ended up spending a lot of time either overriding the bootstrap CSS, or working around it. The main Bootstrap feature still used in StreamBuddies was modals.js, which is used to prompt a user when no Twitch user loaded – be it through the query string or through cookies. The rest of the stylesheet is written in LESS, and compiled/minified using Grunt.

I also wanted to give kudos to CSS Tricks for providing some very useful code snippets during the process. Without CSS Tricks and StackOverflow, I probably wouldn’t have gotten off the ground on coding in general, let alone this project.

Working with the API

I started this project because I wanted a good reason to get used to using AJAX and working with external APIs. Twitch has a (mostly) great API that was well documented on GitHub, and given how much I watch Twitch, it seemed like a tool that I would actually use.

There are two core components to the Twitch API used by StreamBuddies. The first is, as you would guess, the “follows” API. This takes a Twitch username and returns a list of people followed by that name. When I saw this feature, I was a bit surprised. As it is now, I don’t feel like Twitch uses the information on who you follow very much, and for a long time it seemed like they barely acknowledged that this feature existed. So I was happy to find something that both gave me useful data, and could maybe serve a purpose that I don’t see many other tools filling at this time.

Designing the Layout

The stream page layout was based on a mix of SpeedRunsLive and the native Twitch stream. I liked the core concept of having the navigation and the chat on both sides of the screen. Having the stream list on the same level as the stream itself makes it easy to tell when someone comes online, which I’ve felt is never easy to see on either Twitch or on SRL.

Having the stream itself be as big as possible was a priority. I’m somebody who never likes to fullscreen Twitch, because then I lose the whole monitor. Instead, I’ll resize a window to the maximum size where it doesn’t interfere with whatever else I’m doing, and leave it in one place. As such, I needed the stream to easily adapt to whatever size I could afford to make it at that moment.

I’m still not sure if my implementation of this was the best. Basically, I use jQuery to determine the window’s current width, subtract the width of the chat and the stream viewer, and set the stream viewer to that width (and then set the height based on the aspect ratio * the width). I’m willing to bet there’s a simpler, non-JS way to solve this problem, but every non-JS solution I tried didn’t seem to work out quite right. That just left chat.

Twitch chat is a weird animal in itself. On some streams, the twitch chat is a valuable place for interaction with the streamer. On others, it’s a wall of Kappas, ASCII art, and memes. Having the ability to toggle chat was fundamental, both because of it’s sometimes-irritating nature, and because it takes up a significant amount of screen real estate. For some reason, finding a decent height/position for Twitch Chat was a challenge, until I said “screw it” and just tried making it nearly 100% of screen height. I personally prefer a chat that’s the same height as the stream (probably because I’ve spend so much time on SRL), but for this implementation, having it be the full height seemed to work best.

There’s still one issue with the design that I’d like to address, stemming from the nature of widescreen monitors. When you put boxes on the left and right sides of a monitor (as the stream list and twitch chat surround the stream on StreamBuddies), you make a center content area that’s a more narrow rectangle. For something like text, this is good – wide text boxes fatigue a reader. However, with video, you’re forced to use a horizontal rectangle.

As such, we end up with a horizontal rectangle in a both that is a vertical rectangle. That leads to a big chunk of the screen that’s wasted space. Twitch itself offsets this with the streamer’s profile, but that data doesn’t come in the API calls I’ve been doing. Initially, I was going to put some recommendations for other streams to follow in that space, but as I explain below, that feature didn’t seem to work out as planned.

Failed Addition: Recommendations

I could probably write an entire section on this part of the project, but since it never made it past a few failed commits on GitHub, it probably wouldn’t be too interesting to anybody but me.

In short, I wanted to see if I could create a recommendations engine based off of the Twitch follows/followers API. The rationale was that, if you look at who else follows someone you follow, you could use those people’s follow lists as “recommendations” to help you find other streams you may wish to follow. I’m sure there’s a more technical term for this type of search/recommendation, but it basically comes down to “a lot of people who like X also like Y, so since you like X, you probably would like Y.”

After some trial and error, I got a basic page together that would gather these data. However, there were two main problems.

  1. It was slow as hell to do through the API. You literally need to query twitch hundreds of times per follow in order to get a list of recommendations. It generally took at least a minute to do a full run through of your follows, and required hundreds, if not thousands of queries. This could have been optimized a bit, but the second issue kept me from getting that far.

  2. The findings were not that useful. I tested the function against my follower list and, aside from the people I already followed, I found almost no consensus on good recommendations. I only found a handful of people that surfaced more than a few times in the sample, and they didn’t seem like good fits to be recommended, at least at first glance. Somewhat discouraged by this underwhelming result, I’ve shelved this part of the project for the moment.

Writing this out now, I feel like this feature still has some potential. It’s just not as simple as I’d expected it to be, which happens plenty when working on a project like this. I suspect that putting more effort into selecting whom to sample, along with more efficient use of the twitch API, could at least make this practical, if not as easy to integrate as I’d hoped.

Posted in Coding

Getting things right

Ok, so first off, I’m well aware that I’ve dropped the ball on the goals I set out like three weeks ago. I haven’t blogged at all since then. However, I’ve more than made up for it in the amount of coding I’ve done. I’d say I’m pretty close to releasing a version 1.0 of the project, which I’ll talk a little more about once I get to that point. In the meantime, you can always look at what’s on my [GitHub page] (https://github.com/ejonasson) if you really want to see what I’ve been working on.

I’m not a very skilled coder at this point. I know enough of the basics to be able to pull off a not-too-ambitious project given enough time and documentation, but I’m nowhere near a professional level. Maybe my work doesn’t look like vomit on your computer monitor, but it’s also not going to get clients breaking down the door.

The only way I know to get better is to start building something until it breaks, and then figure out why it breaks. Then, apply that lesson with the hopes that it will prevent that specific break from happening again. Then repeat until I either quit in a fit of rage, or finally create something that I’m proud of. (Spoiler Alert: the latter happens much more often than the former)

As a result, I end up rewriting the same function over and over until I get it “right” – or at least as right as I can figure out on my own. For example, in my current project, I’ve gone through about a half dozen different methods of taking data, sorting it, and printing it into boxes. Each time, the code gets a little better – maybe it takes fewer lines to execute, or it handles a unique situation a little better. It makes the end result better, but the time invested gets high quickly, and what I thought would be a weekend project turns into a month-long obession.

But this isn’t the part that starts to bother me. Instead, I find myself perseverating on the idea of getting it “right.” I want a seasoned programmer to look at the 400 lines of javascript I spent 60 hours writing and say: “Yeah, that’s a good way to solve that problem.” I could have published the app itself a week ago, but keep holding myself back to make relatively minor tweaks – things I could easily do after I’ve already let the project into the wild. But the project has long since stopped being about the end result.

In writing, I would say this is a horrible philosophy. So much of writing is just about getting the words out there. Nothing makes you a better write more than just banging out words by the thousands. Sure, you want to solicit feedback and make and effort to improve on your weaknesses, but this is maybe 20% of the work. Eighty percent is just banging on keys until you’ve said every word you can think to say.

My point is, I think by trying to do it “right,” I may be doing it “wrong.” I think perhaps it would be best for me to abandon this project as soon as possible and start something else. As such, I’m giving myself until this weekend to make any notable changes, get it online, and set it free. Then, on the off chance people actually like it, I’ll set it free to the Open Source community to do with it what they will. Maybe I’ll come back to it in the future when I know better, and marvel at the monstrosity of what I thought was a “good idea” at the time.

Posted in Coding

Diablo and Dark Souls – A Tale of Two Addictions

Lately, I’ve been addicted to two very different games – Dark Souls II and Diablo III. While both are very aesthetically dark games, anyone who has played either can tell you they couldn’t be more different.

These games have massively different reputations. Everybody knows Dark Souls is a hard franchise that’s designed to kick your ass, suck your time, and laugh at your careful progress is ruined by one bad roll, or by swinging your sword a quarter second too late. On the other hand, Diablo III is a mindless clickapalooza, a Skinner Box filled with pretty loot, exploding demons, and big numbers dancing across the screen. Sure, Diablo takes a mild to moderate amount of skill at higher levels, but the game is designed to be beaten without much frustration.

They represent very different perspectives on gaming. Diablo represents the current state of AAA gaming, where games are meant to be beaten, and difficulty takes a back seat to entertainment. The game rarely punishes a bad decision, and when it does, punishments are minor and temporary. When you die in Diablo, all you lose is about ten seconds of time while you wait to revive. Then you’re back to slaughtering demons by the thousands.

But if Diablo represents the state of what the industry is, Dark Souls represents what many enthusiasts want the industry to be. People want the modern equivalent of the tough as nails hits of the NES era – the Metroids, Ninja Gaidens, and Punch-Outs that dominated our childhood. Games that required patience, timing, and memorization in order to progress. These games are OK with the idea of not being beaten – if you want that privilege, you’re going to earn it.

I can easily see an alternate timeline where games like Dark Souls were the norm. Maybe if the industry had never grown beyond a few million enthusiasts, difficult games would be the norm, not the exception. If you don’t worry about a mainstream audience understanding your game, you can feel free to build obtuse, challenging, complicated mechanics into almost anything. Dark Souls could easily be the bizarro-world version of a modern Zelda game.

If sites like Reddit are any indication, tons of gamers are sick (or at least claim to be sick) of AAA games that pile on the pretty graphics, mindless gameplay loops, and lack of difficulty. Disliking modern AAA games seems to almost be a badge of honor for some, showing that they are “above” such casual games. Dark Souls is the paragon of the difficulty and challenge so many people crave, one of the few higher end franchises to scratch the itch of those who love a near-insurmountable challenge.

Personally, I fall somewhere between the extremes. Lots of modern AAA games just don’t appeal to me, and I think trusting gamers to rise to a challenge would go a long way towards freeing up developers to be more creative and drive the medium forward. The rise of games like DayZ and Minecraft show us that it’s OK to not spoon feed your players, and they’ll find their way sooner or later (or, at worst, find a wiki). But at the same time, sometimes you just want to hit things and watch them die.

(I’m fizzling, so I’m cutting this off now. I’d hoped that this would be a little more directed – a conversation on the balance between mindless fun and thoughtful, careful progress in games. I didn’t quite get there though – maybe I’ll try again in the future).

Posted in Games

Hello internet person

You probably found this page because you googled me. That’s cool – I google random people all the time too.

I mainly use this site right now for random wordpress-based experimentation, theme development, and testing plugins for use on other sites. So you may come across some junk data or info if you look hard enough. I assure you it’s all pretty useless to an outsider.

Posted in Uncategorized