<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>This is the blog of Naked Apps — makers of sweet mobile apps.  We’re available for hire so get in touch!</description><title>Naked Thought</title><generator>Tumblr (3.0; @nakedapps)</generator><link>http://blog.nakedapps.co.nz/</link><item><title>"Coffee is a way of stealing time that should by rights belong to your older self."</title><description>“Coffee is a way of stealing time that should by rights belong to your older self.””&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;&lt;a href="http://www.goodreads.com/quotes/show/119889"&gt;Terry Pratchett&lt;/a&gt; via &lt;a href="http://www.rancilio.it/"&gt;Rancilio&lt;/a&gt;’s newsletter (via &lt;a href="http://consciousstartups.com/" class="tumblr_blog"&gt;consciousstartups&lt;/a&gt;)&lt;/em&gt;</description><link>http://blog.nakedapps.co.nz/post/14325169845</link><guid>http://blog.nakedapps.co.nz/post/14325169845</guid><pubDate>Sat, 17 Dec 2011 11:35:21 +1300</pubDate><dc:creator>metabren</dc:creator></item><item><title>Site down, SITE DOWN!</title><description>&lt;p&gt;The website was down for a little bit today.  Not the blog (♥ &lt;a href="http://tumblr.com"&gt;Tumblr&lt;/a&gt;), but our actual website which needs to be up so people can &lt;a href="http://nakedapps.co.nz/#anchor-contact"&gt;get in touch re: work&lt;/a&gt; (aside: we&amp;#8217;re looking for work).&lt;/p&gt;

&lt;p&gt;This is not ideal.  So, what gives?&lt;/p&gt;

&lt;p&gt;Well, we’re hosted on Heroku - which is great (we ♥ &lt;a href="http://heroku.com"&gt;Heroku&lt;/a&gt; also).  I thought this must be some sort of mistake, so I restarted the server:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;$ heroku restart&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This didn’t work (site still down), so I checked the logs to find out why:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;$ heroku logs&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This gave me a clue:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;2011-10-10T23:59:53+00:00 heroku[web.1]: Starting process with command &lt;code&gt;bundle exec rails server thin -p 20965&lt;/code&gt;
  2011-10-11T00:00:54+00:00 heroku[web.1]: Error R10 (Boot timeout) -&amp;gt; Web process failed to bind to $PORT within 60 seconds of launch
  2011-10-11T00:00:54+00:00 heroku[web.1]: Stopping process with SIGKILL&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Aha!  The web process failed to bind to the port!  Gotcha.  But what does that mean?  No idea.  A 20 second Google later and I have &lt;a href="http://devcenter.heroku.com/articles/error-codes#r10__boot_timeout"&gt;the answer&lt;/a&gt; (the Heroku documentation is great):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A web process took longer than 60 seconds to bind to its assigned $PORT. This error is often caused by a process being unable to reach an external resource, such as a database.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So the app can’t reach the database.  Interesting.  A bit of background:  our website is currently static (i.e. no database).  As we’re planning on using one in future for client logins etc., I had added the mongoid gem to the Gemfile in anticipation of such a system.  In addition, I had also added the mongohq:free add-on to our Heroku app.  This was working for about a month without issue, so what gives?&lt;/p&gt;

&lt;p&gt;To find out I logged into Heroku, navigated to our app, clicked the “Add-Ons” drop-down menu and clicked on MongoHQ.  This should take me to the remote admin console to manage the database.  However, it redirected me to the MongoHQ homepage.  Hmmm, interesting.  As there was nothing in that database anyway, I decided to go for the quick fix - remove &amp;amp; re-add the add-on:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;$ heroku addons:remove mongohq:free
  $ heroku addons:add mongohq:free&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Heroku found some issue with re-adding mongohq:free:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&amp;#8212;&amp;#8212;-&amp;gt; Adding mongohq:free to nakedapps&amp;#8230; failed
 &amp;#160;!     Could not create resource with vendor, please try again later&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I re-added it from the heroku.com GUI Instead (Add-Ons &amp;gt; MongoHQ Learn More &amp;gt; Add Free).  This yielded no error, so I thought I was all good.  Onwards with the restart:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;$ heroku restart&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;App still not working.  Still getting a redirect to the MongoHQ website.  Now if you are in the same bucket as I was and are hoping that I’ve got the solution to this problem for you right here, I apologise.  I don’t know why this was broken, but I’ve got a theory:&lt;/p&gt;

