<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blogs on Evil Trout Inc.</title>
    <link>https://eviltrout.com/blog/feed.xml</link>
    <description>Recent content in Blogs on Evil Trout Inc.</description>
    <generator>Hugo</generator>
    <language>en-ca</language>
    <lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://eviltrout.com/blog/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Evil Trout &#43; DEG</title>
      <link>https://eviltrout.com/blog/2026-03-31-evil-trout-plus-deg/</link>
      <pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2026-03-31-evil-trout-plus-deg/</guid>
      <description>&lt;img src=&#34;https://eviltrout.com/images/deg-logo.jpg&#34; alt=&#34;DEG logo&#34; style=&#34;margin: 0 auto&#34;&gt;&#xA;&lt;p&gt;During the last Steam Next Fest, I played a demo of a puzzle game called &lt;a href=&#34;https://store.steampowered.com/app/4044990/DEG/&#34;&gt;DEG&lt;/a&gt; that was getting a lot of buzz.&lt;/p&gt;&#xA;&lt;p&gt;The game is made for people who like grid puzzles like &lt;a href=&#34;https://en.wikipedia.org/wiki/Sudoku&#34;&gt;Sudoku&lt;/a&gt;, or &lt;a href=&#34;https://en.wikipedia.org/wiki/Nurikabe_(puzzle)&#34;&gt;Nurikabe&lt;/a&gt;, with many additional unique concepts and puzzle ideas that are tutorialized silently to the player.&lt;/p&gt;&#xA;&lt;p&gt;Needless to say, I was &lt;em&gt;hooked&lt;/em&gt;. I reached out to Doseo, its creator, and inquired about investing in the game. We discussed how he would use additional money to improve and market the game, and a deal was struck.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Anatomy of a Room</title>
      <link>https://eviltrout.com/blog/2026-03-23-anatomy-of-a-room/</link>
      <pubDate>Mon, 23 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2026-03-23-anatomy-of-a-room/</guid>
      <description>&lt;h3 id=&#34;background&#34;&gt;Background&lt;/h3&gt;&#xA;&lt;p&gt;Our next game, &lt;strong&gt;The Incident at Galley House&lt;/strong&gt;, is an adaptation of a text-based game called &lt;strong&gt;Type Help&lt;/strong&gt;. It takes place at Galley House, a dwelling in the English countryside, during a dinner party where things go sideways.&lt;/p&gt;&#xA;&lt;p&gt;Galley House is divided into many rooms, and the core gameplay involves following characters from room to room, listening in on their conversations, learning their motives, and eventually piecing together a mysterious incident.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building The Roottrees are Dead</title>
      <link>https://eviltrout.com/blog/2025-01-27-building-the-roottrees/</link>
      <pubDate>Mon, 27 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2025-01-27-building-the-roottrees/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://store.steampowered.com/app/2754380/The_Roottrees_are_Dead/&#34;&gt;The Roottrees are Dead&lt;/a&gt; was released on January 15, 2025 and&#xA;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&#xA;reviews on Steam, and triggered the &amp;ldquo;Overwhelmingly Positive&amp;rdquo; status.&lt;/p&gt;&#xA;&lt;p&gt;On BlueSky, Bloomberg writer Jason Schreier blew me away when &lt;a href=&#34;https://bsky.app/profile/jasonschreier.bsky.social/post/3lfazufigek23&#34;&gt;he posted&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;Seven days into 2025 and I&amp;rsquo;ve already played what I suspect will be one of my favorite games of the year: The Roottrees Are Dead.&amp;rdquo; Wow!&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Roottrees are (still) Dead</title>
      <link>https://eviltrout.com/blog/2024-03-03-the-roottrees-are-dead/</link>
      <pubDate>Wed, 17 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2024-03-03-the-roottrees-are-dead/</guid>
      <description>&lt;p&gt;Last year I broke my elbow. This meant that I had to take a break from programming for about six weeks, and &lt;a href=&#34;https://secretsofskellig.com&#34;&gt;The Secrets of Skellig&lt;/a&gt;, my indie game, was put on hold.&lt;/p&gt;&#xA;&lt;p&gt;After a couple of weeks, I recovered enough to do some basic keyboard and mouse movements, and I stumbled on a free game called &lt;a href=&#34;https://jjohnstongames.itch.io/the-roottrees-are-dead&#34;&gt;The Roottrees are Dead&lt;/a&gt; by Jeremy Johnston. It was &lt;em&gt;exactly&lt;/em&gt; my kind of thing: a thinky game where you have to use your brain to fill in a family tree, based on results from a search engine. It was &lt;a href=&#34;https://www.herstorygame.com&#34;&gt;Her Story&lt;/a&gt; meets &lt;a href=&#34;https://en.wikipedia.org/wiki/Return_of_the_Obra_Dinn&#34;&gt;Return of the Obra Dinn&lt;/a&gt; meets &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Case_of_the_Golden_Idol&#34;&gt;The Case of the Golden Idol&lt;/a&gt;, and it consumed my free time for several days in a row.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Secrets of Skellig</title>
      <link>https://eviltrout.com/blog/2023-07-17-the-secrets-of-skellig/</link>
      <pubDate>Mon, 17 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2023-07-17-the-secrets-of-skellig/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Note: The Secrets of Skellig is on indefinite hold now while I work on other things.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve wanted to dip my feet back into game development for a while, and last year I decided to put my money where my&#xA;mouth is. I resigned from my full time job at Discourse and pulled up a bunch of YouTube tutorials on Blender and Godot.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s been a ridiculous amount of fun, and I&amp;rsquo;ve learned so much about how modern 3D games are made. I&amp;rsquo;m finally ready to&#xA;announce what I&amp;rsquo;ve been working on. It&amp;rsquo;s a puzzle game, inspired by crosswords, called &amp;ldquo;The Secrets of Skellig.&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Retro PC Gaming Nostalgia Kick</title>
      <link>https://eviltrout.com/blog/2022-07-13-my-retro-pc-gaming-nostalgia-kick/</link>
      <pubDate>Mon, 18 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2022-07-13-my-retro-pc-gaming-nostalgia-kick/</guid>
      <description>&lt;p&gt;Over the last couple of months, I&amp;rsquo;ve been posting a series of videos about early PC gaming and programming on my &lt;a href=&#34;https://www.youtube.com/channel/UCBfKBvnIbB93AQgLNo_K8Bg&#34;&gt;YouTube Channel&lt;/a&gt;. It&amp;rsquo;s been quite a fun journey and I thought I might write a few words about it.&lt;/p&gt;&#xA;&lt;p&gt;I have a lot of nostalgia for early games, which makes sense since it was how I spent most of my free time in the 80&amp;rsquo;s and 90&amp;rsquo;s. Times were boring before the Internet :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Home streaming my games in 4K</title>
      <link>https://eviltrout.com/blog/2019-12-23-home-streaming-in-4k/</link>
      <pubDate>Mon, 23 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2019-12-23-home-streaming-in-4k/</guid>
      <description>&lt;p&gt;I have two 4K TVs at home, one in the bedroom and one in my living room. Both have consoles attached. One has a&#xA;&lt;a href=&#34;https://amzn.to/374Rd6V&#34;&gt;PS4 Pro&lt;/a&gt; and one has a &lt;a href=&#34;https://amzn.to/2ET1VkF&#34;&gt;Nintendo Switch&lt;/a&gt; and both are great.&lt;/p&gt;&#xA;&lt;p&gt;However, I also have a gaming PC in my office, which is quite powerful compared to any home console&#xA;Mine is equipped with a &lt;a href=&#34;https://amzn.to/2EPnTW2&#34;&gt;RTX 2080 TI&lt;/a&gt; GPU, and a &lt;a href=&#34;https://amzn.to/2sTFjOq&#34;&gt;9900K&lt;/a&gt; processor, so it can play pretty much any new game at 4K with a solid 60 fps on high settings.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a Home Media Server with Docker Compose</title>
      <link>https://eviltrout.com/blog/2019-07-03-building-home-media-download-server/</link>
      <pubDate>Wed, 03 Jul 2019 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2019-07-03-building-home-media-download-server/</guid>
      <description>&lt;p&gt;I recently moved into a bigger condo which had a wall mount pre-installed in the bedroom for a TV, so I decided&#xA;to take advantage of it and bought a &lt;a href=&#34;https://www.amazon.ca/gp/product/B07DY5152H/ref=as_li_tl?ie=UTF8&amp;amp;camp=15121&amp;amp;creative=330641&amp;amp;creativeASIN=B07DY5152H&amp;amp;linkCode=as2&amp;amp;tag=eviltrout-20&amp;amp;linkId=08b5818587b23a3ca62b39e33a847386&#34;&gt;second TV&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Previously, I was using an &lt;a href=&#34;https://www.amazon.ca/gp/product/B01N2UMKZ5/ref=as_li_tl?ie=UTF8&amp;amp;camp=15121&amp;amp;creative=330641&amp;amp;creativeASIN=B01N2UMKZ5&amp;amp;linkCode=as2&amp;amp;tag=eviltrout-20&amp;amp;linkId=b50817b8e8ea4b8eccc3dea40a8fd530&#34;&gt;Intel NUC&lt;/a&gt; attached to my TV and running &lt;a href=&#34;https://libreelec.tv/&#34;&gt;LibreElec&lt;/a&gt;. If you&amp;rsquo;ve not heard of LibreElec, it&amp;rsquo;s a very cool minimal Linux OS that sets itself up to run &lt;a href=&#34;https://kodi.tv/&#34;&gt;Kodi&lt;/a&gt;. It is remarkably easy to set up, and even found and setup my obscure USB remote control automatically.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Candles, Programming and Archetypes</title>
      <link>https://eviltrout.com/blog/2018-05-22-candles-programming-archetypes/</link>
      <pubDate>Tue, 22 May 2018 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2018-05-22-candles-programming-archetypes/</guid>
      <description>&lt;p&gt;Once in a while, I daydream about being thrown back in time. I&amp;rsquo;d have no Wikipedia, no books, or any&#xA;access to information except what&amp;rsquo;s already in my head.&lt;/p&gt;&#xA;&lt;p&gt;If I were thrown into Victorian London, what could I do? What could I teach them?&lt;/p&gt;&#xA;&lt;p&gt;Well, the first thing I would do is tell them to wash their hands. With soap. Frequently. That would probably&#xA;be the most significant contribution I could make.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The value of a thousand little features</title>
      <link>https://eviltrout.com/blog/2017-04-13-a-thousand-little-features/</link>
      <pubDate>Thu, 13 Apr 2017 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2017-04-13-a-thousand-little-features/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been over a year since I &lt;a href=&#34;https://eviltrout.com/2016/02/25/fixing-android-performance.html&#34;&gt;wrote a blog entry&lt;/a&gt;! And while of course the universal excuse of &amp;ldquo;I&amp;rsquo;ve been busy&amp;rdquo; applies, I think we reached a point in &lt;a href=&#34;http://www.discourse.org/&#34;&gt;Discourse&lt;/a&gt;&amp;rsquo;s development where we just were able to focus on the product without a lot of stuff getting in our way.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve now been working on Discourse full time for 5 years. In the beginning we had a lot more uncertainty about technical decisions. Some of the things we debated interally include:&lt;/p&gt;</description>
    </item>
    <item>
      <title>We finally did something about Android Performance</title>
      <link>https://eviltrout.com/blog/2016-02-25-fixing-android-performance/</link>
      <pubDate>Thu, 25 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2016-02-25-fixing-android-performance/</guid>
      <description>&lt;p&gt;Back in September, Codinghorror wrote a popular post on &lt;a href=&#34;https://meta.discourse.org/t/the-state-of-javascript-on-android-in-2015-is-poor/33889&#34;&gt;the state of android Javascript performance&lt;/a&gt;&#xA;on Discourse&amp;rsquo;s Meta forum. It drew a lot of attention, and led to some fascinating discussions on our forum&#xA;and behind the scenes with browser engineers.&lt;/p&gt;&#xA;&lt;img src=&#39;https://eviltrout.com/images/android-sad.png&#39; align=&#39;right&#39;&gt;&#xA;&lt;p&gt;The poor performance of Discourse on Android was already old news to us at that point: we started paying attention&#xA;several years ago, and have spent some time contributing to the Ember.js community&#xA;tools to help profile application performance, in particular the &amp;ldquo;Render Performance&amp;rdquo; tab on the&#xA;&lt;a href=&#34;https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi?hl=en&#34;&gt;Ember Inspector&lt;/a&gt;,&#xA;and the &lt;a href=&#34;http://emberperf.eviltrout.com/&#34;&gt;ember performance suite&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The 5 Layers of Depth in The Witness</title>
      <link>https://eviltrout.com/blog/2016-02-19-about-the-witness/</link>
      <pubDate>Fri, 19 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2016-02-19-about-the-witness/</guid>
      <description>&lt;p&gt;Recently I became enamored with &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Witness_(2016_video_game)&#34;&gt;The Witness&lt;/a&gt;&#xA;and after thinking about the game for a long time decided to sit down and record a little essay&#xA;about it.&lt;/p&gt;&#xA;&lt;p&gt;Check it out below!&lt;/p&gt;&#xA;&lt;iframe width=&#34;640&#34; height=&#34;360&#34; src=&#34;https://www.youtube.com/embed/h_HuWDbWsnU&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;</description>
    </item>
    <item>
      <title>TIS-100: My emulator for a CPU that doesn&#39;t exist</title>
      <link>https://eviltrout.com/blog/2015-06-29-an-emulator-for-tis-100/</link>
      <pubDate>Mon, 29 Jun 2015 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2015-06-29-an-emulator-for-tis-100/</guid>
      <description>&lt;p&gt;Recently I became infatuated with &lt;a href=&#34;http://www.zachtronics.com/tis-100/&#34;&gt;TIS-100&lt;/a&gt;, a game which aptly&#xA;describes itself as &amp;ldquo;the assembly language programming game you never asked for!&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;The point of the game is to program the (imaginary) TIS-100 CPU to solve problems. For example,&#xA;you might need to take input from two ports and swap them, then write the outputs to two other&#xA;ports.&lt;/p&gt;&#xA;&lt;p&gt;The game flies in the face of all modern game design: The first thing you need to do is sit and&#xA;read a 14 page PDF that outlines the TIS-100 instruction set. And when I say &amp;ldquo;read&amp;rdquo;, I mean &amp;ldquo;learn&amp;rdquo;,&#xA;because a quick skim is not going to cut it! There are no tutorial levels or handholding.&#xA;You &lt;strong&gt;must read the manual.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Watch: Ember at 10 feet</title>
      <link>https://eviltrout.com/blog/2014-12-22-watch-ember-tv/</link>
      <pubDate>Mon, 22 Dec 2014 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2014-12-22-watch-ember-tv/</guid>
      <description>&lt;p&gt;Previously I &lt;a href=&#34;https://eviltrout.com/2014/11/17/ember-tv.html&#34;&gt;posted notes and links&lt;/a&gt; for my talk about &amp;ldquo;Ember at 10 feet&amp;rdquo; from the&#xA;&lt;a href=&#34;https://unspace.ca/embergarten/&#34;&gt;Embergarten Saturday Symposium&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Today my awesome friends at &lt;a href=&#34;https://unspace.ca/&#34;&gt;Unspace&lt;/a&gt; posted a video of the talk, which you can watch below:&lt;/p&gt;&#xA;&lt;iframe src=&#34;//player.vimeo.com/video/115003538&#34; width=&#34;500&#34; height=&#34;281&#34; frameborder=&#34;0&#34; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/eviltrout/ember-tv&#34;&gt;Source Code&lt;/a&gt; | &lt;a href=&#34;http://embertv.eviltrout.com/&#34;&gt;Online Demo&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ember-tv: Creating a 10 foot interface in Ember.js</title>
      <link>https://eviltrout.com/blog/2014-11-17-ember-tv/</link>
      <pubDate>Mon, 17 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2014-11-17-ember-tv/</guid>
      <description>&lt;p&gt;Over the weekend I spoke at the &lt;a href=&#34;https://unspace.ca/embergarten/&#34;&gt;Embergarten Saturday Symposium&lt;/a&gt;, which&#xA;was an awesome mini conference on Ember in Toronto. My topic was &amp;ldquo;Ember at 10ft&amp;rdquo;, and it was about&#xA;how to build a TV friendly interface in Ember.js.&lt;/p&gt;&#xA;&lt;p&gt;The talk was recorded but not yet posted, however I&amp;rsquo;ve already posted the &lt;a href=&#34;https://github.com/eviltrout/ember-tv&#34;&gt;source code&lt;/a&gt;&#xA;on github. The github repo contains my slides from the talk as well as speaking notes.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve also put up an &lt;a href=&#34;http://embertv.eviltrout.com&#34;&gt;online demo&lt;/a&gt;. Check it out!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Screencast: Using Pretender to mock a server with Ember.js</title>
      <link>https://eviltrout.com/blog/2014-08-26-pretender/</link>
      <pubDate>Tue, 26 Aug 2014 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2014-08-26-pretender/</guid>
      <description>&lt;p&gt;Recently I fell in love with &lt;a href=&#34;https://github.com/trek/pretender&#34;&gt;Pretender&lt;/a&gt;, the mock server library in&#xA;Javascript, so I decided to record a screencast showing how to use it in an Ember.js integration test:&lt;/p&gt;&#xA;&lt;iframe width=&#34;640&#34; height=&#34;360&#34; src=&#34;//www.youtube.com/embed/b5VUnc_GsV4&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;The source code for the login application is &lt;a href=&#34;https://github.com/eviltrout/login&#34;&gt;on github&lt;/a&gt;. The finished&#xA;version is in the &lt;a href=&#34;https://github.com/eviltrout/login/tree/pretender&#34;&gt;pretender branch&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Screencast: Debugging an Ember.js Application</title>
      <link>https://eviltrout.com/blog/2014-08-16-debugging-ember-js/</link>
      <pubDate>Sat, 16 Aug 2014 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2014-08-16-debugging-ember-js/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve found that a lot of people don&amp;rsquo;t know how powerful the Chrome Developer Tools are,&#xA;especially when paired with the Ember Inspector. I recorded this short screencast to show&#xA;a handful of tricks you can use when debugging Ember.js applications:&lt;/p&gt;&#xA;&lt;iframe width=&#34;640&#34; height=&#34;360&#34; src=&#34;//www.youtube.com/embed/mXHzC0LdTuk&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;The source code to the Bug Tracker project is &lt;a href=&#34;https://github.com/eviltrout/bugs&#34;&gt;on github&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating an Integration test in Ember.js (Screencast)</title>
      <link>https://eviltrout.com/blog/2014-06-27-integration-testing/</link>
      <pubDate>Fri, 27 Jun 2014 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2014-06-27-integration-testing/</guid>
      <description>&lt;p&gt;Once upon a time it used to be difficult to create integration tests in Ember.js.&#xA;Fortunately, the framework has come a long way and it&amp;rsquo;s now really easy to get&#xA;integration testing working in your application. This screencast shows how&#xA;to set it up with ember-cli:&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;//www.youtube.com/embed/2O24ltr0pPU&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;There is some boilerplate code required that you&amp;rsquo;ll need at the top of your&#xA;integration test files if you want to do it yourself. Here it is:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wrapping a jQuery plugin in a Ember.js component (Screencast)</title>
      <link>https://eviltrout.com/blog/2014-06-03-jquery-component/</link>
      <pubDate>Tue, 03 Jun 2014 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2014-06-03-jquery-component/</guid>
      <description>&lt;p&gt;Time for another screencast! This one is shorter and shows how easy it is to wrap&#xA;a jQuery plugin in an Ember.js component for reuse.&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;//www.youtube.com/embed/S_l_DL8ysQQ&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;</description>
    </item>
    <item>
      <title>Building Emberredit (screencast)</title>
      <link>https://eviltrout.com/blog/2014-05-29-emberreddit-screencast/</link>
      <pubDate>Thu, 29 May 2014 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2014-05-29-emberreddit-screencast/</guid>
      <description>&lt;p&gt;One of my more popular blog entries is on &lt;a href=&#34;https://eviltrout.com/2013/03/23/ember-without-data.html&#34;&gt;using Ember.js without Ember Data&lt;/a&gt;.&#xA;Recently I&amp;rsquo;ve been going through my old entries and making sure they don&amp;rsquo;t have any glaring mistakes,&#xA;and I realized this would be a good opportunity to convert my &lt;a href=&#34;https://github.com/eviltrout/emberreddit&#34;&gt;emberreddit&lt;/a&gt;&#xA;project to &lt;a href=&#34;http://iamstef.net/ember-cli/&#34;&gt;ember-cli&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;//www.youtube.com/embed/7twifrxOTQY&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;This screencast shows how you can build an Ember.js application without using Ember Data. It starts off simple and then shows how to build advanced stuff like an identity map yourself.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting Started with ES6 Modules</title>
      <link>https://eviltrout.com/blog/2014-05-03-getting-started-with-es6/</link>
      <pubDate>Sat, 03 May 2014 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2014-05-03-getting-started-with-es6/</guid>
      <description>&lt;p&gt;Javascript is a fantastic example of how something, despite having visible warts&#xA;and &lt;a href=&#34;http://www.2ality.com/2013/04/12quirks.html&#34;&gt;very poor design&lt;/a&gt;, can dominate the tech&#xA;landscape. Nobody uses Javascript because it&amp;rsquo;s a beautiful language; they use it because it&amp;rsquo;s&#xA;ubiquitous. Its warts are now well understood and most have workarounds.&lt;/p&gt;&#xA;&lt;p&gt;An amazing omission in Javascript&amp;rsquo;s design is the lack of a built-in module system. As&#xA;more projects used Javascript and shared more code, the need for a robust module system&#xA;became necessary. Two contenders sprung up, &lt;a href=&#34;https://github.com/amdjs/amdjs-api/wiki/AMD&#34;&gt;Asynchronous Module Definition&lt;/a&gt; (AMD)&#xA;and &lt;a href=&#34;http://wiki.commonjs.org/wiki/CommonJS&#34;&gt;CommonJS&lt;/a&gt; (CJS). The former is much more popular with&#xA;browser applications and the latter is much more popular with server applications written&#xA;in &lt;a href=&#34;http://nodejs.org&#34;&gt;node.js&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Refresh Test</title>
      <link>https://eviltrout.com/blog/2014-04-10-the-refresh-test/</link>
      <pubDate>Thu, 10 Apr 2014 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2014-04-10-the-refresh-test/</guid>
      <description>&lt;p&gt;How many times has the following happened to you?&lt;/p&gt;&#xA;&lt;p&gt;You go to a web site and it asks you to create an account. You fill out a&#xA;form with all the obvious fields and hit submit. The page refreshes and&#xA;shows you the form again.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Phone Number is required&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Well, that&amp;rsquo;s annoying. There was no indication that the site needed&#xA;your phone number. You prefer not to give out your phone number to every&#xA;web site, but this one is run by a company you trust, so you scroll down and&#xA;fill it out. You submit the form again.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hiding Offscreen Content in Ember.js</title>
      <link>https://eviltrout.com/blog/2014-01-04-hiding-offscreen-ember/</link>
      <pubDate>Sat, 04 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2014-01-04-hiding-offscreen-ember/</guid>
      <description>&lt;p&gt;Everything you render in a browser, whether it&amp;rsquo;s a blog post or a tweet or a video, has a&#xA;performance cost.&lt;/p&gt;&#xA;&lt;p&gt;At the very least, you will be asking the browser to render a handful of tags and text&#xA;elements that make up your user interface. That structure, a subtree in the browser&amp;rsquo;s&#xA;DOM, can be quite complicated and memory intensive.&lt;/p&gt;&#xA;&lt;p&gt;The more tags and elements you render, the slower the browser is going to perform, and&#xA;the more memory it is going to use to do it. It follows that if you give the browser&#xA;less work to do, it will do it faster.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Internationalization Support in Ember.js</title>
      <link>https://eviltrout.com/blog/2013-11-24-i18n-in-ember/</link>
      <pubDate>Sun, 24 Nov 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-11-24-i18n-in-ember/</guid>
      <description>&lt;p&gt;One thing I&amp;rsquo;m really proud of is that when we launched Discourse, we had first class Internationalization (i18n) support&#xA;ready to be used. Our first release only English, but thanks to our community we have 18&#xA;localizations of our software in progress! Here&amp;rsquo;s what Discourse looks like in Simplified Chinese:&lt;/p&gt;&#xA;&lt;img src=&#34;https://eviltrout.com/images/discourse-chinese.png&#34; class=&#34;screenshot&#34; alt=&#34;Discourse in Chinese&#34;&gt;&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;&lt;p&gt;On the server side, Discourse uses Rails&amp;rsquo; built in &lt;a href=&#34;http://guides.rubyonrails.org/i18n.html&#34;&gt;i18n support&lt;/a&gt;. It has been&#xA;around for a long time and works easily so I won&amp;rsquo;t go into that. Check out the documentation for your server side&#xA;framework of choice for more.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enemy of the State</title>
      <link>https://eviltrout.com/blog/2013-10-05-enemy-of-the-state/</link>
      <pubDate>Sat, 05 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-10-05-enemy-of-the-state/</guid>
      <description>&lt;p&gt;I learned very quickly while working on a&#xA;&lt;a href=&#34;https://github.com/discourse/discourse&#34;&gt;large open source project&lt;/a&gt; is that it&#xA;is important to make my code hard to break. The primary line of defense for this is a&#xA;comprehensive test suite, but I think it&amp;rsquo;s also very important to create functions&#xA;that are easy to use and difficult to damage.&lt;/p&gt;&#xA;&lt;p&gt;I find I even code this way on personal projects that will never be released. Even if&#xA;you never work on a team with other developers, there is a good chance you will forget&#xA;a lot of implementation details of the code that you aren&amp;rsquo;t actively working on. You need to&#xA;protect your code from yourself!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let&#39;s Talk about Browser Applications (and Forums and Discourse)</title>
      <link>https://eviltrout.com/blog/2013-07-31-lets-talk-about-browser-applications/</link>
      <pubDate>Wed, 31 Jul 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-07-31-lets-talk-about-browser-applications/</guid>
      <description>&lt;p&gt;Back in &lt;a href=&#34;http://techtalksto.com/post/43572802208/robin-ward-presenting-discourse-ember-js-and-client&#34;&gt;February&lt;/a&gt;, I gave&#xA;a presentation on Discourse and client side MVC at TechTalksTO.&lt;/p&gt;&#xA;&lt;p&gt;It wasn&amp;rsquo;t recorded, but I&amp;rsquo;ve taken the liberty of creating a video version of the presentation with an audio track.&lt;/p&gt;&#xA;&lt;p&gt;While the presentation is about Browser Applications, I take a large detour in the beginning to talk about&#xA;&lt;a href=&#34;http://discourse.org&#34;&gt;Discourse&lt;/a&gt; and Forum software in general. Enjoy!&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;//www.youtube.com/embed/li7VT0V6IAk&#34; frameborder=&#34;0&#34; allowfullscreen=&#34;yes&#34;&gt;&#xA;&lt;/iframe&gt;</description>
    </item>
    <item>
      <title>Computed Property Macros</title>
      <link>https://eviltrout.com/blog/2013-07-07-computed-property-macros/</link>
      <pubDate>Sun, 07 Jul 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-07-07-computed-property-macros/</guid>
      <description>&lt;h3 id=&#34;computed-properties&#34;&gt;Computed Properties&lt;/h3&gt;&#xA;&lt;p&gt;By design, &lt;a href=&#34;http://handlebarsjs.com/&#34;&gt;Handlebars&lt;/a&gt; templates don&amp;rsquo;t allow complex expressions. You are given&#xA;an &lt;code&gt;{{#if}}&lt;/code&gt; block helper, but it can only evaluate whether something is &amp;ldquo;truthy&amp;rdquo; (aka &lt;code&gt;true&lt;/code&gt;, a non-empty&#xA;string or array or other value that is not &lt;code&gt;undefined&lt;/code&gt; or &lt;code&gt;null&lt;/code&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;For example, you &lt;strong&gt;can&amp;rsquo;t&lt;/strong&gt; do something like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-handlebars&#34; data-lang=&#34;handlebars&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;{{&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;#if&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;(&lt;/span&gt;eyes.length &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;(&lt;/span&gt;horns.length &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; flies &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;(&lt;/span&gt;color &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;purple&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; eatsDudes&lt;span style=&#34;color:#75715e&#34;&gt;}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;i&amp;gt;It was a one-eyed, one-horned, flying purple people eater!&amp;lt;/i&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;{{&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;/if&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Handlebars encourages you to use a single evaluation for your logic:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding Support for Search Engines to your Javascript Applications</title>
      <link>https://eviltrout.com/blog/2013-06-19-adding-support-for-search-engines-to-your-javascript-applications/</link>
      <pubDate>Wed, 19 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-06-19-adding-support-for-search-engines-to-your-javascript-applications/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Important Update (May 25, 2014)&lt;/strong&gt;: Google has started parsing and indexing Javascript. The approach of this article is to use&#xA;&lt;code&gt;&amp;lt;noscript&amp;gt;&lt;/code&gt; tags but Google will likely ignore those now. We upgraded our site to sniff Google and other popular&#xA;search engines and serve our simple content that way. However, in the future it might not be a concern as Google&#xA;plan on having Javascript sites &lt;em&gt;just work!&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;It&amp;rsquo;s a myth that if you use a client side MVC framework that your application&amp;rsquo;s content cannot&#xA;be indexed by search engines. In fact, &lt;a href=&#34;https://www.google.ca/search?q=site:meta.discourse.org+javascript&#34;&gt;Discourse forums were indexable by Google&lt;/a&gt; the day we launched.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AngularJS vs Ember</title>
      <link>https://eviltrout.com/blog/2013-06-15-ember-vs-angular/</link>
      <pubDate>Sat, 15 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-06-15-ember-vs-angular/</guid>
      <description>&lt;p&gt;Recently I got together with some local developers to discuss client side MVC frameworks. We ended up discussing many of the differences between &lt;a href=&#34;http://angularjs.org/&#34;&gt;AngularJS&lt;/a&gt; and &lt;a href=&#34;http://emberjs.com/&#34;&gt;Ember&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.discourse.org/&#34;&gt;Discourse&lt;/a&gt; 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 a lot about AngularJS I didn&amp;rsquo;t know.&lt;/p&gt;&#xA;&lt;p&gt;There is evidence that AngularJS is beating out Ember in terms of developer mind share: there are more Stack Overflow questions dedicated to AngularJS. AngularJS has more stars and forks on Github. At a recent Javascript meetup in Toronto, when polled virtually every developer expressed interest in learning more about AngularJS. Clearly there is something to this framework!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Organizing Data in Long Lived Applications</title>
      <link>https://eviltrout.com/blog/2013-05-26-organizing-data-in-long-lived-applications/</link>
      <pubDate>Sun, 26 May 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-05-26-organizing-data-in-long-lived-applications/</guid>
      <description>&lt;h3 id=&#34;trade-offs&#34;&gt;Trade offs&lt;/h3&gt;&#xA;&lt;p&gt;As a developer you&amp;rsquo;re constantly faced with issues of choice: What library is best? What framework is best? What&#xA;platform should we deploy on?&lt;/p&gt;&#xA;&lt;p&gt;Most of the time there isn&amp;rsquo;t a clear winner. The decision you make comes down to a series of trade offs. Do you&#xA;want to optimize for developer happiness or performance? Do you care more about platform maturity or cost?&lt;/p&gt;&#xA;&lt;p&gt;One trade off Ember.js has made relates to how it favors &lt;em&gt;long living applications&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ember without Ember Data</title>
      <link>https://eviltrout.com/blog/2013-03-23-ember-without-data/</link>
      <pubDate>Sat, 23 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-03-23-ember-without-data/</guid>
      <description>&lt;h3 id=&#34;update-may-26-2014&#34;&gt;Update May 26, 2014&lt;/h3&gt;&#xA;&lt;p&gt;The concepts in this article are still true, but I&amp;rsquo;ve recorded a &lt;a href=&#34;https://www.youtube.com/watch?v=7twifrxOTQY&#34;&gt;screencast&lt;/a&gt;&#xA;showing how to use ember without ember data using ember-cli and the latest version of Ember.&#xA;It goes beyond the contents of this article, showing how to create an adapter, store and&#xA;even your own identity map. &lt;strong&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=7twifrxOTQY&#34;&gt;Check it out&lt;/a&gt;&lt;/strong&gt;!&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/emberjs/data&#34;&gt;Ember Data&lt;/a&gt; is a persistence layer for &lt;a href=&#34;http://emberjs.com/&#34;&gt;Ember.Js&lt;/a&gt;.&#xA;Unlike Ember, which currently has a candidate for a 1.0 release, Ember Data is still very much&#xA;a work in progress. This has been a source of confusion for people who are learning Ember, as the two&#xA;frameworks are complimentary but currently exist in different realms of stability.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Generating IIFEs in Rails</title>
      <link>https://eviltrout.com/blog/2013-02-25-iife-in-rails/</link>
      <pubDate>Mon, 25 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-02-25-iife-in-rails/</guid>
      <description>&lt;p&gt;Recently we ported Discourse from&#xA;&lt;a href=&#34;http://meta.discourse.org/t/is-it-better-for-discourse-to-use-javascript-or-coffeescript/3153&#34;&gt;CoffeeScript to plain old Javascript&lt;/a&gt;.&#xA;The process was straightforward since CoffeeScript spits out fairly good Javascript, although I did have to spend the better part of&#xA;a day &lt;a href=&#34;https://github.com/discourse/discourse/commit/e461c842537b5c48e6f99fa658236948b850276b&#34;&gt;cleaning it up afterwards&lt;/a&gt;. (Note: we&amp;rsquo;d&#xA;love any patches to further tidy up the generated Javascript.)&lt;/p&gt;&#xA;&lt;p&gt;One thing that CoffeeScript does by default that&amp;rsquo;s nice is it wraps everything in an Immediately Invoked Function Expression (IIFE).&#xA;If you&amp;rsquo;re a Javascript developer you&amp;rsquo;ve almost certainly seen IIFEs before even if you haven&amp;rsquo;t used the acroynm &amp;ndash; they&amp;rsquo;re very&#xA;useful to ensure that any of your defined variables &lt;a href=&#34;http://benalman.com/news/2010/11/immediately-invoked-function-expression/&#34;&gt;don&amp;rsquo;t leak&lt;/a&gt;&#xA;out.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Infinite Scrolling that Works</title>
      <link>https://eviltrout.com/blog/2013-02-16-infinite-scrolling-that-works/</link>
      <pubDate>Sat, 16 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-02-16-infinite-scrolling-that-works/</guid>
      <description>&lt;p&gt;Shortly after we began working together on &lt;a href=&#34;http://www.discourse.org&#34;&gt;Discourse&lt;/a&gt;, Jeff wrote a post about &lt;a href=&#34;http://www.codinghorror.com/blog/2012/03/the-end-of-pagination.html&#34;&gt;infinite scrolling&lt;/a&gt;. At first, I was surprised at how many people claimed to hate sites that used it. However, after reading through many comments&#xA;about it, I realized that most didn&amp;rsquo;t hate the scrolling itself, &lt;em&gt;they hated how it broke their browser!&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;infinite-scrolling-done-wrong-twitter&#34;&gt;Infinite Scrolling done wrong: Twitter&lt;/h3&gt;&#xA;&lt;p&gt;When I visit Twitter, I am presented with a list of tweets in reverse chronological order. If I scroll down far enough, Twitter will automatically&#xA;load more tweets so I don&amp;rsquo;t have to stop reading. Initially, their implementation seems great. I can keep scrolling until I&amp;rsquo;m done reading.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why Discourse uses Ember.js</title>
      <link>https://eviltrout.com/blog/2013-02-10-why-discourse-uses-emberjs/</link>
      <pubDate>Sun, 10 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-02-10-why-discourse-uses-emberjs/</guid>
      <description>&lt;p&gt;This week, I was delighted to finally reveal &lt;a href=&#34;http://www.discourse.org&#34;&gt;Discourse&lt;/a&gt;, the app I&amp;rsquo;ve been working on for most of the last year in secrecy with &lt;a href=&#34;http://blog.discourse.org/2013/02/the-discourse-team/&#34;&gt;awesome people&lt;/a&gt;. The launch got a lot of attention - we were featured on Hacker News, Slashdot, Wired, Reddit, Techcrunch and countless other places. Personally I&amp;rsquo;ve been floored with the amount of feedback so far. It&amp;rsquo;s going to take quite some time to get through it all!&lt;/p&gt;&#xA;&lt;p&gt;One question people keep asking me is &amp;ldquo;Why did you choose &lt;a href=&#34;http://emberjs.com/&#34;&gt;Ember.js&lt;/a&gt;?&amp;rdquo;. It&amp;rsquo;s a good one, and one that I think can be considered in two ways:&#xA;&amp;ldquo;Why use a a client side MVC Framework?&amp;rdquo; and &amp;ldquo;Why Ember out of all the frameworks?&amp;rdquo; Here&amp;rsquo;s my answer to both of those questions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crawling the Downvote Brigades of Reddit</title>
      <link>https://eviltrout.com/blog/2013-01-16-crawling-the-downvote-brigades-of-reddit/</link>
      <pubDate>Wed, 16 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-01-16-crawling-the-downvote-brigades-of-reddit/</guid>
      <description>&lt;h3 id=&#34;shitredditsays-and-the-downvote-brigades-of-reddit&#34;&gt;ShitRedditSays and The Downvote Brigades of Reddit&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;(note: if you&amp;rsquo;re familiar with reddit and ShitRedditSays, you can skip to the next section.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;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.&lt;/p&gt;&#xA;&lt;p&gt;Over time, Reddit&amp;rsquo;s userbase has grown a lot. It is now one of the most popular sites on the Internet, and nobody has enough time to read through all its submissions and comments. As in many communities, the users have found themselves splitting off into various sub factions, or subreddits as they are known. (One that I really like is &lt;a href=&#34;http://www.reddit.com/r/aww&#34;&gt;/r/aww&lt;/a&gt; &amp;ndash; check it out if you are feeling blue.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>How our users exploited concurrency and how we fixed it</title>
      <link>https://eviltrout.com/blog/2013-01-10-exploiting-concurrency/</link>
      <pubDate>Thu, 10 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-01-10-exploiting-concurrency/</guid>
      <description>&lt;h3 id=&#34;a-story-of-a-game-exploit&#34;&gt;A story of a game exploit&lt;/h3&gt;&#xA;&lt;p&gt;Once upon a time I developed a somewhat popular web game called &lt;a href=&#34;http://www.forumwarz.com/&#34;&gt;Forumwarz&lt;/a&gt;. At its peak, we were serving about 6 million dynamic requests a day off a single quad-core server.&lt;/p&gt;&#xA;&lt;p&gt;Forumwarz limits how many turns a player can take in a day. We designed it this way so that the competitive aspect of the game wasn&amp;rsquo;t simply a contest of who had the most time available to play. Players had to choose their targets wisely.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Turbolinks and the Prague Café Effect</title>
      <link>https://eviltrout.com/blog/2013-01-06-turbolinks-and-the-prague-effect/</link>
      <pubDate>Sun, 06 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-01-06-turbolinks-and-the-prague-effect/</guid>
      <description>&lt;h3 id=&#34;turbolinks&#34;&gt;Turbolinks&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/rails/turbolinks&#34;&gt;Turbolinks&lt;/a&gt; is a new Ruby library, enabled in Rails 4 by default, that is designed to speed up your web applications.&lt;/p&gt;&#xA;&lt;p&gt;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 it into the document you&amp;rsquo;re currently viewing.&lt;/p&gt;&#xA;&lt;p&gt;The main advantage of Turbolinks is that your static assets such as Javascript or CSS will not be downloaded or parsed every time a link is clicked. This can result in a significant client side speed improvement for your end users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Just because you&#39;re privileged doesn&#39;t mean you suck</title>
      <link>https://eviltrout.com/blog/2013-01-03-just-because-youre-privileged-doesnt-mean-you-suck/</link>
      <pubDate>Thu, 03 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2013-01-03-just-because-youre-privileged-doesnt-mean-you-suck/</guid>
      <description>&lt;p&gt;Recently, I wrote a short essay on &lt;a href=&#34;https://eviltrout.com/2012/12/30/programming-since-i-was-seven.html&#34;&gt;privilege and programming&lt;/a&gt;. It was quite popular on &lt;a href=&#34;http://www.reddit.com/r/programming/comments/15ojq6/ive_been_programming_since_i_was_7/&#34;&gt;/r/programming&lt;/a&gt; and generated hundreds of comments, both there and on this blog.&lt;/p&gt;&#xA;&lt;p&gt;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&amp;rsquo;d like to address:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why this is person trying to convince me that I should regretful for being able to use a computer at a young age just because others couldn&amp;rsquo;t?&lt;/p&gt;</description>
    </item>
    <item>
      <title>I&#39;ve been programming since I was 7</title>
      <link>https://eviltrout.com/blog/2012-12-30-programming-since-i-was-seven/</link>
      <pubDate>Sun, 30 Dec 2012 00:00:00 +0000</pubDate>
      <guid>https://eviltrout.com/blog/2012-12-30-programming-since-i-was-seven/</guid>
      <description>&lt;p&gt;When I was in grade 6, I handed out a couple of 3 1/2&amp;quot; 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&amp;rsquo;d fly a ship horizontally through outer space. It had two controls, up and down, to avoid asteroids. The longer you survived the more points you got.&lt;/p&gt;&#xA;&lt;p&gt;The next day one of my friends said &amp;ldquo;My dad said you didn&amp;rsquo;t make that game!&amp;rdquo;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
