<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Ferocia Blog</title>
  <subtitle>Articles from the team at Ferocia</subtitle>
  <id>https://www.ferocia.com.au/blog</id>
  <link href="https://www.ferocia.com.au/blog"/>
  <link href="https://www.ferocia.com.au/blog/feed.xml" rel="self"/>
  <updated>2014-10-13T00:01:00Z</updated>
  <author>
    <name>Ferocia</name>
  </author>
  <entry>
    <title>Take Your Code to the Next Level with FKit</title>
    <link rel="alternate" href="https://www.ferocia.com.au/blog/2014/10/13/take-your-code-to-the-next-level-with-fkit/"/>
    <id>/blog/2014/10/13/take-your-code-to-the-next-level-with-fkit/</id>
    <published>2014-10-13T00:01:00Z</published>
    <updated>2014-10-13T00:01:00Z</updated>
    <author>
      <name>Josh</name>
    </author>
    <summary type="html">&lt;p&gt;Recently I’ve been busy working on FKit: a functional programming toolkit for JavaScript. It provides many functions for solving common problems with functions, objects, arrays, and strings.&lt;/p&gt;

&lt;p&gt;I wrote FKit because I believe that JavaScript is lacking...&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Recently I’ve been busy working on FKit: a functional programming toolkit for JavaScript. It provides many functions for solving common problems with functions, objects, arrays, and strings.&lt;/p&gt;

&lt;p&gt;I wrote FKit because I believe that JavaScript is lacking the kind of standard library that many other languages benefit from. A good example is the prelude library in Haskell: it provides developers with an amazing toolbox to write their Haskell applications with. Why should JavaScript developers have to bother solving these common problems over and over again?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Rewiring the JavaScript Console in CodePen</title>
    <link rel="alternate" href="https://www.ferocia.com.au/blog/2014/09/16/rewiring-the-javascript-console-in-codepen/"/>
    <id>/blog/2014/09/16/rewiring-the-javascript-console-in-codepen/</id>
    <published>2014-09-16T00:01:00Z</published>
    <updated>2014-09-16T00:01:00Z</updated>
    <author>
      <name>Josh</name>
    </author>
    <summary type="html">&lt;p&gt;JavaScript hackers are familiar with using the functions in the &lt;code&gt;console&lt;/code&gt; module to print output from their code. When your code runs in a browser, the console output is sent to the web inspector’s error console. Otherwise, if it’s running in NodeJS...&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;JavaScript hackers are familiar with using the functions in the &lt;code&gt;console&lt;/code&gt; module to print output from their code. When your code runs in a browser, the console output is sent to the web inspector’s error console. Otherwise, if it’s running in NodeJS then the console output is sent to stdout or stderr in your terminal.&lt;/p&gt;

&lt;p&gt;Wouldn’t it be cool if you could rewire the console in &lt;a href="https://codepen.io/"&gt;CodePen&lt;/a&gt; to print messages to the result panel, instead of being hidden away in the web inspector?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Not the “Rails Way”</title>
    <link rel="alternate" href="https://www.ferocia.com.au/blog/2014/07/09/not-the-rails-way/"/>
    <id>/blog/2014/07/09/not-the-rails-way/</id>
    <published>2014-07-09T11:45:00Z</published>
    <updated>2014-07-09T11:45:00Z</updated>
    <author>
      <name>Gareth</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;em&gt;This article is a long form version of a talk I gave at the &lt;a href="https://ruby.org.au/"&gt;Melbourne Ruby Group&lt;/a&gt; on June 25th 2014.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I was sitting in my arm chair reading one night, when I came came accross this quote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The benefits the frameworks offer also come with inherent...&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    <content type="html">&lt;p&gt;&lt;em&gt;This article is a long form version of a talk I gave at the &lt;a href="https://ruby.org.au/"&gt;Melbourne Ruby Group&lt;/a&gt; on June 25th 2014.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I was sitting in my arm chair reading one night, when I came came accross this quote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The benefits the frameworks offer also come with inherent costs.&lt;br /&gt;– Dmitri Sotnikov&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It made me think about the tools that I use daily, about Ruby on Rails, and the way in which it dominates the architecture of nearly everything built in it.&lt;/p&gt;

