Categories
Geek / Technical Personal Development

Remember the Good Ol’ Days Before Social Media?

Web 2.0 was all about changing the Internet from a solitary experience to one in which you are a consumer of content to one in which you are creating and sharing as par for the course.

Today’s social media took it to an extreme. Tweets drive Twitter. Facebook made sharing cat pictures and status with your friends easier, before making it difficult to see unless you opt-in twice, once by liking and once by saying, “Yes, I mean it, I want to see this account’s updates, please.” Pinterest became a huge force in its own right, and it’s all about pinning interesting things you find elsewhere.

Recently I’ve been seeing quite a bit written about the downsides of social media. Steve Pavlina wrote last month about taking a year off from social media and feeling much more conscious and in control of his life. He could concentrate on what’s important, such as planning out how he was going to accomplish important goals.

Social media gives us instant feel-good rewards for doing next to nothing of value. When those rewards are no longer so easily accessible, we have to work harder for those same feelings. When we accomplish something meaningful to create that dopamine surge, the feelings can positively guide our behavior, and those feelings can stack up and create lasting motivation to tackle more sizable goals and projects.

MMO designer and author Brian Green of Pscyhochild’s Blog is writing daily posts for Blaugust, and he’s focusing on what he doesn’t like about social media this week, analyzing how it works and what the repercussions are for discourse in society.

…the nature of social media is that it polarizes people. Often if someone doesn’t appear to directly support a position, some assume they must support the opposite and are therefore the Great Satan. Nuanced views are often looked at with suspicion. This causes a lot of frustration, as it closes off useful discussion.

See Social Media: What gets promoted? and Social Media: It leads to the darkside for more of his thoughtful analysis.

While I’m a fan of social media, I find myself agreeing. I’ve had to make the decision to stop checking Facebook first thing in the morning because I found it to be a time suck. I get more important things accomplished when I focus on them than on seeing what funny video was shared today or what notifications I should check. It took me awhile to resist the urge to type “f+TAB+Enter” in my browser first thing when I sit in front of the computer, since Facebook showed up as the first entry every time. I find myself checking notifications on Twitter on my phone throughout the day, and when my app is not pushing them, I go in and check anyway in case the notification function is broken. It’s bizarre and makes it hard to concentrate.

And the content is generally terrible. <insert picture of Grumpy Cat here>

I see clickbait headlines that promise things that will blow my mind that usually garner no more than a shrug, yet I’ve already clicked on the bait and wasted my time. At some point, I got fatigued by it and stopped clicking, but I admit it took me awhile to catch on.

I see friends posting hateful statements in public view that they would never say in person, or at least I would hope they wouldn’t.

Every so often I see something genuinely inspirational, but it can be buried among the vapid motivational quotes and celebrity put-downs.

Why do we spend so much of our time actively looking at this stuff? And why do we seem to keep distracting ourselves with it when we know we have more important things to do? How else is it changing our behavior?

Social media makes it easier to share, but I get confused by the work flow of blog readers these days. Someone will click on a link in Facebook or Google+ to a blog post, read the post, then instead of commenting at the bottom of the actual blog post, they go back to the social media platform they came from and comment there. And the thing is, I do this, too. Instead of treating the blog post as the source of the conversation, it’s as if it is the social media platform that is the driver and the blog is a temporary stop.

I actually miss the old days when bloggers would write comments on each other’s blogs, when a response to your post would as often as not be a post on someone else’s blog linked back to yours instead of disappearing into the hard-to-find social media comments section.

I miss people blogging because they had something to say, not because they were part of a blogging collective interested in selling you on some narrative, trying to get you to see and click on ads while giving you feel-good or feel-angry notions for a few seconds until you click on the next thing.

All that said, social media is probably here to stay, and luckily it is amazing because while it can seem like nothing but pictures of breakfast and pithy sayings to some, it means getting around authoritarian censorship for others. That is, real and dangerous censorship, not the kind that people made up to mean they don’t like the consequences of their free speech. It means keeping in touch with people you met at a conference. It means meeting new, like-minded people.

Social media allows the invisible to become visible. Hashtags such as #BlackLivesMatter are used to raise awareness of racial injustice. Many people of privilege are more aware that they even have privilege than before. Major accomplishments in science, such as NASA’s New Horizons flyby of Pluto, means a lot of excitement and hope for humanity that may translate into children today becoming the scientists of tomorrow. People no longer limit their social circles to geographic locations, which is great for us in the flyover states.

So, there’s a lot of good in social media as well.

