During the last Steam Next Fest, I played a demo of a puzzle game called DEG that was getting a lot of buzz. The game is made for people who like grid puzzles like Sudoku, or Nurikabe, with many additional unique concepts and puzzle ideas that are tutorialized silently to the player. Needless to say, I was hooked. I reached…
Robin Ward
https://eviltrout.com/ · 39 posts · history since 2012 · active
31 Mar
23 Mar
Background Our next game, The Incident at Galley House, is an adaptation of a text-based game called Type Help. It takes place at Galley House, a dwelling in the English countryside, during a dinner party where things go sideways. Galley House is divided into many rooms, and the core gameplay involves following characters from room to room, listening in on…
27 Jan 2025
The Roottrees are Dead was released on January 15, 2025 and it did much better than I ever expected. The reception has been amazing. In just over a week, the game hit the magic mark of 500 reviews on Steam, and triggered the “Overwhelmingly Positive” status. On BlueSky, Bloomberg writer Jason Schreier blew me away when he posted: “Seven days…
17 Jul 2024
Last year I broke my elbow. This meant that I had to take a break from programming for about six weeks, and The Secrets of Skellig, my indie game, was put on hold. After a couple of weeks, I recovered enough to do some basic keyboard and mouse movements, and I stumbled on a free game called The Roottrees are…
17 Jul 2023
Note: The Secrets of Skellig is on indefinite hold now while I work on other things. I’ve wanted to dip my feet back into game development for a while, and last year I decided to put my money where my mouth is. I resigned from my full time job at Discourse and pulled up a bunch of YouTube tutorials on…
18 Jul 2022
Over the last couple of months, I’ve been posting a series of videos about early PC gaming and programming on my YouTube Channel. It’s been quite a fun journey and I thought I might write a few words about it. I have a lot of nostalgia for early games, which makes sense since it was how I spent most of…
23 Dec 2019
I have two 4K TVs at home, one in the bedroom and one in my living room. Both have consoles attached. One has a PS4 Pro and one has a Nintendo Switch and both are great. However, I also have a gaming PC in my office, which is quite powerful compared to any home console Mine is equipped with a…
3 Jul 2019
I recently moved into a bigger condo which had a wall mount pre-installed in the bedroom for a TV, so I decided to take advantage of it and bought a second TV. Previously, I was using an Intel NUC attached to my TV and running LibreElec. If you’ve not heard of LibreElec, it’s a very cool minimal Linux OS that…
22 May 2018
Once in a while, I daydream about being thrown back in time. I’d have no Wikipedia, no books, or any access to information except what’s already in my head. If I were thrown into Victorian London, what could I do? What could I teach them? Well, the first thing I would do is tell them to wash their hands. With…
13 Apr 2017
It’s been over a year since I wrote a blog entry! And while of course the universal excuse of “I’ve been busy” applies, I think we reached a point in Discourse’s development where we just were able to focus on the product without a lot of stuff getting in our way. I’ve now been working on Discourse full time for…
25 Feb 2016
Back in September, Codinghorror wrote a popular post on the state of android Javascript performance on Discourse’s Meta forum. It drew a lot of attention, and led to some fascinating discussions on our forum and behind the scenes with browser engineers. The poor performance of Discourse on Android was already old news to us at that point: we started paying…
19 Feb 2016
Recently I became enamored with The Witness and after thinking about the game for a long time decided to sit down and record a little essay about it. Check it out below!
29 Jun 2015
Recently I became infatuated with TIS-100, a game which aptly describes itself as “the assembly language programming game you never asked for!” The point of the game is to program the (imaginary) TIS-100 CPU to solve problems. For example, you might need to take input from two ports and swap them, then write the outputs to two other ports. The…
22 Dec 2014
Previously I posted notes and links for my talk about “Ember at 10 feet” from the Embergarten Saturday Symposium. Today my awesome friends at Unspace posted a video of the talk, which you can watch below: Source Code | Online Demo
17 Nov 2014
Over the weekend I spoke at the Embergarten Saturday Symposium, which was an awesome mini conference on Ember in Toronto. My topic was “Ember at 10ft”, and it was about how to build a TV friendly interface in Ember.js. The talk was recorded but not yet posted, however I’ve already posted the source code on github. The github repo contains…
26 Aug 2014
Recently I fell in love with Pretender, the mock server library in Javascript, so I decided to record a screencast showing how to use it in an Ember.js integration test: The source code for the login application is on github. The finished version is in the pretender branch.
16 Aug 2014
I’ve found that a lot of people don’t know how powerful the Chrome Developer Tools are, especially when paired with the Ember Inspector. I recorded this short screencast to show a handful of tricks you can use when debugging Ember.js applications: The source code to the Bug Tracker project is on github.
27 Jun 2014
Once upon a time it used to be difficult to create integration tests in Ember.js. Fortunately, the framework has come a long way and it’s now really easy to get integration testing working in your application. This screencast shows how to set it up with ember-cli: There is some boilerplate code required that you’ll need at the top of your…
3 Jun 2014
Time for another screencast! This one is shorter and shows how easy it is to wrap a jQuery plugin in an Ember.js component for reuse.
29 May 2014
One of my more popular blog entries is on using Ember.js without Ember Data. Recently I’ve been going through my old entries and making sure they don’t have any glaring mistakes, and I realized this would be a good opportunity to convert my emberreddit project to ember-cli. This screencast shows how you can build an Ember.js application without using Ember…
3 May 2014
Javascript is a fantastic example of how something, despite having visible warts and very poor design, can dominate the tech landscape. Nobody uses Javascript because it’s a beautiful language; they use it because it’s ubiquitous. Its warts are now well understood and most have workarounds. An amazing omission in Javascript’s design is the lack of a built-in module system. As…
10 Apr 2014
How many times has the following happened to you? You go to a web site and it asks you to create an account. You fill out a form with all the obvious fields and hit submit. The page refreshes and shows you the form again. Phone Number is required Well, that’s annoying. There was no indication that the site needed…
4 Jan 2014
Everything you render in a browser, whether it’s a blog post or a tweet or a video, has a performance cost. At the very least, you will be asking the browser to render a handful of tags and text elements that make up your user interface. That structure, a subtree in the browser’s DOM, can be quite complicated and memory…
24 Nov 2013
One thing I’m really proud of is that when we launched Discourse, we had first class Internationalization (i18n) support ready to be used. Our first release only English, but thanks to our community we have 18 localizations of our software in progress! Here’s what Discourse looks like in Simplified Chinese: On the server side, Discourse uses Rails’ built in i18n…
5 Oct 2013
I learned very quickly while working on a large open source project is that it is important to make my code hard to break. The primary line of defense for this is a comprehensive test suite, but I think it’s also very important to create functions that are easy to use and difficult to damage. I find I even code…
31 Jul 2013
Back in February, I gave a presentation on Discourse and client side MVC at TechTalksTO. It wasn’t recorded, but I’ve taken the liberty of creating a video version of the presentation with an audio track. While the presentation is about Browser Applications, I take a large detour in the beginning to talk about Discourse and Forum software in general. Enjoy!
7 Jul 2013
Computed Properties By design, Handlebars templates don’t allow complex expressions. You are given an {{#if}} block helper, but it can only evaluate whether something is “truthy” (aka true, a non-empty string or array or other value that is not undefined or null.) For example, you can’t do something like this: {{#if (eyes.length == 1) && (horns.length == 1) && flies…
19 Jun 2013
Important Update (May 25, 2014): Google has started parsing and indexing Javascript. The approach of this article is to use <noscript> tags but Google will likely ignore those now. We upgraded our site to sniff Google and other popular search engines and serve our simple content that way. However, in the future it might not be a concern as Google…
15 Jun 2013
Recently I got together with some local developers to discuss client side MVC frameworks. We ended up discussing many of the differences between AngularJS and Ember. Discourse is an Ember application and has been since the first prototype, so I have a lot of experience with it. However, it became clear during the conversation with my peers that there was…
26 May 2013
Trade offs As a developer you’re constantly faced with issues of choice: What library is best? What framework is best? What platform should we deploy on? Most of the time there isn’t a clear winner. The decision you make comes down to a series of trade offs. Do you want to optimize for developer happiness or performance? Do you care…
23 Mar 2013
Update May 26, 2014 The concepts in this article are still true, but I’ve recorded a screencast showing how to use ember without ember data using ember-cli and the latest version of Ember. It goes beyond the contents of this article, showing how to create an adapter, store and even your own identity map. Check it out! Ember Data is…
25 Feb 2013
Recently we ported Discourse from CoffeeScript to plain old Javascript. The process was straightforward since CoffeeScript spits out fairly good Javascript, although I did have to spend the better part of a day cleaning it up afterwards. (Note: we’d love any patches to further tidy up the generated Javascript.) One thing that CoffeeScript does by default that’s nice is it…
16 Feb 2013
Shortly after we began working together on Discourse, Jeff wrote a post about infinite scrolling. At first, I was surprised at how many people claimed to hate sites that used it. However, after reading through many comments about it, I realized that most didn’t hate the scrolling itself, they hated how it broke their browser! Infinite Scrolling done wrong: Twitter…
10 Feb 2013
This week, I was delighted to finally reveal Discourse, the app I’ve been working on for most of the last year in secrecy with awesome people. The launch got a lot of attention - we were featured on Hacker News, Slashdot, Wired, Reddit, Techcrunch and countless other places. Personally I’ve been floored with the amount of feedback so far. It’s…
16 Jan 2013
ShitRedditSays and The Downvote Brigades of Reddit (note: if you’re familiar with reddit and ShitRedditSays, you can skip to the next section.) As you probably know, Reddit is a site that revolves around voting. All users are encouraged to vote on things, which are then prioritized based on their total scores. Over time, Reddit’s userbase has grown a lot. It…
10 Jan 2013
A story of a game exploit Once upon a time I developed a somewhat popular web game called Forumwarz. At its peak, we were serving about 6 million dynamic requests a day off a single quad-core server. Forumwarz limits how many turns a player can take in a day. We designed it this way so that the competitive aspect of…
6 Jan 2013
Turbolinks Turbolinks is a new Ruby library, enabled in Rails 4 by default, that is designed to speed up your web applications. It does this by binding a Javascript handler to all link clicks. Instead of allowing the browser to load the new page, it fetches it in the background via AJAX. It then parses out the body, and injects…
3 Jan 2013
Recently, I wrote a short essay on privilege and programming. It was quite popular on /r/programming and generated hundreds of comments, both there and on this blog. I was surprised and flattered to see the majority of the comments agreed with my post, however a few people brought up a concern which I’d like to address: Why this is person…
30 Dec 2012
When I was in grade 6, I handed out a couple of 3 1/2" floppy disks to a couple of friends in my class whose parents had recently purchased PCs. On each disk was a game I created. You’d fly a ship horizontally through outer space. It had two controls, up and down, to avoid asteroids. The longer you survived…