&lt;p&gt;Every developer I have worked with on a Rails project has made a technical decision and justified it by claiming it to be “The Rails Way”.&lt;/p&gt;

&lt;p&gt;In 7+ years of working with Rails, I don’t think I have ever built an application “The Rails Way”. Some have started that way, and then been torn apart as they have grown, the painful parts that remain ironically being written “The Rails Way”.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Better OS X Screenshots With Shell Scripts</title>
    <link rel="alternate" href="https://www.ferocia.com.au/blog/2014/05/21/better-os-x-screenshots-with-shell-scripts/"/>
    <id>/blog/2014/05/21/better-os-x-screenshots-with-shell-scripts/</id>
    <published>2014-05-21T17:24:00Z</published>
    <updated>2014-05-21T17:24:00Z</updated>
    <author>
      <name>Andy</name>
    </author>
    <summary type="html">&lt;p&gt;I take heaps of screenshots. The tool that’s built into OS X does the job, with a couple of caveats: screenshots take over your desktop and they aren’t sharable by default.&lt;/p&gt;

&lt;p&gt;I flirted with lots of software (Dropbox, Cloud, Skitch, droplr etc.) in an...&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;I take heaps of screenshots. The tool that’s built into OS X does the job, with a couple of caveats: screenshots take over your desktop and they aren’t sharable by default.&lt;/p&gt;

&lt;p&gt;I flirted with lots of software (Dropbox, Cloud, Skitch, droplr etc.) in an attempt to remove these issues, but nothing did exactly what I wanted. So I wrote a Shell script that makes use of the system Screencapture command line app with a few custom settings.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Reactive UIs with React &amp; Bacon</title>
    <link rel="alternate" href="https://www.ferocia.com.au/blog/2014/04/19/reactive-uis-with-react-and-bacon/"/>
    <id>/blog/2014/04/19/reactive-uis-with-react-and-bacon/</id>
    <published>2014-04-19T11:45:00Z</published>
    <updated>2014-04-19T11:45:00Z</updated>
    <author>
      <name>Josh</name>
    </author>
    <summary type="html">&lt;p&gt;I’ve been experimenting with &lt;a href="https://facebook.github.io/react/"&gt;React.js&lt;/a&gt; after recently watching a great presentation by &lt;a href="https://github.com/petehunt"&gt;Pete Hunt&lt;/a&gt; at &lt;a href="https://au.jsconf.com"&gt;JSConf AU 2014&lt;/a&gt;. Like many great tools, React focuses on one problem: the views in your web application. The rest of the technology stack is left up to...&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;I’ve been experimenting with &lt;a href="https://facebook.github.io/react/"&gt;React.js&lt;/a&gt; after recently watching a great presentation by &lt;a href="https://github.com/petehunt"&gt;Pete Hunt&lt;/a&gt; at &lt;a href="https://au.jsconf.com"&gt;JSConf AU 2014&lt;/a&gt;. Like many great tools, React focuses on one problem: the views in your web application. The rest of the technology stack is left up to you. If you haven’t had a chance to play with React, I highly recommend spending a couple of hours reading up on it.&lt;/p&gt;

&lt;p&gt;If, like me, you’re used to building web applications around the &lt;a href="https://en.wikipedia.org/wiki/Model-view-controller"&gt;MVC&lt;/a&gt; design pattern, then your next move is likely to reach for something like &lt;a href="https://backbonejs.org"&gt;Backbone.js&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Ride Bikes E’rry Day</title>
    <link rel="alternate" href="https://www.ferocia.com.au/blog/2013/12/30/ride-bikes-erry-day/"/>
    <id>/blog/2013/12/30/ride-bikes-erry-day/</id>
    <published>2013-12-30T15:28:00Z</published>
    <updated>2013-12-30T15:28:00Z</updated>
    <author>
      <name>Andy</name>
    </author>
    <summary type="html">&lt;p&gt;Inspirited by so many people at work commuting by bike, on the last day of April 2013, I bestrode my new &lt;a href="https://instagram.com/p/YtIhqLL2Th/"&gt;pushie&lt;/a&gt; and pedalled to work for the &lt;a href="https://www.strava.com/activities/51423415"&gt;first time&lt;/a&gt;. It promised to be quicker, less expensive and more fun than public transport or driving. I was...&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Inspirited by so many people at work commuting by bike, on the last day of April 2013, I bestrode my new &lt;a href="https://instagram.com/p/YtIhqLL2Th/"&gt;pushie&lt;/a&gt; and pedalled to work for the &lt;a href="https://www.strava.com/activities/51423415"&gt;first time&lt;/a&gt;. It promised to be quicker, less expensive and more fun than public transport or driving. I was, however, a fatty with only one brief foray into exercise in the last ten years; riding 9.5km twice a day made me sore and tired. I don’t think I expected it to turn into a &lt;em&gt;thing&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It got easier, though. I did &lt;a href="https://www.strava.com/activities/54972697"&gt;three&lt;/a&gt; &lt;a href="https://www.strava.com/activities/56279626"&gt;20km&lt;/a&gt; &lt;a href="https://www.strava.com/activities/56293267"&gt;rides&lt;/a&gt; in the first month and started looking for longer routes to work.&lt;/p&gt;