But social media makes all of us publishers. Did we waste each other’s time with what we put out into the world? Will we be proud of it when we look back?

Or will we simultaneously feel glad that no one can easily find it a few days after we hit the Share button and feel worried that it’s out there for someone to find if they really dig for it?

Categories
Geek / Technical

Keeping a Programming Journal #nfjs

Yesterday at the No Fluff Just Stuff conference, I went to the Learning to Learn presentation by Raju Gandhi.

He talked about the nature of knowing and learning, and he shared a number of techniques for learning more effectively.

But then he said something that especially piqued my interest. He mentioned keeping a programming journal, partly to be able to celebrate what you’ve accomplished, and partly to have something to reference when you inevitably forget a key detail.

Whenever you learn something new, log it.

And I thought, “Blog it!” That way, you aren’t the only one who benefits from your new education.

It’s something I already do, but not consistently. For instance, when I was implementing my own physics code for a game, I ran into a crash bug when sorting my objects, and when I realized what I had done wrong and fixed it, I wrote about it.

What’s funny is that later in the week, I ran into the same exact problem at the day job and knew exactly what was going wrong.

Five years ago, I wrote up all of my research into component-based entity systems when I was looking into implementing it for my own game project, and people still find it useful today. Heck, I still find it useful today. Thanks, Past Self!

Sometimes I do things that I haven’t written about. For instance, when I ported my existing game engine code and cross-compiling build scripts from SDL to SDL2, I didn’t blog about it. I had to do some research and figure out what’s really different, but for some reason I thought it wouldn’t be interesting enough for anyone but me. Now I wish I had a way of seeing how much effort there was to do so because most of it is forgotten.

So going forward, whether I deliberately set out to learn something like a new programming language or learn how to fix an annoying bug, I’ll make sure to publish it, both for your benefit and for my own.

Categories
Geek / Technical Marketing/Business Personal Development

I’m Going to the No Fluff Just Stuff Conference Today #NFJS

I’m not a Java developer, but I am going to the “The conference series for JVM software developers” called No Fluff Just Stuff today here in Des Moines, Iowa.

Why? My main tool has been C++ for years. I haven’t programmed in Java since college, and that was over a decade ago.

Partly because it’s a local conference. I don’t have to travel or get a hotel.

Partly because my day job is paying for it. When you are offered free training, you take it.

And partly because I didn’t actually know it was a Java-specific conference when I signed up for it. /me looks down at his shoes sheepishly.

The itinerary I put together for the next few days is geared towards the general talks about software architecture, metrics, and other topics that can translate well outside of a specific programming language or platform. I am especially interested in the microservices architecture session, ever since I first heard about it at an Agile Iowa presentation.

There’s even a magician among the speakers, so it should be entertaining.

And who knows? Maybe I’ll pick up some cool ideas from the Java practitioners.

I’m a bit disappointed that the Android tablet I’m bringing doesn’t seem to have as full-featured an app as the iOS version. Somehow at a Java conference the Java-oriented platform doesn’t let you download slides? One of the Play store’s reviews for the NFJS app complained about needing to carry around not only his own Android tablet but also the conference-provided iPad, which was awkward. I wonder if I’ll be doing the same today.

Anyone else going?

Categories
Geek / Technical

What Do You Wish You Knew More About?

As a child, I consumed information around me. When I discovered a topic existed, such as the Pacific Theater of World War II or how to create your own pop-up books, I wanted to learn everything about it. I read books, watched the History Channel back when they actually showed history (oh, the History Channel is this generations’ MTV, isn’t it?), asked questions, and pretty much did whatever I could to feed my passion for learning.

As I got older, I found I had to be more selective with my attention. I had more demands on my time. I couldn’t immerse myself in a single topic unless it was for school or work.

Or at least, I felt that way.

I have friends, grown-up friends, who I can say are still passionate about things I used to love. A few of them geek out when NASA or the ESA publicize their latest successful missions. Another loves all things dinosaurs.

And I realize how much I have missed about being passionate about a topic to the point of becoming an amateur scientist or historian.

The cool thing? I can immerse myself in something now, and I’m old enough to understand it a lot more than when I was a child. And we know so much more today than we did just 10 or 20 years ago, so there’s more to learn.

And even cooler, we’re still learning. We now know what Pluto looks like, and soon we’ll know more about the makeup of Jupiter. We found a regaliceratops in Canada last month when we didn’t even know it existed before.

Do you wish you knew more about theatre? About movie-making? About the lives of authors? How to start a business? Weigh-lifting and nutrition? Sustainable gardening? Game design and development?

