<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Phil from Orange Lightning</title>
	<atom:link href="http://blog.orangelightning.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.orangelightning.co.uk</link>
	<description>Phil&#039;s blog on technical things and everything else inbetween</description>
	<lastBuildDate>Mon, 03 Sep 2012 13:41:23 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Part 1 of my Gibraltar test drive: hopes and dreams</title>
		<link>http://blog.orangelightning.co.uk/2012/09/gibraltar-test-drive-part-1-hopes-and-dreams/</link>
		<comments>http://blog.orangelightning.co.uk/2012/09/gibraltar-test-drive-part-1-hopes-and-dreams/#comments</comments>
		<pubDate>Mon, 03 Sep 2012 13:28:49 +0000</pubDate>
		<dc:creator>phil</dc:creator>
				<category><![CDATA[Gibraltar]]></category>
		<category><![CDATA[NancyFX]]></category>
		<category><![CDATA[RavenDB]]></category>

		<guid isPermaLink="false">http://blog.orangelightning.co.uk/?p=251</guid>
		<description><![CDATA[In this series of blog posts I&#8217;ll be using Gibraltar on a new project and blogging my journey. I can thank @RachelHawley for giving me a push to try out Gibraltar and it so happens I haven&#8217;t done blogging for a while since my last encounter with Ayende reviewing my code So what&#8217;s my current [...]]]></description>
				<content:encoded><![CDATA[<p>In this series of blog posts I&#8217;ll be using <a href="http://www.gibraltarsoftware.com" target="_blank">Gibraltar </a>on a new project and blogging my journey. I can thank @<a href="http://twitter.com/RachelHawley" target="_blank">RachelHawley </a>for giving me a push to try out Gibraltar and it so happens I haven&#8217;t done blogging for a while since my last encounter with Ayende reviewing my code <img src='http://blog.orangelightning.co.uk/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><strong>So what&#8217;s my current setup?</strong></p>
<p>Firstly, its rather bad, mainly because I&#8217;ve only ever used Elmah before as it just works.</p>
<p><a href="http://code.google.com/p/elmah/" target="_blank">Elmah</a> is great for being plug and play but it does spit out lots of log entries when you have a weekly changing website. At one point it was so bad I was filtering out and discarding 404 errors. This was when we launched a new client website and we were missing lots of 30x redirects for older urls, it was an email error log DoS attack on my inbox!</p>
<p>I use Elmah to send emails rather than store to disk, the emails go to a GMail account, I have to manually go through and discard the bad error reports. I&#8217;m really hoping I could do cool things like *.php* or *phpmyadmin* 404 reports get binned, lots of bots keep trying to find WordPress, PHP files or PHPMyAdmin. I hate those bots filling up my logs&#8230;</p>
<p>I&#8217;ve only recently started logging via NLog and that is written to a log file on disk that I manually check if I notice something bad from the Elmah reports.</p>
<p>I don&#8217;t do any performance metrics, I&#8217;ve played with NewRelic but it was rather pricey and if the server isn&#8217;t maxed out, performance issues aren&#8217;t a big deal&#8230;</p>
<p>I am a terrible person.</p>
<p><strong>My dream setup</strong></p>
<p>I&#8217;ve already started talking about what my dream setup would partly be, I&#8217;d really love an intelligent interface that I can setup complex rules or folders to help split up the error logs. Separating the HTTP error logs based on HTTP code would be awesome, 404 into one group and 500 into another.</p>
<p>Logging other parts of the application is kind of not that important, the only bit of the application that I&#8217;d care about is the payment stuff and that&#8217;s only because SagePay is rather bad. I&#8217;m looking for Gibraltar to collect logs from Nlog or something similar.</p>
<p>Performance logging would be a bonus, I&#8217;ve already optimized the presentation stuff like CSS/JS so I&#8217;d want to know what stuff is really slow, taking lots of memory and what I should focus my effort on fixing.</p>
<p>But the main thing, is something that pulls all my logging bits together and lets me do deep analysis but also lets me quickly look if something needs my attention.</p>
<p><strong>The project</strong></p>
<p>I&#8217;m going to dive into the deep end, I&#8217;ll use Gibraltar on a brand new project for a client. The client wants a public facing equipment hire website that is modern, quick, and flexible.</p>
<p>The technologies I&#8217;ll be using are NancyFX (also something new to me), RavenDB (I love it) and Twitter Bootstrap to handle modern styling and mobile/tablet support.</p>
<p>Join me on my journey over this month!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.orangelightning.co.uk/2012/09/gibraltar-test-drive-part-1-hopes-and-dreams/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RavenSuggest: A better approach</title>
		<link>http://blog.orangelightning.co.uk/2012/07/ravensuggest-a-better-approach/</link>
		<comments>http://blog.orangelightning.co.uk/2012/07/ravensuggest-a-better-approach/#comments</comments>
		<pubDate>Sun, 08 Jul 2012 06:45:49 +0000</pubDate>
		<dc:creator>phil</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[RavenDB]]></category>

		<guid isPermaLink="false">http://blog.orangelightning.co.uk/?p=209</guid>
		<description><![CDATA[[This post follows on from my first post "RavenSuggest: The wrong approach". It is aimed at responding to Ayende's RavenSuggest blog post] Ok, let me start by saying, its wonderful that Ayende took the time to review my RavenSuggest demo code, that was very demo code. Did I mention it is demo code? I made [...]]]></description>
				<content:encoded><![CDATA[<p><em><strong>[This post follows on from my first post "<a href="http://blog.orangelightning.co.uk/2012/07/ravensuggest-wrong-approach/" target="_blank">RavenSuggest: The wrong approach</a>". It is aimed at responding to <a href="http://ayende.com/blog/156897/raven-suggest-review-amp-options?key=fe70d9b7c1124e6b8a7998678ffa1fcf" target="_blank">Ayende's RavenSuggest blog post</a>]</strong></em></p>
<p>Ok, let me start by saying, its wonderful that Ayende took the time to review my <a href="https://github.com/philjones88/RavenSuggest" target="_blank">RavenSuggest </a>demo code, that was very demo code. Did I mention it is demo code? I made it public on GitHub as I hate emailing ZIP files of code, oh did I mention its demo code! <img src='http://blog.orangelightning.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>It has shown some interesting usage of features in RavenDB I hadn&#8217;t see before or thought of combing. Reminds of the time at ProgNoSQL where Ayende put together lazy and includes, which resulted in him discovering <a href="http://issues.hibernatingrhinos.com/issue/RavenDB-280" target="_blank">this bug</a> <img src='http://blog.orangelightning.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2><span style="text-decoration: underline;">People love to help!</span></h2>
<p>I got a few Tweets from people regarding my question of if there is a better way than &#8220;*term*&#8221;. Here they are:</p>
<blockquote class="twitter-tweet" data-in-reply-to="221610959230353409"><p>@<a href="https://twitter.com/philjones88">philjones88</a> @<a href="https://twitter.com/ayende">ayende</a> Yes, you should use the NGramAnalyzer for this. Take a look here: <a href="https://t.co/LgtmQ3Hz" title="https://gist.github.com/1669767">gist.github.com/1669767</a></p>
<p>&mdash; Daniel Lang (@daniellangnet) <a href="https://twitter.com/daniellangnet/status/221648470677798912" data-datetime="2012-07-07T16:54:48+00:00">July 7, 2012</a></p></blockquote>
<p><script src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<blockquote class="twitter-tweet" data-in-reply-to="221610959230353409"><p>@<a href="https://twitter.com/philjones88">philjones88</a> @<a href="https://twitter.com/ayende">ayende</a> You can use query.Suggest(new SuggestionQuery { Field = &#8220;Title&#8221;, Term = model.Query, MaxSuggestions = 5 }) btw</p>
<p>&mdash; Mac (@wwwlicious) <a href="https://twitter.com/wwwlicious/status/221659420441063425" data-datetime="2012-07-07T17:38:18+00:00">July 7, 2012</a></p></blockquote>
<p><script src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<blockquote class="twitter-tweet" data-in-reply-to="221610959230353409"><p>@<a href="https://twitter.com/philjones88">philjones88</a> @<a href="https://twitter.com/ayende">ayende</a> from my experience suggests works best if you are not trying to suggest mid-word &#8211; this generates too many options</p>
<p>&mdash; Itamar Syn-Hershko (@synhershko) <a href="https://twitter.com/synhershko/status/221666444017016834" data-datetime="2012-07-07T18:06:13+00:00">July 7, 2012</a></p></blockquote>
<p><script src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<blockquote class="twitter-tweet" data-in-reply-to="221610959230353409"><p>@<a href="https://twitter.com/philjones88">philjones88</a> @<a href="https://twitter.com/ayende">ayende</a> if you still want to do that, take a look at using n-grams</p>
<p>&mdash; Itamar Syn-Hershko (@synhershko) <a href="https://twitter.com/synhershko/status/221666517157294081" data-datetime="2012-07-07T18:06:30+00:00">July 7, 2012</a></p></blockquote>
<p><script src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>OK. The Twitter RavenDB community has come up with two other options I can see:</p>
<p>Something called &#8220;NGramAnalyzer&#8221;</p>
<p>&#8220;Suggest&#8221; API. Hmm. Didn&#8217;t think about this, I&#8217;ve used it in the past to do things like:</p>
<blockquote><p>rq.Suggest().Suggestions</p></blockquote>
<p>To get a list of suggestions if a query doesn&#8217;t return any results.</p>
<p>And then Ayende writes a whole blog post of feedback before I get chance to investigate NGramAnalyzer or using Suggest()</p>
<h2><span style="text-decoration: underline;">Hints of performance problems</span></h2>
<p>I should explain what set off my &#8220;this is bad code&#8221; gut feeling question to Ayende.</p>
<p>Here is FireBug for 1,500 documents.</p>
<p><a href="http://blog.orangelightning.co.uk/wp-content/uploads/2012/07/ravensuggest-firebug-1500.png"><img class="alignnone size-full wp-image-213" title="ravensuggest-firebug-1500" src="http://blog.orangelightning.co.uk/wp-content/uploads/2012/07/ravensuggest-firebug-1500.png" alt="" width="547" height="174" /></a></p>
<p>Here is FireBug for 30,000 documents.</p>
<p><a href="http://blog.orangelightning.co.uk/wp-content/uploads/2012/07/ravensuggest-firebug-30000.jpg"><img class="alignnone size-full wp-image-214" title="ravensuggest-firebug-30000" src="http://blog.orangelightning.co.uk/wp-content/uploads/2012/07/ravensuggest-firebug-30000.jpg" alt="" width="545" height="174" /></a></p>
<p>My bad code spidey senses are tingling! That isn&#8217;t scaling very well. Over 200ms, er, that&#8217;s not good at all.</p>
<h2><span style="text-decoration: underline;">Why wasn&#8217;t I warned?</span></h2>
<p>I think something RavenDB does rather well is, as Ayende puts it:</p>
<blockquote><p>That came out of the realization that we had to drop people into the Pit of Success as much as possible.</p>
<p>Ayende (<a href="http://ayende.com/blog/45057/raccoon-blog-performance" target="_blank">Here</a>)</p></blockquote>
<p>And as per the RavenDB website, RavenDB is &#8220;Safe by default&#8221;.</p>
<p>I wouldn&#8217;t want RavenDB to throw an exception and stop me doing this, like it would for an N+1 scenario, instead I&#8217;d like to be gently informed that what I am doing is rather bad.</p>
<p>I would imagine a purple warning message like this one from when I corrupted RavenDB indexes by pressing the close button and not typing &#8220;q&#8221; to cleanly shut down.</p>
<p><a href="http://blog.orangelightning.co.uk/wp-content/uploads/2012/04/weird-ravendb-purple-text.jpg"><img class="alignnone size-medium wp-image-151" title="weird ravendb purple text" src="http://blog.orangelightning.co.uk/wp-content/uploads/2012/04/weird-ravendb-purple-text-300x252.jpg" alt="" width="300" height="252" /></a></p>
<p>Wouldn&#8217;t something like:</p>
<blockquote><p><span style="color: #800080;">Warning: &lt;&lt;*term*&gt;&gt; can cause performance problems and is considered bad practice.</span></p></blockquote>
<p>Have made this blog and the previous unnecessary? (Assuming the documentation is in place to provide an alternative)</p>
<p>That is going a bit more towards the &#8220;nanny state&#8221; approach but what if I was a developer who didn&#8217;t care so much, didn&#8217;t read blog, didn&#8217;t use Twitter? I could have cause some issues further down the road for other people. I would prefer to be told what I am doing is bad.</p>
<h2><span style="text-decoration: underline;">It is still demo code</span></h2>
<p>I plan to try and expand it more, but I have merged in Ayende&#8217;s comments and they will be live later today.</p>
<p>For example it would be good if they had &#8220;Computer Hardware&#8221; selected and typed &#8220;Bristol&#8221; and it showed all results for &#8220;Bristol&#8221; as well as say &#8220;ABC Bristol Ltd&#8221;.</p>
<p>I think you can make this even more intelligent.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.orangelightning.co.uk/2012/07/ravensuggest-a-better-approach/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>RavenSuggest: The wrong approach</title>
		<link>http://blog.orangelightning.co.uk/2012/07/ravensuggest-wrong-approach/</link>
		<comments>http://blog.orangelightning.co.uk/2012/07/ravensuggest-wrong-approach/#comments</comments>
		<pubDate>Sun, 08 Jul 2012 05:57:57 +0000</pubDate>
		<dc:creator>phil</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[RavenDB]]></category>

		<guid isPermaLink="false">http://blog.orangelightning.co.uk/?p=183</guid>
		<description><![CDATA[[Note: I am writing this blog post after Ayende's. I was planning to do just one post after I had got some help from him on improving my RavenSuggest code. This post is my initial thoughts I wasn't going to post.] RavenSuggest, Why? Its come to the point in the client&#8217;s application where letting the [...]]]></description>
				<content:encoded><![CDATA[<p><em><strong>[Note: I am writing this blog post <a href="http://ayende.com/blog/156897/raven-suggest-review-amp-options?key=fe70d9b7c1124e6b8a7998678ffa1fcf" target="_blank">after Ayende's</a>. I was planning to do just one post after I had got some help from him on improving my RavenSuggest code. This post is my initial thoughts I wasn't going to post.]</strong></em></p>
<h2><span style="text-decoration: underline;">RavenSuggest, Why?</span></h2>
<p>Its come to the point in the client&#8217;s application where letting the user choose an item from a HTML select control is not practical. The basic idea is the client can select an existing item from the database to include, this becomes painful when you have >200 items to choose from!</p>
<p>This also has a few usability issues, mainly, the user might not know the item they are exactly looking for, may mistype the name or my ordering of items might not make sense to them.</p>
<h2><span style="text-decoration: underline;">Requirements</span></h2>
<p>1. Don&#8217;t take the user out of context. E.g. they shouldn&#8217;t have to move page.</p>
<p>2. Users might not know the exact item&#8217;s name. E.g. they might know &#8220;Diamond&#8221; of the item &#8220;BlueFooDiamond Ltd&#8221;. Help them.</p>
<p>3. Items can have weird naming. E.g. &#8220;Kart&#8221; or &#8220;Cart&#8221; could both be used for the same item&#8217;s name.</p>
<p>4. Be friendly. The users aren&#8217;t technical and it should do its best behind the scenes to get the best results.</p>
<p>5. Be fast. Users don&#8217;t like waiting.</p>
<h2><span style="text-decoration: underline;">The idea</span></h2>
<p>What if I could do something clever like those smart folks over at Google. RavenDB comes with Lucene and is pretty good at doing searches.</p>
<h2><span style="text-decoration: underline;">Result</span></h2>
<p>Below is a screenshot of my first attempt using RavenDB and <a href="http://jqueryui.com/demos/autocomplete/" target="_blank">jQuery UI&#8217;s autocomplete plugin</a>.</p>
<p><a href="http://blog.orangelightning.co.uk/wp-content/uploads/2012/07/ravensuggest-1.jpg"><img style="border: solid 1px #000;" title="ravensuggest-1" src="http://blog.orangelightning.co.uk/wp-content/uploads/2012/07/ravensuggest-1.jpg" alt="" width="414" height="300" /></a></p>
<p>This is a good starting point. It works but I want to improve it.</p>
<p>It should use existing data the user has entered to help narrow the search down and make it more relevant.</p>
<p><a href="http://blog.orangelightning.co.uk/wp-content/uploads/2012/07/ravensuggest-2.jpg"><img class="alignnone size-full wp-image-194" style="border: solid 1px #000;" title="ravensuggest-2" src="http://blog.orangelightning.co.uk/wp-content/uploads/2012/07/ravensuggest-2.jpg" alt="" width="466" height="239" /></a></p>
<h2><span style="text-decoration: underline;">This feels bad</span></h2>
<p>I am not sure &#8220;*term*&#8221; is really the best approach. I can&#8217;t see anything in the API or RavenDB documentation that hints at a better way. Perhaps I better Tweet Ayende and see if he can help me out. I uploaded the demo code to Github, to a project called <a href="https://github.com/philjones88/RavenSuggest" target="_blank">RavenSuggest</a>.</p>
<p>&nbsp;</p>
<blockquote class="twitter-tweet" data-in-reply-to="221311217258610688"><p>@<a href="https://twitter.com/ayende">ayende</a> demo blog code for ravendb suggestions: <a title="http://bit.ly/OFZfa8" href="http://t.co/FNf1L1Rz">bit.ly/OFZfa8</a> Is doing &#8220;*term*&#8221; bad, is there a better way?</p>
<p>— Phil Jones (@philjones88) <a href="https://twitter.com/philjones88/status/221610959230353409" data-datetime="2012-07-07T14:25:44+00:00">July 7, 2012</a></p></blockquote>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.orangelightning.co.uk/2012/07/ravensuggest-wrong-approach/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Moving from Fasthosts to SWBroadband</title>
		<link>http://blog.orangelightning.co.uk/2012/06/moving-from-fasthosts-to-swbroadband/</link>
		<comments>http://blog.orangelightning.co.uk/2012/06/moving-from-fasthosts-to-swbroadband/#comments</comments>
		<pubDate>Wed, 06 Jun 2012 13:02:21 +0000</pubDate>
		<dc:creator>phil</dc:creator>
				<category><![CDATA[Web Hosting]]></category>

		<guid isPermaLink="false">http://blog.orangelightning.co.uk/?p=166</guid>
		<description><![CDATA[In this blog post I will be discussing moving my client Escape Trips (They do Stag and Hen weekends) from Fasthosts to SWBroadband and all the reasons why we did this move. Fashosts Fasthosts are one of the bigger web hosts on the internet and advertise their &#8220;cloud&#8221; VPS service in many places. We&#8217;ve been [...]]]></description>
				<content:encoded><![CDATA[<p>In this blog post I will be discussing moving my client <a title="Escape Trips" href="http://www.escapetrips.co.uk" target="_blank">Escape Trips </a>(They do Stag and Hen weekends) from <a title="Fashosts crap" href="http://www.fasthosts.co.uk/" target="_blank">Fasthosts</a> to <a title="SWBroadband VPS hosting" href="http://www.swbroadband.co.uk/" target="_blank">SWBroadband</a> and all the reasons why we did this move.</p>
<h2>Fashosts</h2>
<p>Fasthosts are one of the bigger web hosts on the internet and advertise their &#8220;cloud&#8221; VPS service in many places. We&#8217;ve been with them for many months, not years as, as Escape&#8217;s website and office systems evolved, shared hosting became unstable.</p>
<p>Fasthosts have been OK for a while, I say OK as I had got used to the frequent downtime and invested in making my web application for Escape resistant to Fasthost&#8217;s downtime. For example, hosting emails by a different service so when the website is offline the Escape staff can still access and use email.</p>
<p>The biggest problem with Fasthosts, is the fact that they are &#8220;OK&#8221;. Not the worst host I&#8217;ve ever used (Looking at you <a title="UKHost4u suck" href="http://www.ukhost4u.com/" target="_blank">UKHost4u</a>) but not the best (Rackspace). I had come to accept the fact that you get that level of service for the money my client was paying and we couldn&#8217;t justify getting a dedicated server from Rackspace due to the cost.</p>
<p>The recent downtime with Fasthosts broke me. The VPS&#8217;s I/O performance was widely variable from nothing at all to normal. Even worse, this happened the week I was in London at Progressive NoSQL talking about how awesome RavenDB is. This meant frequent problems as even though RavenDB is awesome, it does require some form of disk access! More worryingly, the day before the move to SWBroadband, Fasthosts &#8220;lost&#8221; our VPS, the control panel didn&#8217;t show it and they had to manually find it as it had &#8220;entered a stopped state&#8221; for some reason.</p>
<h2>SWBroadband</h2>
<p>I&#8217;ll be honest. I was a little sceptical of them as they look like a small operation but as I&#8217;ll show, their belief in their service (a free trial with unlimited support) really won me over.</p>
<p>It started with a tweet. Yup. SWBroadband contact me after I tweeted in frustration at Fasthosts downtime and the I/O problems I previously mentioned.</p>
<p>Their VPS offering is much better value than Fasthosts (although Fasthosts claim &#8220;cloud&#8221; VPS hosting, I have yet to see it actually work&#8230;) and the performance to price ratio is awesome.</p>
<h2>Comparing the offerings</h2>
<p><strong>Fasthosts</strong></p>
<p>1 &#8220;vCPU&#8221;<br />
2GB RAM<br />
80 GB Space<br />
Windows Server 2008 R2 Web</p>
<p>£46.59 per month</p>
<p><strong>SWBroadband</strong></p>
<p>2 CPU Cores (actually, 2 cores with 4 threads!)<br />
2GB RAM<br />
25 GB Space<br />
Windows Server 2008 R2 Web</p>
<p>£32.99</p>
<p>Ok, I get less disk space but seeing Escape has around 2-3GB of files, having the extra space from Fasthosts is pointless. Also SWBroadband give you 10GB free backup space, for free.</p>
<p>So for less money, I get a more resources? Too good to be true? Nope. Read on.</p>
<h2> VPS Performances</h2>
<p>Firstly, yes, the VPS&#8217;s aren&#8217;t a direct one to one comparison but I am comparing the two offerings my client was and would be using.</p>
<p>I used a new toy, <a title="Blitz" href="http://blitz.io/" target="_blank">Blitz</a>, a tool for basically throwing users at a server to see how the server handles the load. They offer 250 users for free but I wanted to go extreme and see at what point SWBroadband&#8217;s VPS would fall over, I paid $9 for 1000 users for 1 hour.</p>
<p>Lets compare the Fasthosts VPS to the SWBroadband VPS. I setup the SWBroadband VPS to match the Fasthosts one (nothing special, an ASP.NET MVC 3 website running on IIS 7.5 powered by RavenDB)</p>
<div id="attachment_171" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.orangelightning.co.uk/wp-content/uploads/2012/06/fasthosts-versus-swbroadband-initial.png"><img class="size-medium wp-image-171 " title="Fasthosts Versus SWBroadband" src="http://blog.orangelightning.co.uk/wp-content/uploads/2012/06/fasthosts-versus-swbroadband-initial-300x212.png" alt="Fasthosts Versus SWBroadband" width="300" height="212" /></a><p class="wp-caption-text">Fasthosts Versus SWBroadband</p></div>
<p>Yup. SWBroadband&#8217;s VPS kept on chugging, the users would notice a slow down but it stayed online and battled through.</p>
<p>The Fasthosts VPS gave up and died if you look at the error/timeout lines. Ouch.</p>
<p>Fasthosts VPS also comes with lots of unwanted software, &#8220;MailEnable&#8221; and lots of processes that run in the background and appear to be for controlling the VPS via the control panel. Some people might like this but I&#8217;ve always found a web control panel to be useless and slow, I&#8217;d prefer to remote desktop to the server and restart it through that rather than a web control panel.</p>
<h2>Customer service</h2>
<p><strong>Email support</strong></p>
<p>I don&#8217;t like ticket systems. Don&#8217;t make me sign into the website to submit a ticket. A direct email address to support, answered by people with brains is a huge must. SWBroadband have this and all responses have been very friendly and helpful, they are very knowledgeable and helpful. I&#8217;m not a sys-ops guy and its great to know great people are on hand to help me.</p>
<p><strong>Twitter</strong></p>
<p>I tweet and it would be great if you can support me directly via Twitter. Both Fasthosts and SWBroadband do this to a certain degree but Fasthost&#8217;s Twitter response time is slow and often just like a script. SWBroadband provide direct support which is awesome when I&#8217;m stuck on the train and need to get some help in 140 characters or less!</p>
<p><strong>Have a local rate number</strong></p>
<p>Ringing and using a telephone is my last resort.</p>
<p>With Fasthosts they have only 0800 or expensive numbers listed on their site (hint: I found to &#8220;01452541499&#8243; be local rate and the same line, use it to save cash, you&#8217;ll be ringing it alot)</p>
<p>SWBroadband have a local rate number listed. Win.</p>
<p>Bonus is that SWBroadband have a Skype account too! Double win.</p>
<p>Although SWBroadband have always helped and solved my problems/questions via email/twitter quickly so I haven&#8217;t felt the need to actual use that ancient invention called a telephone!</p>
<h2>Tell me when my server is offline</h2>
<p>I use <a title="Pingdom website monitoring" href="http://www.pingdom.com/" target="_blank">Pingdom</a> to monitor my client&#8217;s websites. I learnt about this awesome tool after trying to figure out when my Fasthosts VPS was offline, which was often frequently when I was asleep, so my first approach of using a ping script, wasn&#8217;t much use.</p>
<p>Fasthosts appear to have no monitoring at all and don&#8217;t even know when they&#8217;ve lost my VPS. I&#8217;ve often rung up and told them my VPS is offline. I shouldn&#8217;t be doing this. You should tell me!</p>
<p>SWBroadband seem to have their own monitoring system (although I&#8217;ll still keep Pingdom) that sends you an email or SMS message when the VPS is offline. In the time (a few weeks now) since moving the VPS hasn&#8217;t been offline and I have slept like a baby, thanks guys!</p>
<h2>Conclusions</h2>
<p>If you are fed up of bad VPS providers, give SWBroadband a go. They are cheap, have good hardware, aren&#8217;t oversold, have good support and will give you a trial to convince you. They convinced me. I&#8217;m looking at moving more client&#8217;s to SWBroadband and getting one of their basic VPS&#8217;s for my side projects.</p>
<p>Glad we&#8217;ve seen the back of Fasthosts, <a title="Fasthosts suck" href="http://www.asa.org.uk/ASA-action/Adjudications/2012/5/Fasthosts-Internet-Ltd/SHP_ADJ_173899.aspx" target="_blank">&#8220;the best VPS&#8217;s UK&#8221; or not</a>, don&#8217;t even know why their marketing guys decided to try and play that card&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.orangelightning.co.uk/2012/06/moving-from-fasthosts-to-swbroadband/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My DDDSW AppHarbor 20/20 talk</title>
		<link>http://blog.orangelightning.co.uk/2012/05/my-dddsw-appharbor-2020-talk/</link>
		<comments>http://blog.orangelightning.co.uk/2012/05/my-dddsw-appharbor-2020-talk/#comments</comments>
		<pubDate>Mon, 28 May 2012 08:49:25 +0000</pubDate>
		<dc:creator>phil</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[DDD]]></category>

		<guid isPermaLink="false">http://blog.orangelightning.co.uk/?p=156</guid>
		<description><![CDATA[So on Friday afternoon, 3PM, Mr Guy Smith Ferrier contacted me to see if I could fill in for a speaker who couldn&#8217;t make the event any more. Being the good fellow I am, I said yes and proceeded to spend the next 9 hours re-working a grok talk on AppHarbor I did in January [...]]]></description>
				<content:encoded><![CDATA[<p>So on Friday afternoon, 3PM, Mr Guy Smith Ferrier contacted me to see if I could fill in for a speaker who couldn&#8217;t make the event any more.</p>
<p>Being the good fellow I am, I said yes and proceeded to spend the next 9 hours re-working a grok talk on AppHarbor I did in January into the 20/20 format.</p>
<p>I didn&#8217;t get much sleep but I think everyone enjoyed it, including me, although I was a little bit knackered afterwards!</p>
<p>DDDSW was great as always and was happy to help the team out.</p>
<p>I&#8217;ll blog my thoughts on each session I went to in a separate blog post as I did last year.</p>
<p>A tiny mistake is that AppHarbor renamed &#8220;instances&#8221; to &#8220;workers&#8221;. Confused me why they did this.</p>
<p><iframe src="https://r.office.microsoft.com/r/rlidPowerPointEmbed?p1=1&amp;p2=1&amp;p3=SD15688F5F2BB1B594!386&amp;p4=&amp;ak=!AE_RNgKiYI3axWU&amp;kip=1" frameborder="0" scrolling="no" width="402" height="327"></iframe></p>
<p>Or you can download the Powerpoint via <a href="https://skydrive.live.com/redir?resid=15688F5F2BB1B594!386">this link.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.orangelightning.co.uk/2012/05/my-dddsw-appharbor-2020-talk/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TIL: Close button on the RavenDB console simulates a crash</title>
		<link>http://blog.orangelightning.co.uk/2012/04/til-close-button-on-the-ravendb-console-simulates-a-crash/</link>
		<comments>http://blog.orangelightning.co.uk/2012/04/til-close-button-on-the-ravendb-console-simulates-a-crash/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 13:46:41 +0000</pubDate>
		<dc:creator>phil</dc:creator>
				<category><![CDATA[RavenDB]]></category>

		<guid isPermaLink="false">http://blog.orangelightning.co.uk/?p=150</guid>
		<description><![CDATA[TIL (Today I learnt) pressing the close button on the RavenDB console simulates a crash/unclean shutdown of RavenDB. This is quite interesting as you test what happens when this scenario occurs. If you keep pressing the close button on your console, you might end up with the following scary looking purple warning messages: (Unclean shutdown [...]]]></description>
				<content:encoded><![CDATA[<p>TIL (Today I learnt) pressing the close button on the RavenDB console simulates a crash/unclean shutdown of RavenDB.</p>
<p>This is quite interesting as you test what happens when this scenario occurs.</p>
<p>If you keep pressing the close button on your console, you might end up with the following scary looking purple warning messages:</p>
<p><a href="http://blog.orangelightning.co.uk/wp-content/uploads/2012/04/weird-ravendb-purple-text.jpg"><img class="alignleft  wp-image-151" title="weird ravendb purple text" src="http://blog.orangelightning.co.uk/wp-content/uploads/2012/04/weird-ravendb-purple-text.jpg" alt="" width="539" height="453" /></a></p>
<p>(Unclean shutdown detected on Index checking the index took X, checking the index for errors. This may take a while.<br />
Checking index X took X, clean: true)</p>
<p>You can help &#8220;fix&#8221; these errors via having:</p>
<p>&lt;add key=&#8221;Raven/ResetIndexOnUncleanShutdown&#8221; value=&#8221;true&#8221;/&gt;</p>
<p>In your &#8220;Raven.Server.exe.config&#8221; file.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.orangelightning.co.uk/2012/04/til-close-button-on-the-ravendb-console-simulates-a-crash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My 10 tips and tricks with RavenDB</title>
		<link>http://blog.orangelightning.co.uk/2012/04/my-10-tips-and-tricks-with-ravendb/</link>
		<comments>http://blog.orangelightning.co.uk/2012/04/my-10-tips-and-tricks-with-ravendb/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 12:04:54 +0000</pubDate>
		<dc:creator>phil</dc:creator>
				<category><![CDATA[RavenDB]]></category>

		<guid isPermaLink="false">http://blog.orangelightning.co.uk/?p=133</guid>
		<description><![CDATA[So, as part of my build up to my presentation at Skills Matter Progressive NoSQL Tutorials in London on the 9th to 11th May, I&#8217;m breaking down my presentation into a series of blog posts, also thinking this might have give me even more ideas! (Shameless plug over) 1. Don&#8217;t use the Repository pattern This [...]]]></description>
				<content:encoded><![CDATA[<p>So, as part of my build up to my presentation at <a href="http://skillsmatter.com/event/nosql/progressive-nosql-tutorials" target="_blank">Skills Matter Progressive NoSQL Tutorials</a> in London on the 9th to 11th May, I&#8217;m breaking down my presentation into a series of blog posts, also thinking this might have give me even more ideas! (Shameless plug over)</p>
<h3>1. Don&#8217;t use the Repository pattern</h3>
<p>This seems to be quite a common thing with people coming to RavenDB from Entity Framework or NHibernate environments.</p>
<p>I made the mistake of using the Repository pattern with RavenDB and spent many hours reworking my code to remove it.</p>
<p>The blog post linked below sums up perfectly the reasons NOT to use the Repository pattern.</p>
<p><a href="http://novuscraft.com/blog/ravendb-and-the-repository-pattern" target="_blank">http://novuscraft.com/blog/ravendb-and-the-repository-pattern</a></p>
<h3>2. Don&#8217;t abstract Raven for your unit tests.</h3>
<p>This is something I&#8217;ve seen and been asked a lot about, &#8220;How do you Mock RavenDB in your tests?&#8221; they are totally shocked when I say &#8220;I don&#8217;t&#8221;.</p>
<p>Don&#8217;t be afraid to hit the &#8220;database&#8221;.I use the Embedded version for unit tests. Purists will argue these &#8220;unit tests&#8221; become &#8220;integration tests&#8221;. I&#8217;ve not been bothered by &#8220;slowness&#8221;.</p>
<h3>3. Exclude RavenDB NuGet files from version control</h3>
<p>I&#8217;d never heard of excluding NuGet package files when I started out using RavenDB and I wasn&#8217;t that worried as they were reasonably small. Several updates later I regretted that. RavenDB moves quickly and stable builds are every 4-6 weeks so my version control footprint started growing.</p>
<p>I&#8217;d highly recommend turning on the package excluding features of NuGet. (right click your solution in Visual Studio and click &#8220;Enable NuGet Package Restore&#8221; and NuGet will handle the rest, make sure to exclude the packages folder in your version control system of choice)</p>
<h3>4. Use Load&lt;T&gt; over Query&lt;T&gt; when you know the documents Id</h3>
<p>Seems obvious doesn&#8217;t it?</p>
<p>Coming from EF where your code uses FirstOrDefault() for example, you are tempted to use code like:</p>
<p>Query&lt;T, TIndex&gt;(x =&gt; x.Id == &#8220;foos/1&#8243;).First()</p>
<p>But this executes a Query against the index. RavenDB has the notion of Load&lt;T&gt; which fetches the document via a quicker/better approach.</p>
<p>Your code becomes:</p>
<p>Load&lt;T&gt;(&#8220;foos/1&#8243;)</p>
<h3>5. Take(10000) is never a good idea</h3>
<p>A popular topic I see on the RavenDB mailing list is people complaining that RavenDB won&#8217;t return them 10,000 documents in one go! By default, no Take() included in your query will return 128, and the maximum value RavenDB will obey by default is 1024. I use the word obey, as RavenDB will ignore your value if its above the default max value of 1024.</p>
<p>Frankly, if you were doing it in SQL Server (Yes I did), you are doing it wrong.</p>
<p>Use paging to fetch the documents in batches or consider if you really need all the documents back, perhaps you should be using an index to do the work?</p>
<h3>6. Use Tenants, they&#8217;re not scary</h3>
<p>For months I was putting all my data into the default database that RavenDB creates. I hadn&#8217;t bothered to investigate &#8220;tenants&#8221; as they sounded scary and complex.</p>
<p>If like me you are coming from SQL Server or MySQL land, a tenant just means a separate database. Using the default database is like sticking all your tables into the &#8220;master&#8221; database in SQL Server!</p>
<h3>7. Map in indexes != results shape returned</h3>
<p>In my early days of RavenDB, it&#8217;d really confuse me why the Map part of Map/Reduce didn&#8217;t effect the shape of the data returned.</p>
<p>In this thread I posted in my early days I finally learnt that:</p>
<blockquote><p>Map is used to control _searches_, not shape the results.</p></blockquote>
<p>As Ayende put it.</p>
<h3>8. Null Lists</h3>
<p>Something I&#8217;ve never really understood about C# is how you can have an: Null, Empty or Populated List&lt;T&gt; type.</p>
<p>But initialise List&lt;T&gt;&#8217;s in the constructor so you don&#8217;t have to implement nasty code to check for nulls when interacting with documents.</p>
<p>A bit annoying but a useful trick I&#8217;ve found in keeping the repetitive and annoying null handling logic to a minimum.</p>
<h3>9. Read other peoples code, their blogs and watch TekPub/Pluralsight</h3>
<p>A few good sample RavenDB projects to browse through and get ideas:</p>
<p><a href="https://github.com/ravendb/ravendb" target="_blank">RavenDB source</a> (duh)</p>
<p><a href="https://github.com/ayende/RaccoonBlog" target="_blank">RacoonBlog</a></p>
<p><a href="https://github.com/PureKrome/RavenOverflow" target="_blank">RavenOverflow</a></p>
<p>Here are a few blogs to read:</p>
<p><a href="http://ayende.com/blog" target="_blank">Ayende</a> (obviously, duh)</p>
<p><a href="http://www.philliphaydon.com/" target="_blank">Phillip Haydon</a></p>
<p><a href="http://gregorsuttie.com/" target="_blank">Gregor Suttie</a></p>
<p>There are many more but those are in my bookmarks and Google Reader.</p>
<p>TekPub and Pluralsight both have courses on RavenDB that are nice and friendly. My biased opinion is I found the TekPub production more fun and also there is also an interesting Triage episode with Ayende.</p>
<p><a href="http://tekpub.com/" target="_blank">TekPub</a></p>
<p><a href="http://www.pluralsight-training.net" target="_blank">Pluralsight</a></p>
<h3>10. Don&#8217;t be afraid to ask for help</h3>
<p>There are plenty of people out there willing to help you learn. We all had to learn RavenDB and are willing to help!</p>
<p><a href="https://groups.google.com/forum/?fromgroups#!forum/ravendb" target="_blank">The mailing list</a> (The RavenDB team monitors this)</p>
<p>You can also use StackOverflow to ask questions using the RavenDB tag.</p>
<p><a href="http://jabbr.net/#/rooms/RavenDB" target="_blank">The Jabbr chat room</a> (Us cool RavenDB kids hang out here offering help)</p>
<p>If you tweet with the hashtag #RavenDB or mention @RavenDB you&#8217;ll probably get a response too.</p>
<h3>11. SQL Server dread</h3>
<p>Be careful. Ayende has made RavenDB to be highly addictive and once you start using it, you&#8217;re hooked. SQL Server and Entity Framework will fill you with sadness.</p>
<p>Well, maybe not that much but you&#8217;ll start seeing some of the problems with SQL Server and Entity Framework you&#8217;d have just ploughed through or ignored.</p>
<p>I&#8217;ve got a funny story involving a job interview and RavenDB that I&#8217;ll only share over beers.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.orangelightning.co.uk/2012/04/my-10-tips-and-tricks-with-ravendb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple email testing with SMTP SpecifiedPickupDirectory</title>
		<link>http://blog.orangelightning.co.uk/2012/04/simple-email-testing-with-smtp-specifiedpickupdirectory/</link>
		<comments>http://blog.orangelightning.co.uk/2012/04/simple-email-testing-with-smtp-specifiedpickupdirectory/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 13:36:30 +0000</pubDate>
		<dc:creator>phil</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.orangelightning.co.uk/?p=121</guid>
		<description><![CDATA[I often found myself messing around with test email accounts and manually checking these accounts and worrying about sending an actual customer an email. A super simple way to develop an ASP.NET project locally and not even use an actual SMTP server is to take advantage of ASP.NET SMTP&#8217;s &#8220;SpecifiedPickupDirectory&#8221; option. [gist id=2398753] Using this, [...]]]></description>
				<content:encoded><![CDATA[<p>I often found myself messing around with test email accounts and manually checking these accounts and worrying about sending an actual customer an email.</p>
<p>A super simple way to develop an ASP.NET project locally and not even use an actual SMTP server is to take advantage of ASP.NET SMTP&#8217;s &#8220;SpecifiedPickupDirectory&#8221; option.</p>
<p>[gist id=2398753]</p>
<p>Using this, an actual SMTP server isn&#8217;t used and emails are saved to disk which can be opened and viewed using Outlook.</p>
<p><a href="http://blog.orangelightning.co.uk/wp-content/uploads/2012/04/email-temp-folder.png"><img class="alignleft  wp-image-123" title="email temp folder" src="http://blog.orangelightning.co.uk/wp-content/uploads/2012/04/email-temp-folder.png" alt="" width="509" height="396" /></a></p>
<p>Super simple email testing!</p>
<p>Works without an internet connection, no real email accounts needed, no worry about sending actual emails to customers!</p>
<p>When pushing or deploying, use a Web.config transformation to replace the testing SMTP section with actual production values.</p>
<p>Kudos to @swaj who wrote the excellent Nuget package <a href="https://bitbucket.org/swaj/actionmailer.net/wiki/Home" title="ActionMailer" target="_blank">ActionMailer</a> and first showed me this technique. By the way, ActionMailer is awesome as you can use the Razor engine and views to make your email templates!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.orangelightning.co.uk/2012/04/simple-email-testing-with-smtp-specifiedpickupdirectory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RavenDB: Deleting all documents</title>
		<link>http://blog.orangelightning.co.uk/2012/02/ravendb-deleting-all-documents/</link>
		<comments>http://blog.orangelightning.co.uk/2012/02/ravendb-deleting-all-documents/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 12:04:46 +0000</pubDate>
		<dc:creator>phil</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[RavenDB]]></category>

		<guid isPermaLink="false">http://blog.orangelightning.co.uk/?p=105</guid>
		<description><![CDATA[I often see people ask &#8220;how can I delete all documents?&#8221; or &#8220;how can I delete all documents of type Foo?&#8221; this post is mainly so I can paste a link to it for those who keep asking me. Use the RavenDB Management studio: Deleting a whole collection: Introduced in the newer versions of RavenDB, [...]]]></description>
				<content:encoded><![CDATA[<p>I often see people ask &#8220;how can I delete all documents?&#8221; or &#8220;how can I delete all documents of type Foo?&#8221; this post is mainly so I can paste a link to it for those who keep asking me.</p>
<h3><strong>Use the RavenDB Management studio:</strong></h3>
<h4><span style="text-decoration: underline;">Deleting a whole collection:</span></h4>
<p>Introduced in the newer versions of RavenDB, a little right click feature allows you to quickly delete all the documents in a collection.</p>
<p><a href="http://blog.orangelightning.co.uk/wp-content/uploads/2012/02/ravendb-delete-collection.jpg"><img class="alignleft size-full wp-image-106" title="ravendb delete a whole collection" src="http://blog.orangelightning.co.uk/wp-content/uploads/2012/02/ravendb-delete-collection.jpg" alt="ravendb delete a whole collection" width="548" height="123" /></a></p>
<h4><span style="text-decoration: underline;">Deleting multiple documents:</span></h4>
<p>You can highlight multiple documents as you would files in Windows Explorer and select delete.<br />
<a href="http://blog.orangelightning.co.uk/wp-content/uploads/2012/02/ravendb-delete-multiple-documents.jpg"><img class="alignleft  wp-image-107" title="ravendb delete multiple documents" src="http://blog.orangelightning.co.uk/wp-content/uploads/2012/02/ravendb-delete-multiple-documents.jpg" alt="ravendb delete multiple documents" width="545" height="195" /></a></p>
<h4><span style="text-decoration: underline;">Delete the Hilo document:</span></h4>
<p>After deleting a collection the &#8220;hilo&#8221; document still exists, this controls the ID for that type of document, so if you want to say add new documents and have the ID&#8217;s start at 1, delete this document. You can do it quickly via the &#8220;edit document by ID&#8221;.</p>
<p><a href="http://blog.orangelightning.co.uk/wp-content/uploads/2012/02/ravendb-delete-the-hilo.jpg"><img class="alignleft size-full wp-image-108" title="ravendb delete the hilo document" src="http://blog.orangelightning.co.uk/wp-content/uploads/2012/02/ravendb-delete-the-hilo.jpg" alt="ravendb delete the hilo document" width="509" height="191" /></a></p>
<h3><strong>Using C#:</strong></h3>
<p>If you find yourself having to repeatedly delete collections for testing, often the best approach is to automate this task. You can use the &#8220;DeleteByIndex&#8221; feature to use an index and query to select the documents to delete.</p>
<p>For example, if I wanted to use an index to delete all my &#8220;enquiry&#8221; type documents:</p>
<p>[gist id=1868911]</p>
<p>and to also delete the Hilo document so ID numbering resets:</p>
<p>[gist id=1868915]</p>
<h3><strong>Delete everything</strong>:</h3>
<p>If you want to wipe all your RavenDB data you can just delete the data folder.</p>
<p>If you want to keep deleting it for testing, consider running RavenDB in memory mode, then you just have to enter the reset command and all the data is wiped as you are only storing it in memory.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.orangelightning.co.uk/2012/02/ravendb-deleting-all-documents/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AppHarbor&#8217;s new pricing, a possible startup opportunity?</title>
		<link>http://blog.orangelightning.co.uk/2012/02/appharbors-new-pricing-a-possible-startup-opportunity/</link>
		<comments>http://blog.orangelightning.co.uk/2012/02/appharbors-new-pricing-a-possible-startup-opportunity/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 10:33:46 +0000</pubDate>
		<dc:creator>phil</dc:creator>
				<category><![CDATA[AppHarbor]]></category>
		<category><![CDATA[Cloud]]></category>

		<guid isPermaLink="false">http://blog.orangelightning.co.uk/?p=94</guid>
		<description><![CDATA[In my two previous blog posts on AppHarbor, I&#8217;ve whined about them not supporting or caring about a few particular scenarios. These scenarios mainly fall into the &#8220;I love AppHarbors features but my site is small/low traffic/doesn&#8217;t make money&#8221; and this got me thinking. There are now going to be lots of grumpy .NET developers [...]]]></description>
				<content:encoded><![CDATA[<p>In my two previous blog posts on AppHarbor, I&#8217;ve whined about them not supporting or caring about a few particular scenarios. These scenarios mainly fall into the &#8220;I love AppHarbors features but my site is small/low traffic/doesn&#8217;t make money&#8221; and this got me thinking.</p>
<p>There are now going to be lots of grumpy .NET developers looking for an alternative with roughly the same features but for less money. Perhaps a startup opportunity just arrived, build a solution to cater for that market. Sure not as profitable as going after the bigger websites but I suspect the market is large enough if done correctly it could make a little bit of cash.</p>
<p>AppHarbor responded to my last few blog posts with this:</p>
<blockquote><p>We also want to make sure that people trying out AppHarbor on the free plan get full and un-filtered access to what we think are the most important parts of the AppHarbor value proposition: Convinient and quick deployments from source control and fast and reliable hosting. Those are things we will never compromise on.</p></blockquote>
<p>That statement seems good for customers but as a super small website looking at AppHarbor, having more power, bandwidth and space than I need seems a waste for both of us.</p>
<p><span style="text-decoration: underline;"><strong>Option 1, a PaaS:</strong></span></p>
<p>What the solution needs to be a MVP:</p>
<ul>
<li>Git push to deployment. I think BitBucket/GitHub could be done later, this is the minimum.</li>
<li>Decent uptime.</li>
<li>Custom domains.</li>
<li>Sleek setup and control panel.</li>
</ul>
<p>Things small sites like the ones I would want to host, don&#8217;t really care about:</p>
<ul>
<li>Load balancing, most likely one instances/worker anyway.</li>
<li>Scaling. I would pitch this solution as the baby brother of AppHarbor. Need scaling/more power? move to AppHarbor.</li>
<li>Test running. Its a nice to have but I think people to live without this for the short term.</li>
<li>SSL. Personally for my small projects I don&#8217;t need it.</li>
<li>Addons. For small projects other than perhaps more database space I don&#8217;t see the need.</li>
</ul>
<p>Initial pricing ideas would be to compete with shared hosting but remove the hassle of manual deployment and management.</p>
<ul>
<li>Free. Very, very limited bandwidth.</li>
<li>Paid. Limited bandwidth (1GB). $1/month.</li>
<li>Additional bandwidth $0.50/GB/month.</li>
</ul>
<p>The aim would be for people to not over think going to a paid account. $1 a month, $12 a year? A better deal that bothering with shared hosting. I think it would be good to offer multi discounts, kind of like buy 2 get 1 free or discount multiple apps to make it viable for multiple app scenarios where someone is working on several side projects.</p>
<p>Something I haven&#8217;t seen with AppHarbor is the idea of referrals, perhaps a month free if you refer someone and they start paying. A good way to build a community.</p>
<p>Databases (SQL Server):</p>
<ul>
<li>Free. 5MB space.</li>
<li>Paid. $1/100MB/month. $0.25/100MB/month after 1GB.</li>
</ul>
<p>Most of my small projects don&#8217;t actually use a database or just use an in memory database that doesn&#8217;t need persistence.</p>
<p><span style="text-decoration: underline;"><strong>Option 2, standalone software:</strong></span></p>
<p>Whilst looking at alternatives for all my little side projects (6x$10 = $60) a VPS starts to become  much cheaper, but I want some of the AppHarbor features.</p>
<p>What about producing a product that people could install to their Windows VPS that lets you push your projects to it and it handles the build, testing and deployment?</p>
<p>This could either be a OSS project or a commercial one. I would defiantly pay a license fee to have that software. Especially for those clients that cannot be moved to the cloud easily as it sucks having to use other methods to update their websites.</p>
<p><span style="text-decoration: underline;"><strong>Conclusion:</strong></span></p>
<p>Anyone feel free to use these ideas. I want either solution to let me still enjoy the features of AppHarbor for my smaller projects. Else its goodbye .NET and hello other providers like Heroku.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.orangelightning.co.uk/2012/02/appharbors-new-pricing-a-possible-startup-opportunity/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