&lt;p&gt;Perhaps MongoHQ lets you spawn a free instance, and if you use it - great!  It lets you keep it.  However, if you spawn a free instance and don’t use it within a reasonable amount of time, maybe it does the smart thing and destroys it.  This would explain the redirect, and why the app couldn’t connect - no database.&lt;/p&gt;

&lt;p&gt;So where to from here?  Well, as I had eluded to previously, there’s actually no current need for a database.  We just wanted the website back up.  So I did some looking around for how to remove the database dependency.  I found a couple of solutions.  &lt;a href="http://blakesmith.me/2010/04/27/rails-3-app-without-a-database.html"&gt;This article&lt;/a&gt; sums things up nicely for both Rails 2 and Rails 3 apps.   As the app is running Rails 3.1, I had to change the config/application.rb file from this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require "rails/all"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "rails/test_unit/railtie"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;As I was running Mongoid, I had already done this - and as we know, the app was still not working.  So I tried a couple more things.  I commented out this line in mongoid.yml:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# uri: &amp;lt;%= ENV['MONGOHQ_URL'] %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And did a push to heroku:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;$ git commit -am &amp;#8220;commented out mongo URL&amp;#8221;
  $ git push heroku master&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Still not working.  A little more Googling and I found a hint at the solution - comment out the gems in the Gemfile.  So out went:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#  gem 'mongoid', '&amp;gt;= 2.0.1'
#  gem 'bson_ext', '&amp;gt;= 1.3.0'
#  gem 'pg'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Another commit, push &amp;amp; restart.  This time a different error, so I checked the logs:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;2011-10-11T02:58:26+00:00 app[web.1]: ActionView::Template::Error (modernizr.js isn&amp;#8217;t precompiled)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m using the &lt;a href="https://github.com/russfrisch/modernizr-rails"&gt;modernizr-rails&lt;/a&gt; gem to provide html5 compatibility for older browsers, and it isn’t precompiled.  It’s working locally, but Heroku is complaining.  Apparently it needs to be precompiled.  How do we do this?  Add the following line to config/application.rb:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;config.assets.precompile += %w( modernizr.js )
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;One more commit, push &amp;amp; restart.  Everything is working once more!&lt;/p&gt;

&lt;p&gt;Hope this helps someone.&lt;/p&gt;

