Monthly Archives: March 2016

A Few Steps Further

One of the ways that I learn new technologies or programming languages is by getting an idea for a simple app that I want to write and then finding a tutorial on that makes a simple app and sort of following along with it but modifying it to be the app that I want to make. In the process, if there is something extra I want to add that is not in the tutorial I am following I will look up how to do that specific thing.

A few days ago, I wrote about the dangers of using experimental technology for things you plan on releasing to the wild. After I figured out a less than ideal workaround for my problem, I went a little further along in the Meteor/Angular2 tutorial and discovered that the solution to my problem was there.

The Solution (I Think)

On step 11 of the tutorial, they have you build the app to mobile. Android or iPhone, it doesn’t really matter. And this is where I was running into a blank white screen. Several of the next few steps did not apply to the app design, so I skipped ahead. On step 21, the tutorial has you split the logins for the browser version of the app and the mobile version of the app into separate packages.

A little bit of persistence paid off and now I have a way to get what I want working in my app. Remember when you run into an issue you can’t figure out, don’t just give up. Look around for the answer, try to figure it out. Don’t stop just a few steps from your goal.

Sprint at the Finish Line

My goal was to have this game built and released to the Google Play store by the last day of March which is tomorrow. Looks like this is going to join the ranks of most programming projects and go over time. After I release it I will do a post mortem and go over what I learned from the release process.

Don’t stop too soon.

The Bleeding Edge Hurts a Bit

So today’s post was going to be about how I built a MeteorJS/Angular 2 app to Android and released it on the play store. Instead I write a reminder/warning to all who like to develop in experimental technologies.

What Happened to My App?

The day started brightly. I was working away, being more productive than I had in a while. Getting things done. Cleaned up some code, got some things working that had not been and decided to try building my app for an Android device.

I plugged in an old android phone to my computer and ran:

meteor add-platform android
meteor run android-device

No errors showed up in the compile but the only thing showing on the phone was a blank white screen.

Investigating

Googling the issue brought me to this post. I am not the first to run into this issue. After reading through the thread, it seemed as if the issue might be fixed in a newer version of some of the packages that I was using.

So I ran meteor update and saw that indeed there were new versions of some of the core Angular 2 packages that I was using. Some of them I could only update by removing them first and then reinstalling them by the specific version.

Alas, this did not fix my problem.

In the course of research, I found another issue posting that is only 19 days old and is still open (as of this writing).

There are a few more experimental things to try but if they don’t work, looks like a few more days of work rewriting this to something more stable and tested.

Moral of the Story

If you are planning on releasing something to the wild, you should probably not use a technology that is in beta unless you are the one developing it and can fix your own issues.

Since the main purpose of this particular game was to learn a bit about releasing an app to the Android/Google Play Store, I will probably rewrite it into either basic javascript using Meteor or figure out how to write it into Angular 1 with Meteor.

Make games, have fun, and try not to cut yourself on the bleeding edge.

Update