Did you ever wonder what was in the ocean, whether here on Earth or on Neptune? Or have you ever thought about how thinking actually works?

And did you ignore the curiosity, or did you let it lead you to answers and more questions?

Categories
Geek / Technical

You Have to Actually Do the Work to Claim You Can Do It

Yesterday at the day job, a coworker and I were discussing coding challenges. He was talking about how he came across one that, even though he knows how he would approach it, it would still be fun to do.

He said at one point, “I’ve never actually written a program to solve Sudoku.”

Another coworker chimed in to say, “Yeah, but you know you could write one.”

First coworker: “True, but while I know I could, I never have.”

And they went back and forth for a bit, with one arguing that he’s more interested in tackling the unsolved problems of the world rather than work on problems he knows he can solve.

I thought about his position, and I have concluded that he’s wrong.

I agree with the desire to work on something worthwhile. Writing your own Sudoku solver when others already exist isn’t likely to result in any significant, lasting impact. Solving engineering problems such as aiming NASA’s New Horizons at Pluto accurately over the course of almost a decade? That’s gratifying work.

But there’s a difference between knowing you could write a “Hello, World” program and being able to say you’ve done it, and it’s not just about bragging rights.

Here’s a “Hello, World” in C++ that took me a mere moment to write just now:

#include <iostream>

int main()
{
   std::cout << "Hello, World!" << std::endl;
   return 0;
}

I’m confident I don’t need to run it through a compiler to make sure I wrote it correctly. I write C++ code often enough that something this simple usually works just fine the first time, although feel free to tell me I made a mistake if you spot one.

But it wasn’t always this easy for me. Before I wrote code regularly, I’d make mistakes that would seem boneheaded to me today.

For instance, I might forget to include the iostream header in the first place. Coming from a QBasic background, where PRINT was a built-in command, it was odd to have to include a separate header to do something so basic as output text.

Another example is forgetting which way the streaming operators go for output versus input. << or >>? When I wasn’t writing code daily, I would have a hard time writing new code that used cin or cout because of this issue.

I had no idea there was a need to flush the output when I first started coding in C++, so I might leave off the std::endl, probably because I didn’t know it existed at first. I would wonder why my program wouldn’t spit out the text I expected to see, or why only part of the text seemed to make it and the rest was missing.

And of course, I might accidentally forget a semicolon or two.

That’s a lot of potential mistakes for a “Hello, World” program, and I am sure I ran into every single one and possibly more.

Before I was considered an expert C++ programmer, I could argue that I know how to write a “Hello, World” program. In general, that is. I knew the trick was to use some command to output a specific string, just like most programming languages.

Boooooooriiiiing! I’m above this. I want to do something more interesting!

I remember feeling this way, but I also remember the feeling the first time I tried to read some source code I found on the Internet. I couldn’t follow it! Everything was more complicated than it needed to be, and they used “advanced” things such as std::vector.

It was around this time that I found a good C++ book and followed the exercises in the chapters. I used to skip them because I thought, “Yeah, I get the gist.”

But actually doing the work helped me internalize the lessons. I didn’t have a vague, general understanding of the code. I KNEW the code.

It’s like the difference between being told about a majestic view of the mountains are and seeing it for yourself. One is story, and the other is experience.

“Hello, World” is pretty easy to master, but writing the code to handle input correctly and spit out appropriate output builds upon the knowledge you have for doing this easy work. And the new code will have its own common pitfalls that experts don’t run into anymore but that trip people up when they first encounter it. Did your stream try to convert the user’s input into an integer and fail? Are you handling this situation correctly?

Yeah, you might get the general idea and know you COULD write the code, but until you do, you don’t get to claim expertise in writing such code. Knowing the mechanics of diving isn’t the same as knowing how to dive. Knowing how to use color to simulate shadows and lighting doesn’t mean you know how to paint a bowl of fruit.

I would love to be involved in a worthwhile, complex, never-before-solved project, but it’s hard to demonstrate competence when I’m struggling with common mistakes in the solved problems.

You have to put in the work. Until then, you’re untested.

Categories
Game Design Game Development Geek / Technical Personal Development

How to Find Indies in Iowa

When I started out as an indie game developer, I found a home on the Internet. It was a set of forums dedicated not just to game development but also to making a living from it.

And while daily online communication, or maybe just procrastination, was helpful, it was nothing compared to the monthly face-to-face meetups we had in Chicago. We met either downtown at a Dave & Buster’s or at a Starbuck’s in Schaumburg.