&lt;p&gt;B.&lt;/p&gt;</description><link>http://blog.nakedapps.co.nz/post/11306258708</link><guid>http://blog.nakedapps.co.nz/post/11306258708</guid><pubDate>Tue, 11 Oct 2011 17:16:00 +1300</pubDate><category>heroku</category><category>rails</category><dc:creator>metabren</dc:creator></item><item><title>This sweet little number was crafted for our latest...</title><description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/Kzrpdu0fzJ8?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;This sweet little number was crafted for our latest creation, &lt;a href="http://getpuzzlelove.com"&gt;Puzzle Love&lt;/a&gt;.  It’s a simple little Objective-C control producing a two-digit analogue counter.  Retina-ready, NACounter comes with a “Do what you want as long as you don’t call it your own and re-sell it” licence.  &lt;a href="https://github.com/naked-apps/NACounter"&gt;Grab it on GitHub&lt;/a&gt; &amp; enjoy :)&lt;/p&gt;</description><link>http://blog.nakedapps.co.nz/post/10842097691</link><guid>http://blog.nakedapps.co.nz/post/10842097691</guid><pubDate>Fri, 30 Sep 2011 21:30:00 +1300</pubDate><category>freebie</category><category>ios</category><category>control</category><dc:creator>metabren</dc:creator></item><item><title>We're here, now.</title><description>&lt;p&gt;Previously blogging as &lt;a href="http://blog.threesacompany.com"&gt;Three&amp;#8217;s a Company on Posterous&lt;/a&gt;, we&amp;#8217;ve decided it made sense to blog as our &amp;#8220;Public&amp;#8221; persona, Naked Apps.  &lt;/p&gt;
&lt;p&gt;So welcome, friend, to Naked Thought.&lt;/p&gt;</description><link>http://blog.nakedapps.co.nz/post/10827616328</link><guid>http://blog.nakedapps.co.nz/post/10827616328</guid><pubDate>Fri, 30 Sep 2011 16:05:00 +1300</pubDate><dc:creator>metabren</dc:creator></item><item><title>All times ship</title><description>&lt;p&gt;&lt;img src="http://static.howstuffworks.com/gif/sinking-ship-1.jpg" alt="Ship with problems" title="Picahso" width="400" height="267"/&gt;&lt;/p&gt;
&lt;p&gt;We&amp;#8217;ve all read blog posts that tell you to release your software product while you&amp;#8217;re still embarrased.  &amp;#8221;Ship&amp;#8221; they say.  What do they know?  Once you&amp;#8217;ve released your product, people will judge you.  Surely it&amp;#8217;s better to wait a little bit longer and release something polished.  The first impression is important, and your product sure as hell isn&amp;#8217;t ready:&lt;/p&gt;
&lt;p&gt;The UI is average.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s missing &amp;#8220;key&amp;#8221; features.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s not integrated into social networks yet.&lt;/p&gt;
&lt;p&gt;The logo needs work.&lt;/p&gt;
&lt;p&gt;You&amp;#8217;ll release it when all this is done - just a week longer, that&amp;#8217;ll be all it takes.  It will take the world by storm.  People will love it immediately.  They&amp;#8217;ll share it.  It will go viral.  You&amp;#8217;ll be on a beach somewhere smashing back Mojitos like they&amp;#8217;re going out of fashion in no time with all the money you make from this thing.&lt;/p&gt;
&lt;p&gt;Maybe.  But, maybe not.&lt;!-- more --&gt;&lt;/p&gt;
&lt;p&gt;Maybe or maybe not.  A 50/50 chance.  Pah!  I&amp;#8217;ll risk it to get the biscuit.  I&amp;#8217;ll release it when it&amp;#8217;s done.&lt;/p&gt;
&lt;p&gt;But it&amp;#8217;s not really 50/50.  Chances are your &amp;#8220;week longer&amp;#8221; will change into two, three, one month, two months, maybe more.  And even after all of this:  &lt;/p&gt;
&lt;p&gt;People still might not like your product - it might not solve a stubborn enough problem for them or they might not find it enjoyable to use.&lt;/p&gt;
&lt;p&gt;You still might not like your UI even after the redesign.  &lt;/p&gt;
&lt;p&gt;Your logo might still look crap.&lt;/p&gt;
&lt;p&gt;Your product might be used in ways that you never thought of, requiring another redesign.&lt;/p&gt;
&lt;p&gt;All the time you&amp;#8217;ve taken to perfect your baby, and you&amp;#8217;re probably going to have to spend at least that again.  That&amp;#8217;s not even the worst of it.  Worst case, while you&amp;#8217;re busy perfecting your baby, someone else has come along and taken the wind out of your sails.  &lt;/p&gt;
&lt;p&gt;They&amp;#8217;ve built your idea.  &lt;/p&gt;
&lt;p&gt;Not all is lost though - is it?  They&amp;#8217;ve done it badly.  The UI is average.  It&amp;#8217;s missing key features.  The logo is crap.  There&amp;#8217;s no sharing involved.  There&amp;#8217;s still a chance you can release something that ticks all these boxes before they get around to it right?&lt;/p&gt;
&lt;p&gt;Maybe.  But there&amp;#8217;s one huge problem with your plan.  Even though this product is &amp;#8220;inferior&amp;#8221; to the one you&amp;#8217;re building in almost every way, people like it.  No, they love it.  It&amp;#8217;s been posted to Hacker news.  People rave about it on Twitter.  Even you use it and like it.  They&amp;#8217;ve tested the market.  They&amp;#8217;ve got a boat-load of users.  And now they&amp;#8217;re adding everything you thought it was missing to begin with.  &lt;/p&gt;
&lt;p&gt;But this won&amp;#8217;t happen, right?  I&amp;#8217;m writing this blog post is because of Picahso.  It was our pet project - &lt;a href="http://brokenpicturetelephone.com/"&gt;Broken Picture Telephone&lt;/a&gt; for the iPhone.  What&amp;#8217;s Broken Picture Telephone?  Check out &lt;a href="http://doodle.no.de/"&gt;Doodle or Die&lt;/a&gt;.  It was made by &lt;a href="http://twitter.com/dylang"&gt;Dylan Greene&lt;/a&gt; for &lt;a href="http://nodeknockout.com/"&gt;Node Knockout&lt;/a&gt;.  It&amp;#8217;s simple, &lt;strike&gt;it&amp;#8217;s ugly&lt;/strike&gt; it&amp;#8217;s looking better now and, it&amp;#8217;s fun - so fun in fact that it won the &amp;#8220;most fun&amp;#8221; prize for the competition.  He&amp;#8217;s already got &lt;a href="http://www.reddit.com/r/doodleordie/"&gt;traction&lt;/a&gt; &amp;amp; users, and he&amp;#8217;s now building Doodleblast as a &amp;#8220;proper&amp;#8221; version of his creation - for the web &amp;amp; mobile devices.&lt;/p&gt;
&lt;p&gt;Picahso, is dead.  Before it even hit the water.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s why, ladies and gentleman, you should definitely, always, ship. &lt;/p&gt;
&lt;p&gt;p.s. This post might be crap, but at least it&amp;#8217;s shipped :-)&lt;/p&gt;
&lt;p&gt;^BK&lt;/p&gt;</description><link>http://blog.nakedapps.co.nz/post/10835976208</link><guid>http://blog.nakedapps.co.nz/post/10835976208</guid><pubDate>Fri, 23 Sep 2011 14:33:00 +1200</pubDate><category>lesson</category><category>picahso</category><dc:creator>metabren</dc:creator></item><item><title>The story of the App Store and the gloss</title><description>&lt;p&gt;Since I spent all of 30 minutes solving this problem I thought it may be a useful titbit for others!&lt;/p&gt;
&lt;p&gt;Already well documented in the &lt;a target="_blank" href="http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/mobilehig/IconsImages/IconsImages.html#//apple_ref/doc/uid/TP40006556-CH14-SW2"&gt;iOS Human Interface Guidelines&lt;/a&gt;: to remove gloss from your application AND app store icons you simply set the &lt;span&gt;UIPrerenderedIcon&lt;/span&gt; setting in the Info.plist to YES.&lt;!-- more --&gt;&lt;/p&gt;
&lt;p&gt;Great. So why today when I uploaded my App Store icon did it apply a gloss effect automatically?&lt;/p&gt;
&lt;p&gt;Well, funnily enough the reason was simply the order I uploaded the binary and the icon. I already had a developer rejected binary on iTunes Connect which rendered a gloss effect (from In-App Purchase testing *grumble*grumble*). Because I uploaded the new app store icon before the new application binary, the gloss effect was assumed from the original binary and applied automatically. The fix was, of course, to re-upload the new App Store icon once my new &amp;#8220;info.plist fixed&amp;#8221; binary version had registered.&lt;/p&gt;
&lt;p&gt;Perhaps this will save 30 minutes of your day - lesson is to be wary of the binary that may already be present when you upload your App Store icon!  &lt;/p&gt;
&lt;p&gt;&lt;img alt="Icon2x" height="114" src="http://posterous.com/getfile/files.posterous.com/temp-2011-08-29/kgcnixeABpqHsvebknrkHhpvEvkuIkdjGJfEDvehzhjnDkzihBipbmoctsbg/Icon2x.png.scaled595.png" width="114"/&gt;&lt;/p&gt;
&lt;p&gt;^PM&lt;/p&gt;</description><link>http://blog.nakedapps.co.nz/post/10831130179</link><guid>http://blog.nakedapps.co.nz/post/10831130179</guid><pubDate>Tue, 30 Aug 2011 14:39:00 +1200</pubDate><category>ios</category><category>gloss</category><category>icon</category><dc:creator>paupino</dc:creator></item><item><title>Cave Quisquiliae (Beware of Garbage!)</title><description>&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This week I was contracted by a local company to investigate why their windows service was getting slower and slower over time. They would start a long running process on the service which would start off processing 100 transactions a minute however after 15 minutes would only be processing 50 minute. In fact, after one hour it would be processing as little as 5 a minute.&lt;/p&gt;
&lt;p&gt;Why the slow down? I was hired to find out!&lt;!-- more --&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Symptoms&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The first thing I took a look at is any trends that were seen from Performance Monitor (perfmon.exe). Obviously something was going wrong - was it paging? Memory? Disk queuing? &lt;a target="_blank" href="http://oatmeal.tumblr.com/post/2910950328/dear-tumblr"&gt;Mystical tumblbeasts&lt;/a&gt; gnawing at the servers?&lt;/p&gt;
&lt;p&gt;Interestingly enough there were some noticable trends:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Allocated bytes per second on the increase&lt;/li&gt;
&lt;li&gt;Gen 0, Gen 1 and Gen 2 Collections on the increase&lt;/li&gt;
&lt;li&gt;% Time in GC on the increase&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The interesting one to note here is the percentage time spent collecting garbage was going up and up. I think we have a clear indicator!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Diagnosis&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Obviously, if the system is spending more and more time doing garbage collection, it is spending less and less time doing the work your application is designed to do. This explains the symptom that was being seen: the number of transactions being processed getting lower and lower. So what makes the system spend more and more time in garbage collection? Well, more trash!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Since I love personifying things&amp;#8230;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every .NET application (or Java for that matter) has a dedicated &amp;#8220;janitor&amp;#8221; which goes around cleaning up trash. He&amp;#8217;s quite a clever and effective this janitor: he knows what is trash and what is still being used. If it is still being used, he&amp;#8217;ll postpone checking it during the next quick cleanup. He is only human (!) though - if there is too much trash then he isn&amp;#8217;t going to be able to keep up and trash is going to start piling up around the place. In this case, he is going to be spending longer and longer wading through the rubbish and throwing away what isn&amp;#8217;t needed! I guess if this goes on and on, he&amp;#8217;ll eventually go into early retirement - taking your app with him!&lt;/p&gt;
&lt;p&gt;&lt;img width="512" src="http://posterous.com/getfile/files.posterous.com/temp-2011-08-26/FfqzwmHGJcbaAwaoeBrjdiskojmqGDwkGbBuxJEeIwaGBdHFzFxfkfbsIsnm/the-janitor-gets-fired.jpg.scaled595.jpg" height="288" alt="The-janitor-gets-fired"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Treatment&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now we have an idea about what&amp;#8217;s wrong, the next step is to find out what is generating all of this trash to see if we can be a little more &amp;#8220;environmentally friendly&amp;#8221; with our usage of objects! I&amp;#8217;ve used a few memory profilers for .NET and one stands out from the rest: &lt;a target="_blank" href="http://memprofiler.com/"&gt;.NET Memory Profiler&lt;/a&gt;. After installing this I noticed a few things:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;String generation was incredibly high. This was largely from:      
&lt;ul&gt;&lt;li&gt;Cavalier use of String.Split (it was being used lazily)&lt;/li&gt;
&lt;li&gt;There were a lot of unnecessary character to string conversions&lt;/li&gt;
&lt;li&gt;String concatenations were used in some areas which were used inefficiently&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Object cloning of highly linked objects in caches (i.e. one object cached would generate 1000 new objects)&lt;/li&gt;
&lt;li&gt;Object construction was incredibly resource intensive for some object types. There was a lot of metadata which didn&amp;#8217;t change between instantiations which was being re-generated every time&lt;/li&gt;
&lt;li&gt;Strings were being used in places where enumerations or value types would be better suited&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Luckily this was all treatable. So off to work I went fixing this up. Some interesting changes:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;There were a lot of &amp;#8220;quick wins&amp;#8221; with strings. These were attacked first for a proof of concept. After attacking these, the transaction speed increased to 120 transactions per minute.&lt;/li&gt;
&lt;li&gt;The object cache worked much more effectively by serializing when entering and retrieving from the cache. The overhead of serialization was minimal compared to the overhead of cloning large objects. &lt;/li&gt;
&lt;li&gt;Static metadata made an INCREDIBLE difference, namely due to the heavy use of these objects throughout the system.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;After fixing just these things I noticed the difference of generation of new objects vs removed objects go from 30,000 over a ten minute period to -200 objects. Much &lt;strong&gt;much&lt;/strong&gt; nicer to see!&lt;/p&gt;
&lt;p&gt;To cut a long story short - not only did I end up fixing the problem, but the system sped up substantially. It was processing 150 transactions per minute without slowdown. All from taking an environmentally friendly approach to trash :-)&lt;/p&gt;
&lt;p&gt;&lt;img width="348" src="http://posterous.com/getfile/files.posterous.com/temp-2011-08-26/fkxzfrjrGebjinxfFyDjirIwlrxsFobrsjtbxvIsspnsaGxdfwFIxAcwJIJr/go-green.jpg.scaled595.jpg" height="400" alt="Go-green"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For most systems, this is unlikely to be a &lt;em&gt;noticable&lt;/em&gt; problem however for enterprise systems I think it is important to consider every time you write a line of code. Every piece of code should be considered:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;What objects are being created behind the scenes? &lt;/li&gt;
&lt;li&gt;Is this piece of code a core piece of logic? &lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Obviously core logic being called often is going to generate trash at a faster rate!&lt;/p&gt;
&lt;p&gt;In closing: &amp;#8220;Beware of Garbage&amp;#8221; when coding&amp;#8230; even the highest end systems will notice slow down from too much trash.&lt;/p&gt;
&lt;p&gt;^PM&lt;/p&gt;</description><link>http://blog.nakedapps.co.nz/post/10831109707</link><guid>http://blog.nakedapps.co.nz/post/10831109707</guid><pubDate>Sun, 28 Aug 2011 14:40:00 +1200</pubDate><category>.net</category><category>performance</category><category>garbage collection</category><dc:creator>paupino</dc:creator></item><item><title>iPhone Simulator Case Sensitivity</title><description>&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;A funny thing happened in an application I was developing today - the exact same code behaved differently between the iPhone Simulator and a real device. The application had a custom keyboard displayed on screen (for reasons I won&amp;#8217;t get into) &amp;#8212; on the iPhone Simulator all keys were displayed perfectly whereas on my iPhone no keyboard was displayed at all!&lt;/p&gt;
&lt;p&gt;Why?&lt;!-- more --&gt;&lt;/p&gt;
&lt;p&gt;Well, it appears the the simulator is case insensitive when referring to resources whereas the devices are case sensitive. So if our resource is &lt;strong&gt;key-a.png &lt;/strong&gt;then we must refer to it with that exact casing (i.e. @&amp;#8221;key-a.png&amp;#8221;) for it to work on both the simulator and on the device.&lt;/p&gt;
&lt;p&gt;Why the iPhone simulator is case insensitive is beyond me, but nevertheless this is how it behaves!&lt;/p&gt;
&lt;p&gt;^PM&lt;/p&gt;</description><link>http://blog.nakedapps.co.nz/post/10831050036</link><guid>http://blog.nakedapps.co.nz/post/10831050036</guid><pubDate>Thu, 28 Jul 2011 14:37:00 +1200</pubDate><category>iphone simulator</category><category>ios</category><dc:creator>paupino</dc:creator></item><item><title>Unit testing with GHUnit on the iPhone</title><description>&lt;p&gt;After spending a long time pulling out my hair trying to get &lt;a href="http://gabriel.github.com/gh-unit/"&gt;GHUnit&lt;/a&gt; working inside XCode 4 I finally made a breakthrough! - Thanks to &lt;a href="http://stackoverflow.com/questions/5729730/unit-testing-ghunit/5732552#5732552"&gt;this helpful answer&lt;/a&gt; on Stackoverflow.&lt;/p&gt;
&lt;p&gt;While the installation instructions are exactly &lt;a href="http://gabriel.github.com/gh-unit/_installing.html"&gt;the same as on the GHUnit site&lt;/a&gt;, the magic piece of information that I was missing was mentioned right down the bottom:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;Your test methods should start with &lt;code&gt;test&lt;/code&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thanks for that piece of information Jano! The tests are now being loaded correctly and I can let my hair grow back again now&amp;#8230;&lt;/p&gt;
&lt;p&gt;^PM&lt;/p&gt;</description><link>http://blog.nakedapps.co.nz/post/10831026058</link><guid>http://blog.nakedapps.co.nz/post/10831026058</guid><pubDate>Thu, 30 Jun 2011 14:37:00 +1200</pubDate><category>ghunit</category><category>ios</category><category>objective c</category><category>xcode</category><dc:creator>paupino</dc:creator></item></channel></rss>