&lt;p&gt;I told myself I’d catch public transport if it was raining, but—as winter set in—I realised I just needed to harden up; rain is only water. If I rode to and from work &lt;em&gt;every weekday&lt;/em&gt;, I could ride 3,000km by the end of the year. It seemed achievable.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Programming The Papilio Without Root Privileges</title>
    <link rel="alternate" href="https://www.ferocia.com.au/blog/2013/09/22/programming-the-papilio-without-root-privileges/"/>
    <id>/blog/2013/09/22/programming-the-papilio-without-root-privileges/</id>
    <published>2013-09-22T11:45:00Z</published>
    <updated>2013-09-22T11:45:00Z</updated>
    <author>
      <name>Josh</name>
    </author>
    <summary type="html">&lt;p&gt;Having to run the &lt;a href="https://github.com/GadgetFactory/Papilio-Loader/tree/master/papilio-prog"&gt;Papilio programmer&lt;/a&gt; utility as root is undesirable. I wanted to be able to access the Papilio USB device from my unprivileged user account in order to program my &lt;a href="https://papilio.cc/index.php?n=Papilio.PapilioPro"&gt;Papilio Pro&lt;/a&gt; board. Fortunately this can be achieved easily with a udev...&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Having to run the &lt;a href="https://github.com/GadgetFactory/Papilio-Loader/tree/master/papilio-prog"&gt;Papilio programmer&lt;/a&gt; utility as root is undesirable. I wanted to be able to access the Papilio USB device from my unprivileged user account in order to program my &lt;a href="https://papilio.cc/index.php?n=Papilio.PapilioPro"&gt;Papilio Pro&lt;/a&gt; board. Fortunately this can be achieved easily with a udev rule file and a couple of group ownership tweaks.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Adobe Generator Suggestions</title>
    <link rel="alternate" href="https://www.ferocia.com.au/blog/2013/09/10/adobe-generator-suggestions/"/>
    <id>/blog/2013/09/10/adobe-generator-suggestions/</id>
    <published>2013-09-10T22:05:00Z</published>
    <updated>2013-09-10T22:05:00Z</updated>
    <author>
      <name>Andy</name>
    </author>
    <summary type="html">&lt;p&gt;A couple of days ago, Adobe updated Photoshop CC to include a new feature called Adobe Generator. For anyone familiar with MacRabbit’s Slicy, it’s essentially a ‘native’ implementation. It uses Photoshop layer names to export individual assets for...&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;A couple of days ago, Adobe updated Photoshop CC to include a new feature called Adobe Generator. For anyone familiar with MacRabbit’s Slicy, it’s essentially a ‘native’ implementation. It uses Photoshop layer names to export individual assets for use in websites, apps etc. For example, a layer name of &lt;code&gt;icon.png, 200% icon@2x.png&lt;/code&gt; would export both 1x and 2x assets. The genius here is that it’s automatic. An assets folder updates on editing or renaming layers; you don’t even need to save.&lt;/p&gt;

