So I’ve been wanting to make games

splosion_screenshot

I’ve always thought about making games, and technically my first job out of school was making games; though they weren’t necessarily the craziest. Maybe a year or two ago I built a Tapper clone using libGDX which is a Java library for making games. It was pretty cool, though I found myself always getting hung up on the code part of it and that always frustrated me. Other tools such as Unity had this professional feel that made it really overwhelming when I tried using it. I wanted to find a tool that was easy enough to use and didn’t require much or writing code.

I wanted to focus on the other parts of making games: making assets, finding music (maybe making it eventually), putting the game together and playing with the mechanics. If I could do all of this without having to write code, that would be pretty awesome! A tool I’ve heard about in the past, but didn’t really look into perhaps because of pricing reasons was Game Maker. This is a pretty popular tool in the game community and some pretty neat games have been built using it as well.

The one problem I’ve had with making games is what feels like a lack of ideas. I’d say the closest thing I came to this was back when I was a teen and ran as Dungeon Master for a bunch of friends, and that’s been practically forever since I’ve done that. Thankfully there’s some pretty good resources online to come up with ideas that I was introduced to years ago by my friend Robert Ziehl. There’s this site called the Experimental Gameplay Project that used to run monthly challenges which would revolve around a theme. Sometimes the theme is a restriction, such as a game that only uses one button to be played. I’m thinking I’ll be diving through their archives to come up with some challenges for myself to build games. Another big thing with EGP is that they informally restrict you to building the game in 7 days which is a restriction I kind of appreciate since it helps keep the scope quite small.

After talking to a bunch of the volunteers at Gamercamp, they said another great way is to just get involved in game jams. I’ve enjoyed participating in Rails Rumble and figure I’ll definitely get involved in the Toronto game jam next year. And of course there’s the global game jam Ludum Dare which seems to happen pretty frequently. While looking around I noticed that there’s one coming up in December that I’ll probably participate in. I don’t know how good of a game I’ll make, but it should fun anyway.

For now, I’ll just be making clones so I can learn the tools and get practice on things like creating assets. And without further ado, here’s the game I built today that I’ve boringly named “splosion”. It’s a simple asteroids clone where your goal is to shoot the asteroids and score as many points as you can before you lose all your lives. It’s not very hard, so don’t expect too much from it :)

Download Splosion — Windows

Download Splosion — GameMaker Project Files

Controls

Assets

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Canada License.
Permissions beyond the scope of this license may be available at http://christophersaunders.ca.

Rails Rumble Recap: Remote Pair Programming

Pairing

Rails rumble finished a little over two weeks ago, though one aspect of the competition I still wanted to cover was how I was able to stay present with the team in more than just a “being there on screen kind of way”.

One thing I really wanted to be sure we could do was pair when needed. I looked into a few tools which would cover what we needed and was pretty happy with the results. A major aspect of the pairing tools is they needed to have a low barrier to get setup. We were on a tight schedule and wouldn’t have time to futz around with server configurations and such. Another thing I wanted to ensure is we weren’t forcing another’s system configuration on the other.

We were able to achieve this by using a tool that ties into the editor itself. That tool is called Floobits and did an excellent job at helping us pair on code. I looked into the tool a few months ago but had no real project to work on it with, so being 500km away from my team for Rails Rumble was a perfect opportunity to try it out. After a tiny bit of configuration, which mainly consisted of installing the plugin and getting an account we were up and programming. It was great because we were working on some unfamiliar tools and also wanted to talk about a few parts of the systems design. There was little to no lag, which I’ve found to be a problem with some of the tools in the past.

One disadvantage of Floobits is that it only works for showing off the code and not the tests or interface. We got around this by combining another pairing tool called Screenhero. This takes an approach somewhat similar to Screen Sharing, except you can lock it to a single app if you want. Aside from just sharing your screen, the pair is also able to interact with it as if it was on their own computer. A really cool part about Screenhero is that instead of suffering that mouse-hijacking you sometimes experience while pairing, they actually get a dedicated pointer. I believe the tool can also be used with several people in a session, and the tool pops a kind of tooltip underneath their cursor to inform you who is moving around.

I found Screenhero to be a little less than preferable when doing remote pairing due to the amount of latency, but when it came to pairing on Ember side of our Rails Rumble app, it was perfect for sharing the Chrome window that we were using to see the results!

Screenhero does come with a voice chat component, though we opted to stick with Google Hangouts because it allowed the other members of our team to quickly get in touch with us while my pair and I were working. So while each tool does have a number of neat features, I found the experience to be the best while using all of them to solve slightly different problems. Bringing together Floobits for the actual coding, Screenhero for watching our tests or interacting with the brower, and hangouts for audio/video worked out quite well!

I’ve been trying to find more people who are interested in remote pairing, and this will be the setup I’ll be using for all my remote pairing sessions. Of course you can always get in contact with me on twitter if you are interested or check out one of my projects on Floobits to see the remote programming in action. When I get a chance, I’m normally working on some refactoring/modularization of the Shopify Theme gem.