I finally got the game to build to Android properly (around 1:00 A.M. after undoing all the other experiments I had tried then removing the login packages that were being used. Technically it can be played without logging in currently, but there is some additional functionality that tracks some statistics and scoring based on the user meaning I still need to figure out how to handle users. But it builds. Huzzah!

What I Learned From Making Breakfast

My wife likes eggs over easy. When we first got married, all I knew how to do was make scrambled eggs. But I like breakfast and like doing things for my wife so I determined to learn how to make eggs over easy the way she liked.

In case you don’t know what I mean by eggs over easy, it is an egg where the yolk is not cooked but pretty much all the white of the egg is and the yolk is sort of enclosed in a pocket. If you only cook it on one side it is called sunny side up.

The hardest part about cooking eggs over easy is making sure you don’t break the yolk when you flip it over.

Cooking Eggs Is Harder Than It Looks

Many of my first attempts at making eggs over easy were complete failures. I broke yokes left and right. Sometimes the yokes broke as I cracked the egg into the skillet. Other times they broke as I was putting the eggs onto the plate to serve. Not only did I break yokes, but often I undercooked one of the sides because you can’t see it. Eventually I started getting better though.

When I first started, maybe 1 in 3 or 4 eggs would turn out right. But soon I noticed that I was only breaking 1 out of every 2 yokes, then 2 out of 3 and at least 1 of them was cooked thoroughly, now I can get about 9 out of 10 cooked all the way without breaking the yokes. This took a lot of broken eggs though.

Failure Is the Way to Success

Cooking eggs is just an example. Most things in life worth learning how to do will require you to fail multiple times before you become good at them.

Making games is no exception. The common wisdom that I have heard in several places is you will probably make at least 10 bad games before you make a good one. That does not mean you intentionally make bad games. What it means is you make those games as best you can but don’t worry about them being good or popular. They probably won’t be.

Fear of Failure

This is what stops most people. They are afraid to fail so they don’t even try. If you won’t try then you can’t ever succeed.

I struggle with this myself. Many times I write these posts to myself because I need the reminder to just do the thing and not worry about success. Success for you when you are learning is to get something done, not to have it be perfect.

So get out there, break some eggs, and fail just as hard as you can so you can succeed.

Build an Audience by Playing Games

One of the ultimate goals of a game designer is to have people actually play your game. What better people to offer your game to than people who already love games.

Twitch

Several months ago, I was looking for some entertainment and went to Twitch. For those of you not familiar with Twitch, it is a service that allows gamers to stream themselves playing and build up a following of people who can subscribe and give them money to watch them play.

I happened across a streamer named Cohh playing Fallout 4 which had just been released. I found him to be really entertaining and building a great community so I started watching his channel sometimes while I was working.

Come to find out, he is a game designer and has a game studio that was making his game for him. And he is streaming on Twitch full time to build an audience and a community that enjoys games like the one he is making.

This January he ran a kickstarter campaign for his game and got it completely funded fairly quickly.

It was genius.

So for those of you who like to play video games in addition to designing them and making them, which I am going to assume is all of you. Consider using your time to play as dual purpose and possibly stream on Twitch or make Youtube videos. Both would probably be good. This way you build an audience who already likes you and are willing to try things that you make and possibly even be your beta/alpha testers.

And remember, start as simple as possible. You don’t need a $300 podcast mic or super fancy equipment to get started. Use what you have on hand.

Beginner Blog Growth Tactics

One of the goals I set for myself this year has been to get a reliable readership of this blog. So far this year, I have not really paid much attention to this goal. Not because it isn’t important, but because it is an uncomfortable area for me. And it isn’t marketing that really makes me uncomfortable, it is having people read what I write. Having others pass judgment on your work is a little scary. Ultimately though, I am here to give and to provide value. The only way to do that is to have people read what I write and to get feedback on what they find is valuable.

Some Blog Marketing Basics

For Christmas, my wife bought me several books that I had been wanting to read. Among them was Soft Skills: The software developer’s life manual by John Sonmez. John runs Simple Programmer and does a fantastic job of giving advice to developers.

In his book, he has a few chapters on blogging and how to build a successful blog. (He also has a blogging course that I mentioned at the end of this post about putting your work online.

John has built a successful brand and even has a premium course on how to market yourself. And one thing I have learned already this year, if you want to be successful at something, study others who are successful.

Consistency Is the Key

Of all the things that are listed in the book, consistency is by far stressed the most. If you want consistent readership, you have to write consistently. Sometimes you won’t feel like it and it won’t feel like your best work, but it is super important to have a schedule and stick to it. This is one of the areas I did poorly in last year and have been able to do okay in this year.

Often beginning bloggers don’t post because they don’t know what to write about. Here are a few tips from the book and some of my own.

  • Have a conversation, debate, or argument with a friend or coworker about a particular technology or idea that you want to write about and turn that into a post. This a great way to find something to write about. And if your friend and you have fairly strong differing opinions on the topic, it is likely the post will be slightly controversial and get people to comment and respond.
  • Write a response to a blog post you have read and agree or disagree with. While this should probably not be the majority of your posts, it will help fill out those days where you just draw a blank.
  • Do interesting things. One of the most difficult times I have writing is when I have not been doing interesting things. I haven’t been working on games, and I haven’t been learning about games and game design. When you do interesting things, you can write about you own experience doing it. That is one of the purposes for this blog, to share the experience of learning to design, create and market video games.
  • Keep a list of blog topics. Do a brainstorming session and write down ideas of topics you can research and write about. Whenever you don’t have any ideas for a blog post, go to this list and pick a topic.

High Quality = High Sharing

After you get the consistency down, you want to increase the quality of your posts. Whenever someone reads a high quality post with valuable information, they are more likely to want to read other things you have wrote and come back for more. Also they are likely to tell a friend and share it with others.

In addition to repeat visitors and their friends, another important side effect of quality content is backlinks. Many search engines use links to your site from other authoritative sites as a measure of quality and authority. This will give you a higher rank when people search for that topic. Also you will get a percentage of the readers from the site linking to your post.

Add Value on Other Blogs

Search engine traffic and other people posting links to your blog are not very likely when you start out. So what do you do about it? You comment on other people’s blogs.

Now don’t just leave a useless little drive by comment with a link to your blog. Actually try to provide value. This will net you goodwill with other bloggers and help you make connections. In his book, John suggests leaving a few comments a day on different blogs.

Share With Your Network

Use the power of social media to share your blog posts. Twitter, Facebook, LinkedIn, and everything else. It probably won’t get much traffic, but it is a place to start.

If You Are Brave

Sites like Hacker News and Reddit can get you a lot of readers, at least temporarily. And if the content is good or controversial, some will stick around. A few of the blogs I read are ones I found on Hacker News. The section title is because there are some trolls and hateful people who will leave angry comments or at least try to say something harmful. Thick skin is needed for this and a good amount of confidence in what you are writing.

Create Value

If you create value where you are and leave some behind where you go, you will have no trouble developing a readership for your blog. This is just another example of the universal law of “give and it will be given to you.”

This week, go find somewhere on the Internet to add value so that value will come back to you.

Story Design Mistake

My first design for the story of my current game was a colossal failure. I made a huge mistake that I did not quite see at first.

For every decision the player made, the story went in a different direction. Each choice starting towards a different ending. Part of this giant tree of story was cut off by choices that ended in the player dying, but it quickly got out of control.

I realized that I needed to pick a few endings and have the story converge to them. This proved to be better but the story tree was still large.

Then I read the next chapter of The Art of Game Design. It had a name for what I was doing and did the math for me. If the story is only 10 choices long and each choice leads further towards a unique ending, I would need to write over 80,000 endings! The book refers to this as the “Combinatorial Explosion” problem.

Game Story Patterns

There are a couple patterns described that are used in most games to avoid a lot of the issues that arise from trying to be too free with interactive storytelling.

The String of Pearls

In this scenario, the story is fairly linear but has a series of points in which the player must achieve a goal. There is basically one ending but on the journey the player has some freedom along the way for how to achieve the goal. Once they accomplish the goal for the area they are in, they are advanced to the next area.

The Story Machine

This type of design is based around giving the player an experience that they want to tell someone else about. Free build type games like Minecraft and Rollercoaster Tycoon, competitive games like football and CS:GO allow the player to create an interesting series of events that they want to tell someone else about. The goal is a system that creates interesting stories when your player interacts with it.

Following Examples

A couple years ago I had come across an interesting little text adventure game on Android called Wizard’s Choice which was largely the inspiration for the design of my current game. So I went and found it and played it again and guess what I found. It followed the “String of Pearls” design pattern.

The story has 1 ending. It has basically 3 areas from beginning to end where you have some freedom to make choices that affect how you get through the area alive.

I am going to borrow this design pattern and redesign my current pile of spaghetti of a story.

Learning Angular 2 and Typescript – Part 1

Out of a desire to learn Angular and building on what I have learned about MeteorJS, my current game is using Angular 2 and Meteor together. It does not get fancy and utilize all of the special features that these frameworks have to offer, but it is a good learning project.

So Popular

If you are new to programming or to web programming, a few years ago Google released an experimental framework called AngularJS that has become quite popular. It has become widespread enough that it is hard to ignore.

Currently, there is a new version of AngularJS that is in the works, simply called Angular 2. This caused a bit of stir since it is fairly different from Angular 1 and those who invested heavily in 1 will have to do a good bit of rewriting to migrate to 2.

Meteor, the Javascript framework I have been learning that builds to mobile devices easily, has been integrated with Angular 1 through the Angular-Meteor Project and integration with Angular 2 is in beta.

Some Angular 2 Basic Concepts

Components

As far as I can tell, Angular is about creating “Components” which I have come to think of as Lego-like pieces that you use to build your website or app.

For example, in the game I am building each section has a list of choices available. So I built a ChoiceList component and simply stick it into the page using an html tag that I assign to it like this:

<div>
This is a story with choices
</div>
<choice-list></choice-list>

And the <choice-list> tag will render the template of the ChoiceList component which gets a list of choices from the database and builds a list of stylized divs that look like buttons.

Data Binding

There is a lot of phrases that get thrown around when dealing with angular and one of them is “2 way data binding”.

This is a short way of saying you can tie an input directly to a component property or variable and when the input changes it immediately updates the property of the component. That is the first direction, from the View to the Controller. But then you can have a separate View element that uses the property that is getting changed, and it is updated automatically whenever the component property is changed.

If you were writing regular javascript you would need to add listeners and events to create this kind of behavior, but in Angular 2 it is simply using a banana in a box “[()]” (yes that is what it’s called).

A practical example of this would be a mortgage calculator that had input fields for a price, a down payment, and a interest rate and calculated a monthly payment. 2 way data binding would let you update the payment automatically anytime one of the 3 input fields changed. It would send the value back to the controller and then update the view accordingly.

With Meteor, we actually get “3 way data binding” because it has reactivity built in and can update the Model layer and have that reactively percolate up to the View and from the View down to the database (Mongo in this case).

Typescript

Angular 2 is trying to use a bunch of features that are coming for Javascript, but have not quite arrived yet. Typescript is one of the current recommended solutions to this.

Developed as an open source project by Microsoft, Typescript is a language that compiles to ES5, the current accepted Javascript standard that most browsers work with. It has really similar syntax to Javascript and is easy to pick up and learn.

Some of the features that I have found useful so far are the ability to check type parameters and to define your own Interfaces which describe what you are looking for in an object. So if you have an interface that looks like:

interface Choice {
page_name: string;
result_page: string;
}

You can use it to set variables to a Choice type so that they will need to be objects with a page_name property that is a string and a result_page property that is a string.

Nothing New

Although most of what I said here has been said better or clearer in other places about Angular 2 and Typescript, writing about it allows me get a better understand what exactly is going on when I write the Typescript to make a new Angular 2 component. I plan on getting into some more specific parts of Angular later on. For now, just a little overview and what I have found interesting.

If you haven’t looked into it yet, try out Angular.

February 2016 End of Month Goal Review

It is March already and that means it is time to review how I did on my goals last month.

Goals

  1. Write 3 Blog Posts Per Week And Publish 2 – Again publishing has been mostly on schedule. A couple of posts were a day late, but I have a queue of 1 ahead of schedule right now so, progress. Yeah!
  2. 1 Game Designed, Created, and Released Per Quarter – Much better idea of how it is going than I did a month ago. Game design, though poor, is done. Game creation got a lot of work done on it. I have been reading tutorials, watching tutorials, and searching error strings on Typescript and Angular 2. It is an experimental technology, but it is an experimental release. A good learning experience overall. Figuring out how to release it to the Google Play store is going to be interesting. Much more programming went on in February than January and still more will need to go on in March. It is surprisingly complicated for a simple game.
  3. 1 Book Read Every 2 Months On Game Design – Very slow going this month. As I ramped up working on my own game, reading about design and such fell off. Also, I spent a fair amount of my reading/learning time on personal development instead of game design as I attempt to become more consistent on getting things done.
  4. 1 Article Read Or 1 Video Watched About Game Design/Creation Per Week – You can read about most of it in this post that I wrote summarizing what I found and this post about Game Balance. It was not 1 a week. It was more like batched for the month in the first week or 2. I did get at least 1 per week done however. Now I just need to find some articles for March.
  5. Get 100 People Reading Evolving Developer Per Month – Absolutely nothing done with regards to this goal this month besides keeping the blog updated. This is an area that I need to study. I may even write a post about it this month and try an experiment or 2.

What Went Right

I was able to make a lot of progress on the code for Game #1 of 2016. Learned a lot about the new technologies of Typescript and Angular 2 and how they work. Learned a lot about game design. Got 2 post published every week and am 1 ahead of schedule even with a traveling weekend. Most importantly, I discovered some philosophical and mental ideas for how to be even more consistent and productive.

What Is Not Perfect Yet

At this point I should be play testing my game, not still building it. I still do not have a strategy or plan of any kind for getting people to read the blog.

Corrective Measures

Create a SMART (Specific Measurable Actionable Realistic Timebound) goal list for the creation and release of Game #1 of 2016. Study how to attract a community of readers and how to create value for them. Perhaps even find a course.

March Marketing Madness Begins!

Why Are You Hesitating To Invest In Yourself?

This past weekend I went to my local bookstore that lets you buy, sell, and trade. I really like to read and had a few fictional books that weren’t that great so I traded them in and went looking for some new reading material.

There were several books on the shelf that many of the successful people I follow have recommended. These books were not all that expensive, many of them less than $10. But for some reason, I found myself hesitating to buy them.

My hesitation was not because I have 4 or 5 books on my desk that are only half read (because there are). The hesitation came because of the price.

Should I spend $30 or $40 on these books?

The problem begins with the wording of that sentence. It should read – Why am I hesitating to invest $30 or $40 dollars in myself?

I was reminded of this video by John Sonmez of SimpleProgrammer.com

As soon as I realized how completely stupid I was being worrying about a few dollars when the information in the books is probably worth hundreds and thousands over the course of my life, I bought the 2 books I thought would be most useful right now and will be back for the others later.

Why do we not blink when we spend $3-$5 on a coffee, $10-$20 on a meal, but stop short when preparing to shell out a measly $6-$12 for a book that could change your life? Skip a meal, buy a book.

What would you pay for information that could make you a fortune, improve you relationships, give you more health and energy? The information is out there.

In fact it is really, really cheap. There is this amazing thing called a library that exists in most towns and cities. Its a super inexpensive way to get access to almost any book ever written. So if you want to be cheap with your money, don’t be cheap with your time. Invest the time to find your local library, get a library card, checkout a book and read it.

What book? Glad you asked. Here are a couple that I can recommend as starters.

Think and Grow Rich – Napoleon Hill
This book is all about the mindset and practices it takes to become successful. You will find that many successful people, and those who teach success, recommend this book. It has a few odd things in it, especially in the later chapters, but it is still a great book to start with.

How to Win Friends and Influence People – Dale Carnegie
I read this book for the first time a few weeks ago. I then read through it 3 more times in the next 2 weeks. The wisdom contained in this book on how to deal with people and get along with them is phenomenal. Since almost all of life is dealing with people, highly recommend this book.

After these 2, find one in a field you are interested in (and if you are reading this blog I am guessing that is game design or programming) and read it. Take some notes. If it was really good, read it again.

Whatever you do, don’t be hesitant about investing your time and your money into self improvement. Whether it is courses or conferences, books or seminars, invest in yourself.

You are your most valuable asset, don’t be cheap with yourself.