It was kind of a loose mastermind group, in which we tried to set goals for the next meeting and held each other accountable to them. We had a range of completely newbies to experienced and successful business owners, and we all met, tried out each other’s games, and gave feedback.

So when I moved to Des Moines, Iowa, I immediately wondered where a similar collection of indies were.

They’re hard to find, so I decided to put a summary on this page in the hopes that it will be easier for everyone to connect with groups they might not have otherwise known existed.

The Iowa Game Dev Friendship Club has a mailing list at https://groups.google.com/forum/#!forum/igdf. It’s made up of indies and enthusiasts from all across the state of Iowa, especially out of Ames and Iowa City which is where our major universities are.

There is now an associated Iowa Game Dev Friendship Club Facebook group.

Sometimes a good number of members show up at a game jam, but otherwise they don’t try to organize massive face-to-face meetings. There have been Des Moines-area meetups in the past, such as the Midwest Mingle.

If you’re in Ames or Iowa City, your local university has a game developer organization. Iowa State has the Iowa State Game Development Club, which has an enthusiastic Twitter account at @isu_gdc and a ISU Game Dev Club Facebook page.

University of Iowa in Iowa City has EPX Video Game and Animation Studio, formerly known as Animation and Interaction at the University of Iowa. You can find them at their weekly meetings and at their EPX Facebook group.

UPDATED 2016: The International Game Developers Association has a Des Moines chapter. You can find them on Twitter (@igdadsm) and Facebook (https://www.facebook.com/groups/227434834257939/.

Did I miss anyone? Is there an Iowa indie game developer meetup you’re hosting that I don’t know about? Let me know, and I’ll update this list.

Categories
Game Development Geek / Technical

How Supreme Commander Handled Rendering

I found this neat exploration of the insides of Supreme Commander, the spiritual successor to one of my favorite games, Total Annihilation.

Specifically, in Supreme Commander – Graphics Study, Adrian Courrèges takes you through a tour of the rendering of a single frame of the game.

Animations show each step in the process, making it easy to see how you can go from culling a subset of the terrain to adding shadows to rendering meshes and particles to overlaying the UI.

Categories
Geek / Technical Personal Development

Taking Advantage of Downtime #8035dsm

I’m not a huge live music fan.

I mean, when I go, I find I enjoy myself, but I don’t tend to actively seek out concerts and bands to listen to.

This weekend is the 80/35 music festival here in Des Moines, and my wife and I go every year, partly because she’s a big live music fan.

There are local bands, but the festival tends to find big names, such as Modest Mouse, Wu-Tang Clan, Cake, and The Flaming Lips. People I would have heard of as a casual music fan.

Last night we saw Wilco play, and today we’re looking forward to Weezer.

It’s like the dream of the 90s is still alive in Des Moines.

We like to bring a blanket, set up a few lawn chairs, and hang out with friends while enjoying the music from afar.

Wilco at 80/35 from afar

And I like to bring my doodle book. Since the beautiful people of Iowa tend to show up at music festivals, and I’m just sitting there, it’s like getting a free life drawing class in, although with less nudity.

Sometimes people sit still for long periods of time, and sometimes they move quickly and I can only get the barest sketch in.

Doodle Book from 80/35

I like people-watching, and I enjoy doodling, even if I’m not a trained artist. So I enhance the experience of listening to live music with a fun way to practice my drawing skills.

It’s not work, so it isn’t like I’m forcing myself to squeeze every ounce of productivity out of my day, ruining any sense of enjoyment I have for life during what is supposed to be my downtime.

But at the same time, improving my drawing skills can help with my game design. If I can sketch out something that’s in my head more accurately, it makes it easier to communicate my intent.

But I don’t set a quota of drawings. I don’t force it. I just draw.

And I found doodling is a lot less annoying to the people around me than practicing my analytical skills by wondering aloud about the design of the light show or the logistics of setting up the concert. B-)

Categories
Geek / Technical

Finding the Missing WordPress Text Editor Toolbar After Upgrade

I recently updated my self-hosted WordPress install, and everything seemed fine until I went to write a new blog post. That’s when I found that the toolbar buttons were missing.

I don’t use the Visual editor in WordPress, preferring to type the text/HTML out myself. The Visual editor’s toolbar was available.

I found a lot of people running into this issue over the years. Suggestions ran from reinstalling the WordPress installation to reinstalling TinyMCE in the wp-includes/js directory to permissions issues to disabling plugins.

I’m partially annoyed because TinyMCE is for the Visual editor, not the Text editor, and searching for the Text editor specifically still gives you this advice which is a waste of time.