If you are interested in learning about some other remote pairing tools, the Ruby Rogues recently covered it in a podcast.

photo by: I am Fry

Kitteh

IMG_4662

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Canada License.
Permissions beyond the scope of this license may be available at http://christophersaunders.ca.

Skyline

IMG_4949

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Canada License.
Permissions beyond the scope of this license may be available at http://christophersaunders.ca.

Rails Rumble Recap: Continuous Integration and Deployment

110909-N-ZZ999-001

 

Last weekend marked my second year participating in the Rails Rumble programming competition. After my experiences last year I decided that we were going to be done a little bit differently.  Last year was a bit of a rush and we also partially changed our system half-way through. Another big part of the system was a lack of any real monitoring of what we were building whatsoever. No CI, no error reporting, no system health monitoring so when we deployed and were waiting for judging to happen we had no way of knowing what the health of our system was. This is going to be a part of a multi-part series where I breakdown the system and discuss various tools we used to make our application shippable and also give us the confidence in it’s stability.

To start us off I’ll be discussing our Continuous Integration and Deployment setup that we had. One thing I didn’t want to have us worry about was remembering to deploy the system after a merge into our master branch. We also wanted to know as quickly as possible when a part of our system broke so we could quickly react to the failure and get the system back to a healthy state. For this I looked around for some deployment and continuous integration software. I initially looked into Deploy for deploying our systems and Travis CI for running keeping track of the health of our project but wasn’t really interested in them. I personally found that for our project Travis would be far too expensive because we are planning on continuing the project once the judging is over. Deploy was tempting but it still required the press of a button in order to cause a deployment; also it didn’t provide CI services. Having fewer services to keep track of during 48 hours is always a nice plus. That being said, Deploy does look like a good tool if you are more in the camp of wanting explicit control over when code is deployed.

While googling for CI platforms I came across one called Codeship.io that really caught my eye. It provides CI services that are very similar to Travis or Circle CI as well as a continuous deployment system. That was a very attractive aspect of the product especially considering how we’d be pushing out a lot of code over the next 48 hours. I also found the pricing palatable after the trial period, which helped with the decision as well.

Getting the system integrated with our deploy scripts was pretty simple as well. Our production system was effectively turn key because I didn’t want to spend a lot of time configuring a server the way I wanted it. I currently don’t have a deployment system tool belt such as chef or ansible yet so I needed a system up and running fast. I decided that the easiest would be to just go with the stack scripts that were provided by the Rails Rumble team. Because of this everything was good to go in about half an hour and all that was left was finalizing the codeship integration. I want to say that their pitch of “integrates in 3 minutes” is true, because that’s how it felt.

Getting a project up and deployable on codeship mainly just requires picking a repository from your code hosting platform such as bitbucket or github, followed by giving it some instructions on how tests are run (which you can choose from a bunch of pre-baked configurations such as rails or python) and how to deploy. Once that is all set you just needed to drop an SSH key into your known hosts for your deploy user and you’re off to the races. On the next push to master Codeship will run the tests and if they are green will proceed to go through the deployment process. After having the first build deployed I was pretty happy.

The pricing of the product is a little bit weird though. For the smallest paid plan you are limited to 50 builds a month, which if you have any velocity whatsoever will result in burning through those in no time. The main reason is because Codeship runs against commits to every branch you have up on your code hosting platform. There is a way to get around it, which includes adding –no-ci to your commits though I’m pretty forgetful and wouldn’t be surprised if I constantly forgot to include that in my git commits. An alternative I haven’t really tried yet would be to have 2 repos, one for your production version or code that’s ready for pull requests so that builds are only triggered when you actually want them. Also having another repo that isn’t your default would prevent you from triggering builds by mistake.

Aside from that one personal problem (which when you are in bigger teams on unlimited plans wouldn’t be an issue at all) I was extremely pleased with the platform. It was also my first experience in setting up integration services to help give myself and the team confidence in the code we were pushing. So if you’re looking for some Continuous Integration and Deployment services, I’d definitely suggest you check out Codeship!


What’s for Dinner

Whats for dinner

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Canada License.
Permissions beyond the scope of this license may be available at http://christophersaunders.ca.

I’m volunteering for Gamercamp and want to see you there!

I’ve signed up to volunteer for a local (to Toronto) game community event and wanted to get the word out to everyone. Some of you might know about Gamercamp, which bring together people from the local game dev scene (and some from other parts of the world) to share their works.

You can find out more about it at http://gamercamp.ca which covers more about the event as well as where you can get your tickets.

Now I’ll tell you a bit more about the event and such.

Back in 2010 and 2011 I attended Gamercamp and had a blast and wanted to give back, so I figured to sign up and volunteer. As a volunteer I’m getting some deeper details about the event and even got to try out some of the games that will be getting previewed.

A few of the games that really stood out for me were:

Crypt of the NecroDancer — This is a rogue-like rhythm game where you use a DDR pad to dance your enemies to death. Sadly I only got to play it with keyboard keys but it was awesome.

