<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title><![CDATA[Steamshift Blog]]></title>
  <subtitle><![CDATA[Stuff we're doing, stuff we've seen, stuff we like.]]></subtitle>
  <link href="http://blog.steamshift.com/atom.xml" rel="self"/>
  <link href="http://blog.steamshift.com"/>
  <updated>2013-10-28T00:36:37.150Z</updated>
  <id>http://blog.steamshift.com/</id>
  <author>
    <name><![CDATA[Brothers Bennett]]></name>
  </author>
  <generator uri="http://zespia.tw/hexo">Hexo</generator>
  <entry>
    <title type="html"><![CDATA[String Structs]]></title>
    <link href="http://blog.steamshift.com/blog/2013/10/28/string-structs/"/>
    <id>http://blog.steamshift.com/blog/2013/10/28/string-structs/</id>
    <published>2013-10-28T00:22:59.000Z</published>
    <updated>2013-10-28T00:36:06.000Z</updated>
    <content type="html"><![CDATA[<p>Looking through a file from the Facebook iOS SDK, I came across a reference to this:-</p>
<figure class="highlight lang-objc"><table><tr><td class="gutter"><pre>1
</pre></td><td class="code"><pre><span class="function"><span class="title">if</span> <span class="params">(app<span class="variable">BridgeType</span> &amp;&amp; [dictionary[<span class="variable">FBAppBridgeTypesMetadata</span>.tag] is<span class="variable">EqualToString</span>:<span class="variable">FBAppBridgeTypesTags</span>.png])</span>
</pre></td></tr></table></figure>


<p>The bit that interested me in particular was the use of <code>FBAppBridgeTypesMetadata.tag</code> and <code>FBAppBridgeTypesTags.png</code> which seemed to be strings and constants. I&#39;ve used string constants before, but have never seen this .xyz construction.</p>
<p>It turns out its a simple struct:-</p>
<figure class="highlight lang-objc"><table><tr><td class="gutter"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre><span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">struct</span> {
    <span class="built_in">NSString</span> *data;
    <span class="built_in">NSString</span> *png;
} FBAppBridgeTypesTags = {
    <span class="variable">.data</span> = @<span class="string">"data"</span>,
    <span class="variable">.png</span> = @<span class="string">"png"</span>,
};
</pre></td></tr></table></figure>


<p>I do rather like the way this is so self-contained. Must endeavour to learn a bit more C!!</p>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/Objective-C/" term="Objective-C"/>
    <category scheme="http://blog.steamshift.com/categories/Objective-C/iOS/" term="iOS"/>
    <category scheme="http://blog.steamshift.com/categories/Objective-C/iOS/OSX/" term="OSX"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[The Node Revolution]]></title>
    <link href="http://blog.steamshift.com/blog/2013/10/09/the-node-revolution/"/>
    <id>http://blog.steamshift.com/blog/2013/10/09/the-node-revolution/</id>
    <published>2013-10-09T15:07:00.000Z</published>
    <updated>2013-10-09T18:56:19.000Z</updated>
    <content type="html"><![CDATA[<p>Having moved last year to Octopress to generate of static websites (such as this one), a major advantage presents itself; as the sites are now platform independent, the generator code can be swapped out with ease.</p>
<p>In line with my focus on Objective-C for native iOS development and Node.js for everything else, I thought it&#39;d be a good idea to see how easy it would be to use node to generate the labs and blog sites…</p>
<a id="more"></a>

<p>A quick search threw up a few examples where people had moved from Octopress to a node.js based system; the first I tried was <a href="http://zespia.tw/hexo/" target="_blank">Hexo</a>. It claims “Hexo supports GitHub Flavored Markdown and all Octopress plugins and highly Jekyll/Octopress compatible.”, which turned out to be true (more or less).</p>
<p>Assuming you already have node and npm installed, its very easy to get started and I was pleased to see that my markdown files just dropped right in, without any changes.</p>
<p>Fortunately, the theme (Greyshade) that my sites is based on has been ported to Hexo, so it was a simple matter to port the relevant bits across. Hexo supports a number of different CSS and template engines including the one I&#39;m most familiar with (SASS).</p>
<p>Other than a few minor tweaks, it took very little to get it all running pretty much exactly as the Octopress version was. The advantage for me is that if I want to dig any deeper, I don&#39;t need to learn any ruby, just use the javascript / node, I already know.</p>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/node.js/" term="node.js"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[Working with Parse.com]]></title>
    <link href="http://blog.steamshift.com/blog/2013/03/18/working-with-parse-dot-com/"/>
    <id>http://blog.steamshift.com/blog/2013/03/18/working-with-parse-dot-com/</id>
    <published>2013-03-18T16:07:00.000Z</published>
    <updated>2013-10-09T13:17:45.000Z</updated>
    <content type="html"><![CDATA[<p>For the last few apps I‘ve been working on, I’ve used Parse.com as a backend, allowing for syncing data between app and website/cms.</p>
<p>For the most part, it has been an excellent experience, and I&#39;d recommend it to anyone needing a hosted backend solution for a web, desktop or mobile application. There are however some gotchas which you may need to be aware of …</p>
<a id="more"></a>

<h4>1. Relationships</h4>
<p>As in any other relational system, there are 3 types of relationship 1:1, 1:n and n:n. </p>
<p>The main issue is that many systems (for instance Core Data) use inverse relationships to ensure data integrity (and for speed of lookups), but Parse only requires one way relationships. The upshot of this is that when syncing, the client library needs to create any inverse relationships. In practice, I found it easier to use Cloud Code to set up the inverse relationship with the <code>afterSave</code> hook. Generally, though, this is a real PITA!</p>
<h4>2. Data Portability</h4>
<p>I&#39;ve done a few data migrations with the Parse Data Browser - from one account to another, duplicating for testing etc, and it is quite simply horrible.</p>
<h5>Export</h5>
<p>The export is, on the whole, pretty good - it allows us to get a fairly good output of whatever <em>data</em> is in the tables.</p>
<p>That however, is the problem, its only <em>data</em> that is exported. I suspect that because Parse&#39;s data storage is supposed to be schemaless, when the data is exported, it only exports the data and not any sort of schema - so for instance, if you have an empty table, the exported JSON is also empty.</p>
<p>This is a big issue because Parse classes do have ‘schemas’ - there are columns, with types which may well match those in your client.</p>
<p>So for getting your data out of Parse, it may well suffice, but if you&#39;re doing that in order to migrate it or duplicate it, its really not adequate.</p>
<h5>Import</h5>
<p>Import however is a whole different story.</p>
<ol>
<li>Bulk import - I want to be able to import several json files at once, and ideally have it take the class names from the json file name.</li>
<li>Incompatible exports - You can‘t import the Join json files created by Parse export, you also can’t re-create the User, Role or Installation classes from the exported JSON.</li>
<li>Importing into existing classes - the User, Role and Installation classes are special Parse classes, so its perhaps no surprise that you can&#39;t create these by importing the JSON; allowing you to import additional rows into a class from JSON or CSV would solve this.</li>
<li>Incomplete schemas - because there is no schema in the export, if there is no data, there is no schema, this is true if the expoted column is empty (undefined) for all rows, or if there are no rows.</li>
</ol>
<h5>Answers?</h5>
<ul>
<li>Many of these issues are to do with the way the Data Browser works and could be resolved by improving that, or providing desktop equivalents, using the REST API.</li>
<li>Others could, I imagine, be solved by exporting a schema.json file with the data export, which describes all your classes, which is then the first thing that&#39;s read in, and helps recreate all your classes.</li>
<li>Ultimately, though, every time I&#39;ve gone through the process its been for one of two scenarios:-<ol>
<li>I&#39;ve been working on my own Parse account and now need to migrate to a client account.</li>
<li>I&#39;ve been working in a development environment and now need a clean live environment, whilst maintaining the development one for further work, or vice-versa.</li>
</ol>
</li>
<li>This suggests that the most useful thing Parse could add would be a simple “duplicate app” function - duplicate in my account or duplicate to another account. This would remove 90% of the requirement I&#39;ve had for exporting / importing.</li>
</ul>
<h4>3. Cloud Code</h4>
<p>Cloud Code is really useful and opens up a huge number of possibilities for working with Parse but its a real ball-ache to work with!</p>
<ul>
<li>The development process is hampered by not quite knowing what the platform is that its running on and what that platform&#39;s capabilities are. What would help enormously would be some sort of black box VM type thing that emulated the cloud code part of Parse that you could run locally.</li>
<li>This means that the most reliable way of testing is to do some development work locally, unit test where possible, deploy and then test with Parse. But that all takes time and delays of that sort are the enemy of efficient working especially for developers.</li>
<li>Particularly becuase of the issues with duplicating the app environment in Parse, its very easy to get sucked into a situation where you&#39;re trying to fix something on a live data set - very very bad practice; but if its going to take you best part of an hour to duplicate the data in its current state to a dev environment, that is exactly what will happen.</li>
<li>Timeouts - Parse has a very short timeout for cloud code functions (about 3s), which means for instance that you will need to work with any longer running functions on client side applications (eg updating a series of records).</li>
</ul>
<h3>Conclusion</h3>
<p>Although this might seem like a big old whinge, I‘m posting it because I think Parse is a great product and it, and its ilk, represent a huge boon for developers who want to focus on the app they’re building and not the infrastructure that supports it.</p>
<p>Cloud code certainly allows us to work around some of the issues, but there are still a number that make working with Parse more difficult than it should be. I really hope that we see these things resolved soon, so I can get on with just building apps and not working around issues.</p>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/parse.com/" term="parse.com"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[Stencyling]]></title>
    <link href="http://blog.steamshift.com/blog/2013/03/10/stencyling/"/>
    <id>http://blog.steamshift.com/blog/2013/03/10/stencyling/</id>
    <published>2013-03-10T13:13:00.000Z</published>
    <updated>2013-10-09T13:17:39.000Z</updated>
    <content type="html"><![CDATA[<p>Recently I’ve been trying out <a href="http://stencyl.com" target="_blank">Stencyl</a>, which is a game making framework, based on MIT’s <a href="http://scratch.mit.edu/" target="_blank">Scratch</a>, which publishes to Flash and iOS. Version 2 uses Actionscript, but the new version currently in beta uses <a href="http://www.nme.io/" target="_blank">Haxe NME</a>  for more speed and ease of publishing to more platforms, including Android.</p>
<a id="more"></a>

<p>If you’ve never used Scratch, it’s a program that allows you to code by snapping blocks together, with blocks shaped to only fit into certain spaces. Stencyl builds on this concept, and introduces elements to make creating games easy, such as physics (Box2D), animation and level building. It also comes with a number of sample games covering the main types, so you can start with one of those and customise it as you like.</p>
<p>My experience so far has been really positive. I’m using the Beta version, so things aren’t quite as smooth as they will be, but the developers (and other users) are very active on the forums and have sorted out my problems very swiftly. I  was able to get a working space invaders type game up and running within a few hours, working from the tutorial, and then moving on to adding more complicated behaviours to put some more fizz into the game. It’s this ease of use that really makes Stencyl worth using, getting you past the tedious set up that normally goes into making a game and straight into doing the fun stuff.</p>
<p>The main paradigms are Actors, Behaviours, Groups, Tiles and Scenes. Actors are anything that require behaviours, so these could be the player character, enemies or things like platforms or doors that require special treatment. Behaviours are the meat of the game, and cover all the things that an Actor can do, for example, Walk, Jump, Attack and so on. These are reusable between Actors, so you can simply assign the behaviour to anything that needs that action. You can also reveal properties so that they can be customised, so you might reveal a height property for your jump behaviour. Groups are used to provide separation between Actors, so you might have Players, Enemies, Platforms, etc. as Groups. Behaviours can check whether an Actor belongs to a particular group and customise its actions based on that. Groups are also used for collision detection, and you can specify which groups collide with which. Tiles are background or foreground objects, and cannot have behaviours attached, other than whether they are collidable or not. Scenes combine all the previous elements together to produce levels, menu screens and so on.</p>
<p>There are downsides to using a framework rather than coding directly. Although you can write code directly in Actionscript/Haxe, this isn’t encouraged or documented. The method of grabbing and snapping together code blocks can feel a bit clunky at times, especially if you need to make a small change like changing a &lt; to a &gt;. In order to do this, you have to pull out the block, find the new block, add it in, move the arguments from the old block to the new one and then drag the old block to the bin. However, a right click gets you to the most common blocks, and there are dropdowns on the code spaces which give you the blocks you can use in that context, so it isn’t too onerous. There are also occasional glitches, either in the behaviours (although the ones created by the core team are solid) or in the physics engine because it’s not entirely suited to arcade style games. The developers are working on a “simple physics” mode which should hopefully combat these issues in games where the full power of Box2D is not needed.</p>
<p>The main advantage of Stencyl for me though is workflow. Rather than having coders, designers and artists working separately, and the final responsibility of creating a build in the hands of the programmers, Stencyl allows everyone to work much more closely - the programmers can create behaviours and then pass them over to the designers to tweak the values, while the artists can work on the animations and backgrounds, all running in the game directly. Because the behaviours are easy to read, code savvy artists can modify them, and because the whole system allows you to get up and running so quickly, you can get into iterating your game design at an early stage. Anyone can create a build without technical knowledge, so it becomes much easier for each person or team to iterate on their work without having to disrupt the others. </p>
<p>All in all, while it has it’s flaws, Stencyl is proving to be a great framework which provides a powerful and simple way of creating games.</p>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/games/" term="games"/>
    <category scheme="http://blog.steamshift.com/categories/games/stencyl/" term="stencyl"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[n Things I want to see in iOS 7 - #2]]></title>
    <link href="http://blog.steamshift.com/blog/2013/02/26/n-things-i-want-to-see-in-ios-7-number-2/"/>
    <id>http://blog.steamshift.com/blog/2013/02/26/n-things-i-want-to-see-in-ios-7-number-2/</id>
    <published>2013-02-26T11:00:00.000Z</published>
    <updated>2013-02-26T13:02:17.000Z</updated>
    <content type="html"><![CDATA[<p>These next two are features I&#39;d like to see implemented in iOS 7, both of which I think could be very big news for developers initially, and the platform as a whole once developers get to grips with them.</p>
<ul>
<li>XPC / Promises / Intents - one area that Android is definitely ahead of iOS is in the ability of various apps to interact with each other. Ole Bergman has an <a href="http://oleb.net/blog/2012/02/what-ios-should-learn-from-android-and-windows-8/" target="_blank">excellent introduction</a> to Android‘s intents and promises (and in the same vein “charms” in Windows 8) and how these might be implemented in iOS. Its quite an old article now (a year old at time of writing); since that time Apple have released iOS6 which has some movement in that direction; again Ole has written about Apple’s <a href="http://oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/" target="_blank">remote view controllers</a>. I&#39;d love to see this sort of thing pushed much further and, perhaps related, giving users the ability to set the default app to handle e.g.: email.</li>
</ul>
<p>Personally, I think that if implemented well and extensively, this could be huge for iOS development and the utility of iOS as a whole.</p>
<ul>
<li>SceneKit - introduced in Mac OS X 10.8, scene kit provides scene graph management for Open GL. Although there are some good libraries in this vein for iOS, it would make a huge amount of sense to have scene kit in iOS providing a similar environment for working with Open GL as in Mac OS X.</li>
</ul>
<p>From experience working with one of the open-source scene graph libraries out there, this is definitely an area where a well implemented library from Apple could have a huge impact on the development of 3d in games and interfaces on iOS.</p>
<p>Fingers crossed on seeing either or both of these in iOS 7!</p>
]]></content>
  </entry>
  <entry>
    <title type="html"><![CDATA[Parse + Sendgrid == Contact forms for static sites]]></title>
    <link href="http://blog.steamshift.com/blog/2013/02/25/parse-plus-sendgrid-equals-equals-contact-forms-for-static-sites/"/>
    <id>http://blog.steamshift.com/blog/2013/02/25/parse-plus-sendgrid-equals-equals-contact-forms-for-static-sites/</id>
    <published>2013-02-25T12:30:00.000Z</published>
    <updated>2013-02-25T12:18:06.000Z</updated>
    <content type="html"><![CDATA[<p>Having started the process of migrating to predominantly static websites, the one very obvious issue is that there&#39;s no easy way of adding a contact form…</p>
<p>I&#39;ve been using <a href="http://parse.com" target="_blank">Parse.com</a> a fair bit recently for iOS work, and recently for an iOS/Android/web project.</p>
<p>One of the recent additions to Parse is the cloud code system which allows you to run code on their servers, included in that are a number of modules for interacting with other web services.</p>
<a id="more"></a>

<p>By defining a very simple function and uploading it the Parse Cloud, we can do server-side validation of form elements and then send an email using Sendgrid.</p>
<script src="https://gist.github.com/5029453.js"></script>


<p>Then a super simple javascript application on the client side, embedded in a page of a website and we&#39;ve got ourselves a contact form!</p>
<script src="https://gist.github.com/5029409.js"></script>


<p>If we decide down the line to extend it to do push notifications, call or SMS with Twilio, etc, this is all just a matter of adding a few more lines to our CloudCode.</p>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/web, parse, sendgrid/" term="web, parse, sendgrid"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[n Things I want to see in iOS 7 - #1]]></title>
    <link href="http://blog.steamshift.com/blog/2013/02/25/n-things-i-want-to-see-in-ios-7-number-1/"/>
    <id>http://blog.steamshift.com/blog/2013/02/25/n-things-i-want-to-see-in-ios-7-number-1/</id>
    <published>2013-02-25T11:01:00.000Z</published>
    <updated>2013-10-09T13:18:45.000Z</updated>
    <content type="html"><![CDATA[<p>Here‘s the first in a series of blog posts about things I’d like to see in iOS7 - some are areas that I think need improving (from experience developing apps), some are more broad and about possibilities that would make the platform stronger. The first couple, today, are general fix-its; born from recent experience:- </p>
<ul>
<li><p>Fix UILocalNotifications; having recently worked on an app which needed to implement reminders (with associated actions), UILocalNotifications was the only real option (I didn‘t want to use push notifications because the user might be offline, and Reminders.app and EventKit don’t allow you to launch straight into your app). The problem is that the granularity of repeats for UILocalNotifications is very coarse, plus there is a limit of 64 per app. I ended up with a solution that grouped notifications into half hour time slots, which worked for that app, but really a lot of pain could have been avoided with finer grained control of repeats and no hard limits.</p>
</li>
<li><p>Git + Storyboards / Xibs playing nice - I like Xibs and Storyboards; they suit the way that I think, and give me a way of prototyping and iterating rapidly through adding real functionality in only a little longer than it takes to do in wireframe. The biggest problem is that they really don‘t work well with SCM primarily because they don’t merge nicely. This is annoying with Xibs, but really hard work with Storyboards which might contain your entire app. I&#39;m not sure exactly what the answer is here, but the boffins at Apple must be able to figure something out!</p>
</li>
</ul>
<p>That&#39;s it for today; more to come.</p>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/iOS/" term="iOS"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[iOS: Watch out for shadows]]></title>
    <link href="http://blog.steamshift.com/blog/2013/02/21/ios-watch-out-for-shadows/"/>
    <id>http://blog.steamshift.com/blog/2013/02/21/ios-watch-out-for-shadows/</id>
    <published>2013-02-21T11:55:00.000Z</published>
    <updated>2013-02-21T13:51:59.000Z</updated>
    <content type="html"><![CDATA[<p>Quick tip … when working with CALayer shadows, its useful to set <strong>shouldRasterize</strong> to <em>YES</em> - this helps with performance (along with setting the <strong>shadowPath</strong>). The problem is that it also rasterises everything else in the layer, including all the text - which then looks awful. There are a couple of options … </p>
<ol>
<li><p>set the rasterization scale (thus ensuring the rasterization is done at correct scale for the device - retina/non-retina):  </p>
<figure class="highlight lang-objc"><table><tr><td class="gutter"><pre>1
</pre></td><td class="code"><pre>layer.rasterizationScale = <span class="string">[[UIScreen mainScreen] scale]]</span>;
</pre></td></tr></table></figure>
</li>
<li><p>or move the shadow into its own layer and adding that as a sublayer.</p>
</li>
</ol>
<p>Both options work - it depends on what your specific use case is, as to which is going to be better for your app.</p>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/iOS, CALayer/" term="iOS, CALayer"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[New Era Cube video]]></title>
    <link href="http://blog.steamshift.com/blog/2013/01/15/new-era-cube-video/"/>
    <id>http://blog.steamshift.com/blog/2013/01/15/new-era-cube-video/</id>
    <published>2013-01-15T12:33:00.000Z</published>
    <updated>2013-02-26T13:26:39.000Z</updated>
    <content type="html"><![CDATA[<p>A video of the New Era Cube iOS app in action on iPad.</p>
<a id="more"></a>

<div class="video-container"><iframe src="//player.vimeo.com/video/60554420" frameborder="0" allowfullscreen></iframe></div>


<p>Music: appears by etc. <a href="http://soundcloud.com/etc-sounds" target="_blank">soundcloud.com/etc-sounds</a></p>
]]></content>
  </entry>
  <entry>
    <title type="html"><![CDATA[Static websites]]></title>
    <link href="http://blog.steamshift.com/blog/2013/01/14/static-websites/"/>
    <id>http://blog.steamshift.com/blog/2013/01/14/static-websites/</id>
    <published>2013-01-14T15:57:00.000Z</published>
    <updated>2013-01-14T16:07:46.000Z</updated>
    <content type="html"><![CDATA[<p>Having spent the last 14 or so years building complex PHP driven CMS (and other dynamic) systems, its funny how nowadays I&#39;m passing off much of that to 3rd parties eg: <a href="http://parse.com" target="_blank">Parse.com</a> or 3rd party applications <a href="http://wordpress.org" target="_blank">Wordpress</a>.</p>
<p>Part of this is that I&#39;m focussing on other things (mostly native iOS development), partly because the whole landscape is changing; but also because “applications” like Octopress and Jekyll are finding a sweet spot between being dynamic (the site is generated on the fly) and static (everything is hard coded).</p>
<p>By working with a pre-processor, I get much of the flexibility of templates, document fragments etc but end up with a static website which can be served very very quickly.</p>
<p>Using client side scripting (Javascript) to add interactive features, perhaps in conjuction with service providers (like the aforementioned Parse.com), we can have the best of both worlds.</p>
<p>We&#39;ll see!</p>
<p>by Andy</p>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/websites/" term="websites"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[New Era Cube - FWA!]]></title>
    <link href="http://blog.steamshift.com/blog/2013/01/13/new-era-cube-fwa/"/>
    <id>http://blog.steamshift.com/blog/2013/01/13/new-era-cube-fwa/</id>
    <published>2013-01-13T23:48:00.000Z</published>
    <updated>2013-01-14T12:48:34.000Z</updated>
    <content type="html"><![CDATA[<img src="/images/posts/mfwa.png" title="mFwa Logo">


<p>the New Era Cube app we developed with <a href="http://somewhat.cc" target="_blank">somewhat.cc</a> is todays FWA mobile app of the day!</p>
<p><a href="http://m.thefwa.com/site/the-new-era-cube" target="_blank">MOBILE OF THE DAY 13.10.12</a></p>
<blockquote><p>FWA stands for Favourite Website Awards, an industry recognised internet award program and inspirational portal, established in May 2000.</p>
<p>FWA is the most visited website award program in the history of the internet, with over 140 million site visits as of July 2011 (and multiple billion hits to our servers).</p>
<footer><strong>http://www.thefwa.com/about The FWA</strong></footer></blockquote>
]]></content>
  </entry>
  <entry>
    <title type="html"><![CDATA[New Era Cube - version 1.1]]></title>
    <link href="http://blog.steamshift.com/blog/2013/01/13/new-era-cube-version-1-dot-1/"/>
    <id>http://blog.steamshift.com/blog/2013/01/13/new-era-cube-version-1-dot-1/</id>
    <published>2013-01-13T23:48:00.000Z</published>
    <updated>2013-01-14T12:50:02.000Z</updated>
    <content type="html"><![CDATA[<p>Version 1.1 of the <a href="bit.ly/NewEraCube">New Era Cube app</a> is out now with 2 new 2d baseball games! </p>
<img src="/images/posts/cube-baseball1.png" width="300">

<img src="/images/posts/cube-baseball2.png" width="300">
]]></content>
    <category scheme="http://blog.steamshift.com/categories/ios/" term="ios"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[New Website for Haydn Bennett, Chartered Architect]]></title>
    <link href="http://blog.steamshift.com/blog/2012/10/03/bennarch-website/"/>
    <id>http://blog.steamshift.com/blog/2012/10/03/bennarch-website/</id>
    <published>2012-10-03T14:43:00.000Z</published>
    <updated>2013-01-14T12:50:47.000Z</updated>
    <content type="html"><![CDATA[<p>Steamshift presents the new website of Haydn Bennett, Chartered Architect. Haydn is an architect based in Salisbury working in Wiltshire, Hampshire and Dorset with a particular focus and interest on sustainable, low energy housing.</p>
<img src="/images/posts/bennarch.png" width="300" title="Bennarch Website">
]]></content>
    <category scheme="http://blog.steamshift.com/categories/websites/" term="websites"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[New Era Cube for iOS]]></title>
    <link href="http://blog.steamshift.com/blog/2012/09/13/new-era-cube-for-ios/"/>
    <id>http://blog.steamshift.com/blog/2012/09/13/new-era-cube-for-ios/</id>
    <published>2012-09-13T08:43:00.000Z</published>
    <updated>2013-01-14T12:50:28.000Z</updated>
    <content type="html"><![CDATA[<p>Steamshift are excited to announce the immediate availability of the <a href="http://itunes.apple.com/gb/app/new-era-cube/id551392224" target="_blank">New Era Cube</a> iOS app. We worked on the development of this app with the excellent team at <a href="http://www.somewhat.cc" target="_blank">Somewhat_</a>.</p>
<img src="/images/posts/new-era-cube.png" width="300" title="New Era Cube">


<a id="more"></a>

<p>Watch the promo video here:</p>
<div class="video-container"><iframe src="//www.youtube.com/embed/fj9zOsvsGN4" frameborder="0" allowfullscreen></iframe></div>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/iOS/" term="iOS"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[Sainsburysland iPad App]]></title>
    <link href="http://blog.steamshift.com/blog/2012/08/03/sainsburysland-ipad-app/"/>
    <id>http://blog.steamshift.com/blog/2012/08/03/sainsburysland-ipad-app/</id>
    <published>2012-08-03T11:15:00.000Z</published>
    <updated>2013-01-14T12:50:40.000Z</updated>
    <content type="html"><![CDATA[<p>An iPad app for a Sainsbury&#39;s event built in conjuction with <a href="http://physicalpixels.com" target="_blank">Physical Pixels</a>.</p>
<p>The app uses the iPad camera to recognise the labels on 3 different Sainsbury&#39;s products, then shows information about those products, and allows users to provide their details for further information.</p>
<img src="/images/posts/sainsburysland.png" width="300" title="Sainsburysland">


<a id="more"></a>

<div class="video-container"><iframe src="//player.vimeo.com/video/46838585" frameborder="0" allowfullscreen></iframe></div>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/iOS/" term="iOS"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[Date Selects From Text Input]]></title>
    <link href="http://blog.steamshift.com/blog/2012/02/15/date-selects-from-text-input/"/>
    <id>http://blog.steamshift.com/blog/2012/02/15/date-selects-from-text-input/</id>
    <published>2012-02-15T13:20:00.000Z</published>
    <updated>2013-01-13T19:51:51.000Z</updated>
    <content type="html"><![CDATA[<p>Quick hack for creating date select boxes from a date of birth text input. Accepts date value as YYYY-MM-DD or DD/MM/YYYY</p>
<a id="more"></a>

<iframe width="500px" height=""100%"" src="http://jsfiddle.net/9JdgH/embedded/result,js,html,css/presentation" frameborder="0" allowfullscreen></iframe>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/javascript/" term="javascript"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[Linked Lists From JSON]]></title>
    <link href="http://blog.steamshift.com/blog/2012/02/15/linked-lists-from-json/"/>
    <id>http://blog.steamshift.com/blog/2012/02/15/linked-lists-from-json/</id>
    <published>2012-02-15T13:18:00.000Z</published>
    <updated>2013-01-13T19:51:41.000Z</updated>
    <content type="html"><![CDATA[<p>Linked drop down selectors; changing one filters the others.<br>The JSON shows the options in the drop downs, and the relationships between each; so it is possible to have a character whose skills are available in all locations or just some and so on.</p>
<a id="more"></a>

<iframe width="500px" height=""100%"" src="http://jsfiddle.net/mMeey/embedded/result,js,html,css/presentation" frameborder="0" allowfullscreen></iframe>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/javascript/" term="javascript"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[Extending Animation Blocks With Delays]]></title>
    <link href="http://blog.steamshift.com/blog/2012/01/05/extending-animation-blocks-with-delays/"/>
    <id>http://blog.steamshift.com/blog/2012/01/05/extending-animation-blocks-with-delays/</id>
    <published>2012-01-05T13:10:00.000Z</published>
    <updated>2013-01-13T19:52:02.000Z</updated>
    <content type="html"><![CDATA[<p>After yesterday&#39;s post <a href="/blog/2012/01/04/animation-blocks-with-jquery-deferred-and-pipe/">Animation blocks with jQuery Deferred and Pipe</a>, I decided to extend the pipeline a little to allow for passing in an arbitrary delay to run before each animation. This allows for fun stuff like this!</p>
<a id="more"></a>

<iframe width="500px" height=""100%"" src="http://jsfiddle.net/fQc8x/embedded/result,js,html,css/presentation" frameborder="0" allowfullscreen></iframe>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/javascript/" term="javascript"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[Animation Blocks With jQuery Deferred and Pipe]]></title>
    <link href="http://blog.steamshift.com/blog/2012/01/04/animation-blocks-with-jquery-deferred-and-pipe/"/>
    <id>http://blog.steamshift.com/blog/2012/01/04/animation-blocks-with-jquery-deferred-and-pipe/</id>
    <published>2012-01-04T15:05:00.000Z</published>
    <updated>2013-01-13T19:52:16.000Z</updated>
    <content type="html"><![CDATA[<p>Last year I created a jQuery plugin for doing blocks of sequential and parallel animations for a client. I bumped into the $.Deferred object and .pipe function and thought that they looked like a perfect fit; so here&#39;s the updated version using $.when().then(), $.Deferred and .pipe().</p>
<a id="more"></a>

<iframe width="500px" height=""100%"" src="http://jsfiddle.net/m3GnE/embedded/result,js,html,css/presentation" frameborder="0" allowfullscreen></iframe>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/javascript/" term="javascript"/>
  </entry>
  <entry>
    <title type="html"><![CDATA[Au-revoir Kohana]]></title>
    <link href="http://blog.steamshift.com/blog/2011/09/29/au-revoir-kohana/"/>
    <id>http://blog.steamshift.com/blog/2011/09/29/au-revoir-kohana/</id>
    <published>2011-09-29T14:16:00.000Z</published>
    <updated>2013-01-13T19:52:24.000Z</updated>
    <content type="html"><![CDATA[<p>Its been a long road, but finally I think it is time for me to part company with Kohana. I‘ve been using Kohana since it was BlueFlame, an offshoot of CodeIgniter, and have very much enjoyed the experience. Its a great framework and I’ve been particularly taken with Version 3; however, its not without its faults, the biggest of which for me is the instability of the API.</p>
<a id="more"></a>

<p>As the framework has developed through 3.0.x, 3.1.x and now into 3.2.x, each point release (although thankfully not point-point release) has required a significant amount of work to upgrade my codebases; work I can ill afford to be doing. I&#39;m also a bit disillusioned with some of the internals and want something more modular.</p>
<p>So now … Symfony2. I think its going to be a while before I‘m anywhere near as comfortable with Symfony2 as I am with Kohana, but conceptually, I’m happier with the way it has developed, the reception its getting and the design decisions that have informed its development.</p>
<p>We‘ll see; if not I’m sure Kohana will be just as great if I decide to come back. In the meantime, I&#39;ll try and blog some of my experiences developing with Symfony2.</p>
]]></content>
    <category scheme="http://blog.steamshift.com/categories/php/" term="php"/>
    <category scheme="http://blog.steamshift.com/categories/php/kohana/" term="kohana"/>
    <category scheme="http://blog.steamshift.com/categories/php/kohana/symfony/" term="symfony"/>
  </entry>
</feed>