But anyway, I determined it was my All-in-One SEO plugin being out of date. Once I updated it, I was able to see the toolbar in my Text editor again.

I hope this helps someone else fix similar issues much faster than I did.

Categories
Geek / Technical Personal Development

When Standing on the Shoulders of Giants Isn’t the Right Thing to Do

In almost any endeavor, you can go it alone, or you can get help. You can spend all of your time researching and practicing and tweaking until you figure things out, or you can buy a book or hire a consultant and have someone tell you what they have already figured out after years of his/her life were spent on the topic.

Leveraging the work that has been done by others is a shortcut, and it is perfectly fine to take them. If you want to learn how to do software development, you don’t need to build your own computer architecture, as you can leverage the existing Von Neumann architecture in most modern machines. You don’t need to start from first principles. Someone already figured it out, and you can take advantage of it.

This kind of advice is ingrained in our culture.

Don’t reinvent the wheel.

Don’t spend your time doing that task when you can hire someone to do it for you faster and at a level higher quality, which saves you time, too.

This is the way it has always been done, and it’s the best way we know.

On the other hand, sometimes we advance the arts and sciences by starting over and exploring our assumptions.

In Bret Victor’s talk The Future of Programming in which he pretends to be an IBM engineer from 1973, complete with transparencies and a projector, he talks about the problem of people who think they know what they are doing:

He starts out explaining the resistance to the creation of assembly code by the people used to coding in binary. Coding in binary WAS programming, and assembly was seen as a waste of time and just plain wrong.

He goes on to talk about exciting advances in programming models from the late 60s and early 70s, and extrapolates some tongue-in-cheek “predictions” about how computers will work 40 years in the future, predictions that lamentably did not come about. Today we still code much the same way people did back in the 60s.

Ultimately, he warns that there is a risk to teaching computer science as “this is how it is done”.

The real tragedy would be if people forgot you could have new ideas about programming models in the first place.

The most dangerous thought that you can have as a creative person is to think that you know what you’re doing, because once you think you know what you’re doing, you stop looking around for other ways of doing things. You stop being able to see other ways of doing things. You become blind.

Game design applies here, too. Video games from the 70s, 80s, and 90s were quite varied. People were figuring them out because no one knew what they were. They tried everything.

Eventually some key genres popped out of this period of experimentation, and some control schemes and interfaces became common. It’s hard to imagine real-time strategy games without Dune 2‘s UI conventions.

Five years ago, Daniel Cook wrote about reinventing the match-3 genre:

It occurred to me that game design, like any evolutionary process, is sensitive to initial conditions. If you want to stand out, you need to head back in time to the very dawn of a genre, strike out in a different direction and then watch your alternate evolutionary path unfurl.

When people think of a match-3 game, they have something in mind because all match-3 games tend to be similar. Triple Town ended up being quite different, yet it was still recognizable as a match-3 game, and people loved it.

Some people merely need to leverage existing infrastructure. People are using Unity for game development because, much like Microsoft’s XNA before it, it handles all of the boiler-plate for you, and it also provides a lot of the technical tools in an easily-accessible way so you can focus on the development of the game rather than the technical details of making a game.

But some people are pushing what’s been conventionally thought of as possible. Spore, for instance, had to procedurally generate animations for characters that weren’t prebuilt, which meant someone had to figure out how to do so. There was no existing 3rd-party library to leverage. The shoulders of giants here weren’t high enough.

I’m part of a book club right now involving algorithms. We’re reading Steven Skienna’s mostly-accessible book The Algorithm Design Manual, and it’s been enjoyable and challenging. I haven’t studied algorithms since college, and I kind of wish I could go back and check my notes from class.

But what bothers me when reading this book is the warning about trying to completely invent a new algorithm on your own. Skienna argues that most problems can probably be adapted by sorting the data or otherwise thinking about it in a way that an existing algorithm can solve it.

And he’s right.

But someone had to have figured out these algorithms in the first place, right? Someone saw a problem and had no way to solve it, so he/she came up with a way, optimized it, and published it.

But today I’m expected to just learn what they did and use it, and I feel like I’m being told to stay away from actually trying to figure out a better way on my own, as if all of the algorithms that can be invented have been invented.

And if I just want to solve particular existing problems, it’s probably practical advice.

But if I want to explore an entirely new kind of problem, what am I supposed to do with old assumptions and solutions? Square pegs don’t go in round holes, and I don’t think we want a future where we are taught that round holes are the only kinds of holes in existence.