Starwhal — This is a four player deathmatch game that is along the lines of joust, except you are Narwhals in space trying to murder each other by stabbing them in the heart with your horn. It’s amazing, and everyone got super into it. Also, you can try it on your computer RIGHT NOW!(Requires Unity)

Super Time Force — I got to play this one at PAX and was super confused when I tried playing it, but got a bit more time to understand how it works. You are a part of this really weird team of time travelling heroes who are trying to make it to the end of a mission/stage. Did one of your guys die? Travel back in time and save him with another character! It’s a pretty trippy game and if you like Swords and Sworcery, you’ll probably like this one as well.


Thoughts on the Community’s Recent Black Mark

toxicity

As some of you may know, a major event happened within the Ruby community that is all too familiar within the greater tech community. Another one of our lady Rubyists was sexually assaulted, and bravely decided to share her experiences with the world at large.

As a cis-gendered, white male I have a difficult time even writing this since I’m aware of my privilege and have never experienced violation at the level this woman did. I do though consider myself to be an ally and feminist, and even if I am not the most educated in the subject, I try.

From what I have observed through my windows into the community and watching the fallout, there seems to be three main themes: aggressors and how they should be dealt with as a result of their actions; the community itself and how it reacts; and, finally, the conference scene. I do not feel like there is anything to add for the assaulted, since none of this was their fault.

I want to point out that I’ve been informed on the opinions of the following paragraph. I’m keeping it here for historical reasons, but the following article explains why sharing this information is important for the community

I feel like the actions that were brought against the aggressor were not constructive. The anonymity of the Internet offers the possibility of arming everyone with pitchforks, and facilitating mob mentality. I understand wanting to name and shame the guilty party so that others in the community are not put at risk, but I also feel that this type of community reaction will force them into hiding, and possibly into other communities where they might reoffend. Instead of trying to work on getting this person to the counselling they so clearly need, we push them away with no plans on rehabilitation. This is the same approach that has been used in general via the penal system. The underlying issues are never actually dealt with.

I believe that as a community it is our responsibility to make sure that everyone feels safe within it. While it would be nice to see community leaders standing up in record time, we do need to remember that at their level it becomes political and they need to tread very carefully with what they say. Meanwhile, we as individuals are able to stand up and call out what isn’t acceptable. Members at large are also more numerous than the leaders, and we can help sculpt the community as much as they can, if not more. By calling out the bad behaviour we let the leaders know what we won’t accept and set a positive example for those just getting into the community.

Encouraging the community can be done by praising good behaviour. I am not a fan of shit-lists as they draw attention to the bad behaviour and reinforce by negative example. It’s easier to build up a list of good examples than it is for the negative ones, especially since the negative example set is theoretically infinite. When you see good behaviour, share it via your social circles. Show those in your community what you find acceptable and want to encourage. If you are lucky, a prominent figure in the community will share it, further showing the community what is awesome.

A prominent member of the community suggested that women should avoid attending Ruby conferences; I disagree. By avoiding the conferences it doesn’t challenge the status quo. If anything, I’d love to see more women attend the conferences as a result of this. It might sound strange, but having more women makes those who are attending feel less alienated and creates a community within the community to which they can identify and feel safe. This may result in having what would appear to be cliques, and may make the group unapproachable, but I feel that we as a community still need to mature and grow to a point where this isn’t necessary. It doesn’t mean that the groups aren’t approachable, but it does take a lot of courage to walk up to them and start conversation and you may get shot down. Though, this might be what it currently feels like to be a lady at a tech conference.

Most evening events at conferences tend to be alcohol driven, which can make some people uncomfortable. Aside from things such as lowering the tabs or perhaps issuing out beer tickets, which would deem some companies as uncool I guess, what else could we do? Some conferences have started having alcohol-free alt events such as board game nights. A nice benefit of this is it gives minors something they can go to and rub elbows with other members of the community. Since they are booze free it’s a much safer environment for everyone.

I do not want to see the bar scene go away though. They do provide a more relaxed environment to talk to other people, and I do enjoy pints. I do want to see that aspect of conferences made more safe and inclusive. Having the events in more conducive environments would be a start in my opinion. I went to a conference in San Francisco last year and it seemed like the official outing locations were all clubs with extremely loud music, which made conversation all but impossible. Another thing that would be interesting would be placing a limit on what people can select when choosing their beverages. Limiting people to singles and half-pints should help with the getting excessively drunk bits. I’d honestly love to see members who are pounding back drinks–since it’s a free tab–kicked out. I’ve also found it very difficult to have a conversation with someone whose words are slurred or incomprehensible as a result of drinking too much.

It’s our job as a community to make it a safer place for everyone, from providing alternative safe-space events to encouraging positive behaviour in the community


Day in the Park

IMG_4846

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Canada License.
Permissions beyond the scope of this license may be available at http://christophersaunders.ca.

Alone

IMG_4819

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Canada License.
Permissions beyond the scope of this license may be available at http://christophersaunders.ca.