&lt;p&gt;If you aren’t across everything Generator can do, I suggest checking out the &lt;a href="https://blogs.adobe.com/photoshopdotcom/2013/09/introducing-adobe-generator-for-photoshop-cc.html"&gt;introductory blog post&lt;/a&gt;. It’s a great first release. I do, however, have a few suggestions that might make it more useful.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Ruby on Rails Security 101</title>
    <link rel="alternate" href="https://www.ferocia.com.au/blog/2013/09/07/ruby-on-rails-security-101/"/>
    <id>/blog/2013/09/07/ruby-on-rails-security-101/</id>
    <published>2013-09-07T11:45:00Z</published>
    <updated>2013-09-07T11:45:00Z</updated>
    <author>
      <name>Gareth</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;em&gt;This post is based on a lightning talk I gave at the &lt;a href="https://ruby.org.au/"&gt;Melbourne Ruby Group’s&lt;/a&gt; Newbie Night on August 29th 2013.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Security is a very broad topic, so a lightning talk can’t even begin to scratch the surface. The three things you need to know are:&lt;/p&gt;

&lt;ol&gt;
  &lt;/ol&gt;</summary>
    <content type="html">&lt;p&gt;&lt;em&gt;This post is based on a lightning talk I gave at the &lt;a href="https://ruby.org.au/"&gt;Melbourne Ruby Group’s&lt;/a&gt; Newbie Night on August 29th 2013.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Security is a very broad topic, so a lightning talk can’t even begin to scratch the surface. The three things you need to know are:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;People mess it up all the time.&lt;/li&gt;
  &lt;li&gt;You will too.&lt;/li&gt;
  &lt;li&gt;Hopefully you don’t make the news.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You should know where to look in order to protect yourself.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>middleman-imageoptim</title>
    <link rel="alternate" href="https://www.ferocia.com.au/blog/2013/04/15/middleman-imageoptim/"/>
    <id>/blog/2013/04/15/middleman-imageoptim/</id>
    <published>2013-04-15T19:52:00Z</published>
    <updated>2013-04-15T19:52:00Z</updated>
    <author>
      <name>Justin</name>
    </author>
    <summary type="html">&lt;p&gt;Last week I had a little hack at building a quick ‘n’ dirty extension to get &lt;a href="https://github.com/toy/image_optim"&gt;image_optim&lt;/a&gt; better integrated into &lt;a href="https://middlemanapp.com/"&gt;Middleman&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let’s face it; serving big, bloated images is for chumps, that’s why the &lt;a href="https://github.com/toy/image_optim"&gt;image_optim&lt;/a&gt; tool is really awesome. However, I wanted...&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Last week I had a little hack at building a quick ‘n’ dirty extension to get &lt;a href="https://github.com/toy/image_optim"&gt;image_optim&lt;/a&gt; better integrated into &lt;a href="https://middlemanapp.com/"&gt;Middleman&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let’s face it; serving big, bloated images is for chumps, that’s why the &lt;a href="https://github.com/toy/image_optim"&gt;image_optim&lt;/a&gt; tool is really awesome. However, I wanted a way of getting Middleman to automate running it for me, and better integrate it into the whole &lt;code&gt;middleman --build&lt;/code&gt; workflow.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>The Implied Elements of Pagination</title>
    <link rel="alternate" href="https://www.ferocia.com.au/blog/2013/04/02/the-implied-elements-of-pagination/"/>
    <id>/blog/2013/04/02/the-implied-elements-of-pagination/</id>
    <published>2013-04-02T21:24:00Z</published>
    <updated>2013-04-02T21:24:00Z</updated>
    <author>
      <name>Andy</name>
    </author>
    <summary type="html">&lt;p&gt;Pagination can take many different forms. However, it’s generally made up of labels, indicators, arrows, or some combination of the three. There’s no single perfect implementation. But we can get close by considering each of these elements, in context...&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Pagination can take many different forms. However, it’s generally made up of labels, indicators, arrows, or some combination of the three. There’s no single perfect implementation. But we can get close by considering each of these elements, in context, before they are removed—or implied.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Look at the type of content being paginated, and—more importantly—how it’s sorted.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;First, you should look at the type of content being paginated, and—more importantly—how it’s sorted. This should define the language used for labels. In most cases, contacts are sorted alphabetically, blog posts are sorted reverse-chronologically, and search results are sorted by relevance.&lt;/p&gt;
</content>
  </entry>
</feed>
