<?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>Think Programming</title>
	<atom:link href="https://www.thinkprogramming.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.thinkprogramming.co.uk</link>
	<description>Thoughts on Software</description>
	<lastBuildDate>Wed, 03 Nov 2021 00:12:45 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.8.28</generator>
	<item>
		<title>Search via querystring with Sveltekit</title>
		<link>https://www.thinkprogramming.co.uk/search-via-querystring-sveltekit/</link>
		<comments>https://www.thinkprogramming.co.uk/search-via-querystring-sveltekit/#respond</comments>
		<pubDate>Wed, 03 Nov 2021 00:12:45 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[svelte]]></category>
		<category><![CDATA[sveltekit]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=953</guid>
		<description><![CDATA[<p>Today, I want to go through how you can implement a search page that reacts to changes to the url with sveltekit. Reacting to URL change rather than another event such as a form submit keeps implementation simple as the <code>load</code> event becomes the main driver for the search behaviour.</p>
<p><span id="more-953"></span></p>
<h2>Getting Started</h2>
<p>First&#8217;s things first, follow the <a href="https://kit.svelte.dev/docs#introduction-getting-started">Getting started for sveltekit to create a blank app</a>.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/search-via-querystring-sveltekit/">Search via querystring with Sveltekit</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/search-via-querystring-sveltekit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Things to Consider When Exploring Solutions</title>
		<link>https://www.thinkprogramming.co.uk/things-consider-exploring-solutions/</link>
		<comments>https://www.thinkprogramming.co.uk/things-consider-exploring-solutions/#respond</comments>
		<pubDate>Tue, 06 Apr 2021 23:01:38 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[General Programming]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=907</guid>
		<description><![CDATA[<p>Apart from writing code, driving architecture and designing/re-designing solutions; one of the most common activity for Software Developers is exploring a myriad of possible solutions to roll out a feature or improve an existing one.</p>
<p>When considering a particular problem being solved for a stakeholder, it&#8217;s always important to consider multiple ways of approaching the problem.</p>
<p>Here are the main things that I consider when making a decision as to which approach should be taken.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/things-consider-exploring-solutions/">Things to Consider When Exploring Solutions</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/things-consider-exploring-solutions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What Is Good API Design?</title>
		<link>https://www.thinkprogramming.co.uk/good-api-design/</link>
		<comments>https://www.thinkprogramming.co.uk/good-api-design/#respond</comments>
		<pubDate>Tue, 29 Dec 2020 18:20:26 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=366</guid>
		<description><![CDATA[<p>As Developers, we build API&#8217;s regardless if we intentionally designed them or not &#8211; it could be some form of abstraction for data persistence, how you invoke talking to another service that you have internally within your organisation etc.</p>
<p>If we were trying to intentionally try to design a good API, first, we should probably understand what makes a good API &#8211; or probably a better start, what is an API anyway?</p>
<p><span id="more-366"></span></p>
<blockquote>
<p>
  When it comes to software,</p>
</blockquote>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/good-api-design/">What Is Good API Design?</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/good-api-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing Predicate Parser For Search in C# with Antlr 4 – Part Two</title>
		<link>https://www.thinkprogramming.co.uk/writing-predicate-parser-for-search-in-csharp-with-antlr-4-part-two/</link>
		<comments>https://www.thinkprogramming.co.uk/writing-predicate-parser-for-search-in-csharp-with-antlr-4-part-two/#respond</comments>
		<pubDate>Tue, 26 May 2020 14:56:56 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Core]]></category>
		<category><![CDATA[Antlr]]></category>
		<category><![CDATA[Antlr4]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Elasticsearch]]></category>
		<category><![CDATA[Parser]]></category>
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=842</guid>
		<description><![CDATA[<p>Continuing from the <a href="/writing-predicate-dsl-parser-in-csharp-and-antlr-4">previous part, where we&#8217;ve written and tested our parser using Antlr 4</a> &#8211; let&#8217;s now generate a <code>C#</code> parser, and hook it up to search an <code>elasticsearch</code> index.</p>
<p><span id="more-842"></span></p>
<h2>Building the C# Parser</h2>
<pre><code class="language-bash">antlr4 -Dlanguage=CSharp -o Generated Predicate.g4 -no-listener -visitor
</code></pre>
<p>You will need to include <a href="https://www.nuget.org/packages/Antlr4.Runtime.Standard">Antlr4.Runtime.Standard</a> as a dependency to use the generated <code>C#</code> code.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/writing-predicate-parser-for-search-in-csharp-with-antlr-4-part-two/">Writing Predicate Parser For Search in C# with Antlr 4 – Part Two</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/writing-predicate-parser-for-search-in-csharp-with-antlr-4-part-two/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing Predicate Parser For Search in C# with Antlr 4 &#8211; Part One</title>
		<link>https://www.thinkprogramming.co.uk/writing-predicate-parser-for-search-in-csharp-with-antlr4/</link>
		<comments>https://www.thinkprogramming.co.uk/writing-predicate-parser-for-search-in-csharp-with-antlr4/#respond</comments>
		<pubDate>Tue, 03 Mar 2020 20:17:02 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Core]]></category>
		<category><![CDATA[Antlr]]></category>
		<category><![CDATA[Antlr4]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Parser]]></category>
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=785</guid>
		<description><![CDATA[<p>For some products, having your own language that your customers can use to be productive, or make your product that much more powerful, is a Domain Specific Language. Think Atlassian&#8217;s Jira Query Language, Github&#8217;s filter feature etc.</p>
<p><span id="more-785"></span></p>
<p>Why not hand-roll your own parser? &#8211; well, in 99% of cases, you wouldn&#8217;t really need the extra granular control to squeeze out every bit of performance out of a parser, or nor will you need extra features that Antlr would not be able to provide &#8211;</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/writing-predicate-parser-for-search-in-csharp-with-antlr4/">Writing Predicate Parser For Search in C# with Antlr 4 &#8211; Part One</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/writing-predicate-parser-for-search-in-csharp-with-antlr4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Distributed Systems : Messaging Strategies Part One</title>
		<link>https://www.thinkprogramming.co.uk/distributed-systems-messaging-strategies-1/</link>
		<comments>https://www.thinkprogramming.co.uk/distributed-systems-messaging-strategies-1/#respond</comments>
		<pubDate>Tue, 07 May 2019 23:09:51 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Distributed Systems]]></category>
		<category><![CDATA[Microservice]]></category>
		<category><![CDATA[Software Design]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=687</guid>
		<description><![CDATA[<p>So &#8211; after quite some time working with distributed systems, I want to share the decisions made throughout as you build an event-based distributed system.</p>
<p>I want to share some of the things that I&#8217;ve noticed, and my thoughts in general in these different approaches &#8211; what they look like, pros and cons etc.</p>
<p><span id="more-687"></span></p>
<h2>Command vs Event</h2>
<p>First things first &#8211; <strong>Command</strong> and <strong>Event</strong> are two distinct things &#8211;</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/distributed-systems-messaging-strategies-1/">Distributed Systems : Messaging Strategies Part One</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/distributed-systems-messaging-strategies-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Containerised Deployments For Hobby Projects</title>
		<link>https://www.thinkprogramming.co.uk/simple-containerised-deployments-for-hobby-projects/</link>
		<comments>https://www.thinkprogramming.co.uk/simple-containerised-deployments-for-hobby-projects/#respond</comments>
		<pubDate>Mon, 01 Apr 2019 22:36:25 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[General Programming]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[How-to]]></category>
		<category><![CDATA[Ops]]></category>
		<category><![CDATA[Server Admin]]></category>
		<category><![CDATA[Side Project]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=692</guid>
		<description><![CDATA[<p>At work, we deploy all applications as Docker containers via Kubernetes &#8211; I really like this way of delivering applications, running on one machine means it will work the same way (in theory) as in another machine. Why not do the same for my Hobby projects albeit a much more simplified way.</p>
<p>So, this weekend, I made my first attempt &#8211; what I wanted to achieve is a proof of concept, <code>.NET Core</code> app talking to <code>MySQL</code>,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/simple-containerised-deployments-for-hobby-projects/">Simple Containerised Deployments For Hobby Projects</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/simple-containerised-deployments-for-hobby-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inline Errors with  React.js and ASP.NET Model State</title>
		<link>https://www.thinkprogramming.co.uk/inline-errors-with-aspnet-model-state-errors-and-react-js/</link>
		<comments>https://www.thinkprogramming.co.uk/inline-errors-with-aspnet-model-state-errors-and-react-js/#respond</comments>
		<pubDate>Fri, 08 Mar 2019 22:38:57 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ASP.NET Core]]></category>
		<category><![CDATA[How-to]]></category>
		<category><![CDATA[React]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=662</guid>
		<description><![CDATA[<p>For one of my hobby projects, a server-side rendered <a href="https://reactjs.org/">React.js</a> app using <a href="https://nextjs.org/">nextjs</a> with <a href="https://docs.microsoft.com/en-us/aspnet/core/?view=aspnetcore-2.2">asp.net core 2.2</a> serving the web API, I&#8217;ve made a conscious decision to keep all validation server-side only to reduce the effort required on the front-end side.</p>
<p>As for SPA being used for a hobby project, it&#8217;s great for learning, but not so much for speedy development&#8230; when will I ever learn &#8211;</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/inline-errors-with-aspnet-model-state-errors-and-react-js/">Inline Errors with  React.js and ASP.NET Model State</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/inline-errors-with-aspnet-model-state-errors-and-react-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>API Pagination Problem</title>
		<link>https://www.thinkprogramming.co.uk/api-pagination-problem/</link>
		<comments>https://www.thinkprogramming.co.uk/api-pagination-problem/#respond</comments>
		<pubDate>Tue, 26 Feb 2019 21:42:45 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[General Programming]]></category>
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=549</guid>
		<description><![CDATA[<p>When we think of pagination &#8211; we think <code>SELECT * FROM MYTABLE LIMIT {skip}, {take}</code> &#8211; ahhhhhh&#8230; ignorance is bliss.</p>
<p>Let&#8217;s go through some of the  ways we expose pagination through a Web API and dig a little deeper.</p>
<p><img src="https://media.giphy.com/media/l0HlRnAWXxn0MhKLK/giphy.gif" alt="" /></p>
<p><span id="more-549"></span></p>
<h2>Standard Pagination</h2>
<p>This is probably the most common type of pagination you&#8217;ll see with majority of Web API&#8217;s. You know, <code>{baseUrl}?p=1</code>,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/api-pagination-problem/">API Pagination Problem</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/api-pagination-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Me, Then And Now: Software Estimates</title>
		<link>https://www.thinkprogramming.co.uk/now-software-estimates/</link>
		<comments>https://www.thinkprogramming.co.uk/now-software-estimates/#respond</comments>
		<pubDate>Sat, 24 Nov 2018 22:48:28 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[General Programming]]></category>
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=575</guid>
		<description><![CDATA[<p>Over the last few years, my beliefs in how I Software should be built have changed quite dramatically. There were some years when I spent a majority of my time thinking about the solution and not enough time understanding the problem. I had some years thinking that I don&#8217;t know anything, to &#8220;I know everything&#8221; and everything else in between.</p>
<p>Today, I wanted to reflect on my view of Software Delivery estimates, and how my view has changed over the years.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/now-software-estimates/">Me, Then And Now: Software Estimates</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/now-software-estimates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>StructureMap &#8211; Transient &#038; AlwaysUnique Behaving as Singleton</title>
		<link>https://www.thinkprogramming.co.uk/structuremap-transientalwaysunique-behaving-singleton/</link>
		<comments>https://www.thinkprogramming.co.uk/structuremap-transientalwaysunique-behaving-singleton/#respond</comments>
		<pubDate>Mon, 22 Oct 2018 19:08:43 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ASP.NET Core]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Dependency Injection]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[StructureMap]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=558</guid>
		<description><![CDATA[<p>One of the things to watch out for when working with DI Containers is being aware of the Dependency Graph. One of the more dangerous types is where you expect a particular object to exist once during an entire HTTP Request lifecycle, but it starts behaving like a singleton.</p>
<p><span id="more-558"></span></p>
<p>Unfortunately, this is probably means, you have a broken dependency graph, as explained by <a href="http://blog.ploeh.dk/2014/06/02/captive-dependency/">Mark Seeman in his write-up of Captive Dependency</a>.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/structuremap-transientalwaysunique-behaving-singleton/">StructureMap &#8211; Transient &#038; AlwaysUnique Behaving as Singleton</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/structuremap-transientalwaysunique-behaving-singleton/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CS101: Big-O and How it&#8217;s Relevant</title>
		<link>https://www.thinkprogramming.co.uk/cs101-big-o-and-how-its-relevant/</link>
		<comments>https://www.thinkprogramming.co.uk/cs101-big-o-and-how-its-relevant/#respond</comments>
		<pubDate>Mon, 20 Aug 2018 22:21:54 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[General Programming]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=416</guid>
		<description><![CDATA[<p>Big-O is a way of expressing time and space complexity of an algorithm. Complexity is the rate of growth given variable inputs. Complexity is implicitly expressed in worst-case unless otherwise stated.</p>
<p>For example:</p>
<pre><code class="language-javascript">function printArray(n) {
  for(var i = 0; i &#60; n.length; i++) {
    console.log(n[i])
  }
}
</code></pre>
<p><code>printArray</code> in this instance is <code></code> time complexity and <code></code> space complexity.</p>
<p><span id="more-416"></span></p>
<p>We&#8217;ve derived this by observing the loop <code>for(var i = 0;</code></p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/cs101-big-o-and-how-its-relevant/">CS101: Big-O and How it&#8217;s Relevant</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/cs101-big-o-and-how-its-relevant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Node.js Isn&#8217;t The Solution You&#8217;re Looking For</title>
		<link>https://www.thinkprogramming.co.uk/node-js-isnt-the-solution-youre-looking-for/</link>
		<comments>https://www.thinkprogramming.co.uk/node-js-isnt-the-solution-youre-looking-for/#respond</comments>
		<pubDate>Sun, 01 Jul 2018 23:44:57 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[General Programming]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=395</guid>
		<description><![CDATA[<p><code>node.js</code>&#8216;s popularity isn&#8217;t without it&#8217;s reasons. node.js is lightweight, it&#8217;s mature and it has enough packages in the <code>npm</code> repository to make you start wondering if you&#8217;ll ever learn enough tools to become a half decent developer.</p>
<p>If you know JavaScript, you just need to know a bit about the <code>node.js</code> event loop and the <code>node.js</code> standard library and maybe <code>express</code> and you&#8217;re pretty much a decent <code>node.js</code> developer.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/node-js-isnt-the-solution-youre-looking-for/">Node.js Isn&#8217;t The Solution You&#8217;re Looking For</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/node-js-isnt-the-solution-youre-looking-for/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Your Application Isn&#8217;t Your Domain</title>
		<link>https://www.thinkprogramming.co.uk/your-application-isnt-your-domain/</link>
		<comments>https://www.thinkprogramming.co.uk/your-application-isnt-your-domain/#respond</comments>
		<pubDate>Sat, 30 Jun 2018 22:09:44 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[General Programming]]></category>
		<category><![CDATA[Microservice]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=387</guid>
		<description><![CDATA[<p>When laying out your solution, it&#8217;s important to have a clear separation between your application and your domain. In most areas that I see, the application is either a Web API or a web application.</p>
<p>What does this actually mean?</p>
<p><span id="more-387"></span></p>
<h2>Why you want to keep it this way</h2>
<p>First rule of the SOLID principle, Single Responsiblity &#8211; one of the best ways of getting your code in a mess is mixing responsibilities.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/your-application-isnt-your-domain/">Your Application Isn&#8217;t Your Domain</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/your-application-isnt-your-domain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Isn&#8217;t Everything</title>
		<link>https://www.thinkprogramming.co.uk/code-isnt-everything/</link>
		<comments>https://www.thinkprogramming.co.uk/code-isnt-everything/#respond</comments>
		<pubDate>Mon, 18 Jun 2018 19:14:00 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[General Programming]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=381</guid>
		<description><![CDATA[<p>During the earlier years of programming, you may think that coding is the most significant part of writing software. Fast-forward to the future, you realise that code isn&#8217;t the main problem. It&#8217;s the things that happen before and in-between writing code &#8211; solving the problem at hand.</p>
<p><span id="more-381"></span></p>
<p>Many attempts have been made to try and make programming &#8220;easier&#8221;, and I&#8217;m not going to say it&#8217;s a wasted effort, but the state that programming languages are now,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/code-isnt-everything/">Code Isn&#8217;t Everything</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/code-isnt-everything/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From Shared Hosting to Linode</title>
		<link>https://www.thinkprogramming.co.uk/from-shared-hosting-to-linode/</link>
		<comments>https://www.thinkprogramming.co.uk/from-shared-hosting-to-linode/#respond</comments>
		<pubDate>Sun, 29 Apr 2018 17:05:34 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[General Programming]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Server Admin]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=328</guid>
		<description><![CDATA[<p>So, it&#8217;s finally happened. I&#8217;ve decided to move my blog onto linode to check what all the fuss was about with their $5/month offering. I&#8217;ve been quite curious as to how much performance I can get for $5, my current shared hosting solution with tsohost is OK, but it&#8217;s not great&#8230;</p>
<p>For $5/month, you get 1GB RAM and 1 Core CPU (whatever that means). What does that really mean for us, coming from shared hosting?</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/from-shared-hosting-to-linode/">From Shared Hosting to Linode</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/from-shared-hosting-to-linode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shipping Side Projects Become More Challenging As We Get Better</title>
		<link>https://www.thinkprogramming.co.uk/shipping-side-projects-become-more-challenging-as-we-get-better/</link>
		<comments>https://www.thinkprogramming.co.uk/shipping-side-projects-become-more-challenging-as-we-get-better/#respond</comments>
		<pubDate>Thu, 22 Feb 2018 23:38:13 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[General Programming]]></category>
		<category><![CDATA[Side Project]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=243</guid>
		<description><![CDATA[<p>I remember when I was naive, young programmer,  a side project would go something like this &#8211; I would set myself a goal to get a login and register screen that, as you guess, allowed a user to log in and register. This would take me about a day to do, maybe less. These were the days when the goal wasn&#8217;t for later use, because more likely than not, I won&#8217;t have to keep maintaining the code that I&#8217;ve written for longer than a few weeks at most,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/shipping-side-projects-become-more-challenging-as-we-get-better/">Shipping Side Projects Become More Challenging As We Get Better</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/shipping-side-projects-become-more-challenging-as-we-get-better/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>We&#8217;re No Savant</title>
		<link>https://www.thinkprogramming.co.uk/were-no-savant/</link>
		<comments>https://www.thinkprogramming.co.uk/were-no-savant/#respond</comments>
		<pubDate>Wed, 10 Jan 2018 20:41:33 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[General Programming]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=229</guid>
		<description><![CDATA[<p>This year, I&#8217;ve decided to keep track of my thoughts, learnings and progress a bit more &#8211; I&#8217;ve decided to take note taking a bit more seriously. I feel that we lose a lot of knowledge over time, maybe not the big picture, but we definitely forget the important finer details.</p>
<p><span id="more-229"></span></p>
<p>I&#8217;ve kept a lot of snippets of code and notes here and there using <a href="gist.github.com/andy-williams/"><code>gist</code></a>,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/were-no-savant/">We&#8217;re No Savant</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/were-no-savant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pragmatic Programmers &#8211; Controversial Opinions</title>
		<link>https://www.thinkprogramming.co.uk/pragmatic-programmers-controversial-opinions/</link>
		<comments>https://www.thinkprogramming.co.uk/pragmatic-programmers-controversial-opinions/#respond</comments>
		<pubDate>Sat, 30 Sep 2017 23:06:08 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[General Programming]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=201</guid>
		<description><![CDATA[<p>Quite some time ago, <a href="https://stackoverflow.com/questions/406760/whats-your-most-controversial-programming-opinion">I&#8217;ve come across a question in stackoverflow by Jon Skeet</a>.</p>
<blockquote>
<p>
  What&#8217;s your most controversial programming opinion?<br />
  <cite><a href="https://stackoverflow.com/users/22656/jon-skeet">Jon Skeet</a></cite>
</p>
</blockquote>
<p>As Developer&#8217;s, there comes a point in our life where we start questioning a bit more, and you realise &#8211; these things that these guides and principles that we&#8217;ve been taught doesn&#8217;t quite work for our problems &#8211; this is an awesome moment,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/pragmatic-programmers-controversial-opinions/">Pragmatic Programmers &#8211; Controversial Opinions</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/pragmatic-programmers-controversial-opinions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET Core Action Filters, Exception Filters and Dependency Injection</title>
		<link>https://www.thinkprogramming.co.uk/aspnet-core-action-filters-exception-filters-and-dependency-injection/</link>
		<comments>https://www.thinkprogramming.co.uk/aspnet-core-action-filters-exception-filters-and-dependency-injection/#respond</comments>
		<pubDate>Wed, 06 Sep 2017 22:30:08 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Core]]></category>
		<category><![CDATA[ASP.NET Core]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=190</guid>
		<description><![CDATA[<p>There are times when we want to be able to consistently add a behaviour across our <code>ASP.NET Core</code> app that doesn&#8217;t quite belong in application logic &#8211; a classic example is timing how long a request takes. This is where Filters come in (or Middleware, but that&#8217;s for another post).</p>
<p><span id="more-190"></span></p>
<p>Filters allow us to take certain actions before and after execution of a controller action. Filters also give us a <code>Context</code> object detailing things about the request and the current response.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/aspnet-core-action-filters-exception-filters-and-dependency-injection/">ASP.NET Core Action Filters, Exception Filters and Dependency Injection</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/aspnet-core-action-filters-exception-filters-and-dependency-injection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Poor Mans Search Solution with MySQL</title>
		<link>https://www.thinkprogramming.co.uk/the-poor-mans-search-solution-with-mysql/</link>
		<comments>https://www.thinkprogramming.co.uk/the-poor-mans-search-solution-with-mysql/#respond</comments>
		<pubDate>Wed, 30 Aug 2017 16:27:32 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Search]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Dapper]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=149</guid>
		<description><![CDATA[<p>Sometimes, there are cases when we need a Search Solution for a hobby project but don&#8217;t want to spend extra time and money in having a <code>Lucene</code> or some other form of abstraction of <code>Lucene</code>, such as <code>Solr</code> or <code>ElasticSearch</code>. If you&#8217;re working with <code>MySQL</code> (or even better, with <code>Postgres</code>), then you&#8217;re in luck &#8211; there&#8217;s a way to have a quick and dirty search solution for your dear project.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/the-poor-mans-search-solution-with-mysql/">The Poor Mans Search Solution with MySQL</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/the-poor-mans-search-solution-with-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why I Moved Back To WordPress From Jekyll</title>
		<link>https://www.thinkprogramming.co.uk/why-i-moved-back-wordpress-from-jekyll/</link>
		<comments>https://www.thinkprogramming.co.uk/why-i-moved-back-wordpress-from-jekyll/#respond</comments>
		<pubDate>Mon, 14 Aug 2017 22:25:36 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[jekyll]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">https://www.thinkprogramming.co.uk/?p=127</guid>
		<description><![CDATA[<p>So here are&#8230; I&#8217;ve redone my blog yet again. I&#8217;ve been moving to different platforms over the past several years, I&#8217;ve tried WordPress, Umbraco, Ghost and Jekyll, but seems that I have to settle with WordPress for now.</p>
<p>Jekyll has actually been great for what it was, it was simple, you created your template files, standards css and js &#8211; you know, the normal front-end setup, and it worked beautifully.</p>
<p>The thing that made Jekyll stand out for me was the performance,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/why-i-moved-back-wordpress-from-jekyll/">Why I Moved Back To WordPress From Jekyll</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/why-i-moved-back-wordpress-from-jekyll/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why We Accumulate Technical Debt</title>
		<link>https://www.thinkprogramming.co.uk/why-we-accumulate-technical-debt/</link>
		<comments>https://www.thinkprogramming.co.uk/why-we-accumulate-technical-debt/#respond</comments>
		<pubDate>Mon, 12 Jun 2017 22:12:09 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[General Programming]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Technical Debt]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=79</guid>
		<description><![CDATA[<p>Everyone eventually rewrites either a small piece of code, an entire application or framework or refactor their work, and this process is in a constant cycle. You notice this everywhere, from small applications, libraries, frameworks and even Enterprise Software. Should we be concerned? Why is this such a common theme?</p>
<p>For Applications, one of the primary reasons for refactoring or rewriting is technical debt, so let&#8217;s have a look at some common reasons for technical debt,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/why-we-accumulate-technical-debt/">Why We Accumulate Technical Debt</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/why-we-accumulate-technical-debt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fundamental Problems With Concurrency : Race Conditions</title>
		<link>https://www.thinkprogramming.co.uk/fundamental-problems-with-concurrency-race-conditions/</link>
		<comments>https://www.thinkprogramming.co.uk/fundamental-problems-with-concurrency-race-conditions/#respond</comments>
		<pubDate>Tue, 16 May 2017 22:11:42 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=77</guid>
		<description><![CDATA[<p>The concept of concurrency is not an easy concept to grasp, when dealing with concurrency &#8211; the main enemy when doing any task in parallel are shared resources. This is why functional programming as a concept has gotten a lot of attention due to it&#8217;s potential in this modern age where there is an abundant amount of CPU core&#8217;s, making it much more scalable for parallel computing.</p>
<p>What about the <code>Object Oriented Approach</code>?</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/fundamental-problems-with-concurrency-race-conditions/">Fundamental Problems With Concurrency : Race Conditions</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/fundamental-problems-with-concurrency-race-conditions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Image Manipulation, Streams and Denial of Service</title>
		<link>https://www.thinkprogramming.co.uk/image-manipulation-streams-and-denial-of-service/</link>
		<comments>https://www.thinkprogramming.co.uk/image-manipulation-streams-and-denial-of-service/#respond</comments>
		<pubDate>Fri, 24 Mar 2017 22:11:00 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Perf]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=75</guid>
		<description><![CDATA[<p>So, you have some type of application that does simple image manipulation &#8211; in most web applications case, resizing. You use some library, you construct an object with the image binary as a stream, and <strong>it does some wizardry magic and poof, you&#8217;ve just resized the image</strong> and stored it in a file in an image format of your choosing.</p>
<p>But wait &#8211; <strong>some image formats aren&#8217;t that trivial</strong>.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/image-manipulation-streams-and-denial-of-service/">Image Manipulation, Streams and Denial of Service</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/image-manipulation-streams-and-denial-of-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Concurrency with HttpClient</title>
		<link>https://www.thinkprogramming.co.uk/concurrency-with-httpclient/</link>
		<comments>https://www.thinkprogramming.co.uk/concurrency-with-httpclient/#respond</comments>
		<pubDate>Sun, 12 Feb 2017 22:09:37 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=72</guid>
		<description><![CDATA[<p>I&#8217;ve recently been heavily involved in moving towards a Service Oriented Architecture &#8211; and the most common form of Transport / Network Protocol used is of course, <code>HTTP</code> due to tooling and statelessness.</p>
<p><code>HttpClient</code> is well known for being thread safe. Infact, it is very much encouraged to instantiate a <code>HttpClient</code> object and keep it in memory for as long as you need, this avoids the extra cost needed for reconstructing the object.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/concurrency-with-httpclient/">Concurrency with HttpClient</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/concurrency-with-httpclient/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bad Abstractions</title>
		<link>https://www.thinkprogramming.co.uk/bad-abstractions/</link>
		<comments>https://www.thinkprogramming.co.uk/bad-abstractions/#respond</comments>
		<pubDate>Sun, 22 Jan 2017 22:07:47 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[General Programming]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=67</guid>
		<description><![CDATA[<blockquote>
<p>
  The process of taking away or removing characteristics from something in order to reduce it to a set of essential characteristics
</p>
</blockquote>
<p>The idea behind abstraction is to hide complexity &#8211; we try to hide away all the complex details. For example, you may want to persist some type of data &#8211; that&#8217;s the <strong>high level view of what we want to be able to do</strong>. Whether we&#8217;re storing that in a text file,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/bad-abstractions/">Bad Abstractions</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/bad-abstractions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Youtube Channels for Developers</title>
		<link>https://www.thinkprogramming.co.uk/youtube-channels-for-developers/</link>
		<comments>https://www.thinkprogramming.co.uk/youtube-channels-for-developers/#respond</comments>
		<pubDate>Mon, 12 Dec 2016 22:08:35 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[General Programming]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=70</guid>
		<description><![CDATA[<p>Throughout the years, I have learned a lot from free online video&#8217;s, so, I thought I&#8217;d share some of the channels that I&#8217;m subscribed to on Youtube in the hope&#8217;s that someone finds them useful as much as I have.</p>
<p><span id="more-70"></span></p>
<h2><a href="https://www.youtube.com/user/MarakanaTechTV">NewCircle Training</a></h2>
<p>NewCircle Training channel has a lot of talks around JavaScript, but more importantly, the talks are very relevant to the current state of Applications today.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/youtube-channels-for-developers/">Youtube Channels for Developers</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/youtube-channels-for-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Functional Code : Focus More on Solving Problems</title>
		<link>https://www.thinkprogramming.co.uk/functional-code-focus-more-on-solving-problems/</link>
		<comments>https://www.thinkprogramming.co.uk/functional-code-focus-more-on-solving-problems/#respond</comments>
		<pubDate>Tue, 15 Nov 2016 22:06:56 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[General Programming]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=65</guid>
		<description><![CDATA[<p>I&#8217;ve recently been writing a lot of lazy functional code in <code>C#</code> that allows for better re-usability and cleaner solution than it would have been if it had been written in an Object Oriented manner. This also helped in lower level code by focusing on steps to solve a problem rather than worrying about scoping and sequence of execution.</p>
<p><span id="more-65"></span></p>
<p>What I had come to realise whilst writing lots of code using generators is how much it <strong>helps me solve problems in effective ways</strong>.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/functional-code-focus-more-on-solving-problems/">Functional Code : Focus More on Solving Problems</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/functional-code-focus-more-on-solving-problems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ES6: Iterators and Generators</title>
		<link>https://www.thinkprogramming.co.uk/es6-iterators-and-generators/</link>
		<comments>https://www.thinkprogramming.co.uk/es6-iterators-and-generators/#respond</comments>
		<pubDate>Sat, 06 Aug 2016 22:06:13 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[ES6]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=63</guid>
		<description><![CDATA[<p>Iterators and Generators in JavaScript gives us a more expressive write expressive <strong>lazy code</strong>. Lazily executed code can give us a bit of a performance boost because computations can be delayed until they are needed. This allows us to create some very interesting functions that can generate an <strong>infinite</strong> amount of output.</p>
<p><span id="more-63"></span></p>
<h2>Iterable / Iterator</h2>
<p>Iterator is a pattern for Iterating over a collection.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/es6-iterators-and-generators/">ES6: Iterators and Generators</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/es6-iterators-and-generators/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ES6: Destructuring</title>
		<link>https://www.thinkprogramming.co.uk/es6-destructuring/</link>
		<comments>https://www.thinkprogramming.co.uk/es6-destructuring/#respond</comments>
		<pubDate>Mon, 25 Jul 2016 22:05:17 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[ES6]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=61</guid>
		<description><![CDATA[<p>ES6 gives us a new way of assigning values using pattern matching allowing us to <strong>destructure</strong> objects and arrays to the smaller pieces that we require. This gives us a more expressive way mapping values from one object to smaller variables.</p>
<p><span id="more-61"></span></p>
<h2>Array Destructuring</h2>
<p>Array Matching allows us to <strong>destructure</strong> and assign parts of our array into individual variables. As an example:</p>
<pre><code class="language-javascript">let pointVals = [1,2]
let [x,</code></pre>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/es6-destructuring/">ES6: Destructuring</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/es6-destructuring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ES6: Object Properties</title>
		<link>https://www.thinkprogramming.co.uk/es6-object-properties/</link>
		<comments>https://www.thinkprogramming.co.uk/es6-object-properties/#respond</comments>
		<pubDate>Fri, 08 Jul 2016 22:04:36 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[ES6]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=59</guid>
		<description><![CDATA[<p>ES6 introduces a new way of assigning properties to an Object Literal to save us some of those precious keystrokes along with some fancy way of assigning computed properties.</p>
<p><span id="more-59"></span></p>
<h2>Property Shorthand</h2>
<p>If you&#8217;re familiar with <code>C#</code>, you&#8217;ll no doubt have seen the same feature when using .NET Anonymous Type and Dynamic.</p>
<p>If you want to assign a property with the same name that it&#8217;s already declared in,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/es6-object-properties/">ES6: Object Properties</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/es6-object-properties/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ES6: String</title>
		<link>https://www.thinkprogramming.co.uk/es6-string/</link>
		<comments>https://www.thinkprogramming.co.uk/es6-string/#respond</comments>
		<pubDate>Tue, 05 Jul 2016 22:03:47 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[ES6]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=56</guid>
		<description><![CDATA[<p><code>String</code> in ES6 has a few new tricks up it&#8217;s sleeve&#8217;s and I love it. <code>String</code> now supports templating and it is now also iterable &#8211; which is a pretty big deal if you&#8217;re into <code>String</code> parsing.</p>
<p><span id="more-56"></span></p>
<h2>Templating</h2>
<h3>Usage:</h3>
<pre><code class="language-javascript">let name = 'John'
let hello = `hello ${name}`
console.log(hello)
</code></pre>
<p>The only way to do the same thing in ES5 would be through string concatenation:</p>
<pre><code class="language-javascript">var name = 'John';</code></pre>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/es6-string/">ES6: String</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/es6-string/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ES6: Parameters</title>
		<link>https://www.thinkprogramming.co.uk/es6-parameters/</link>
		<comments>https://www.thinkprogramming.co.uk/es6-parameters/#respond</comments>
		<pubDate>Fri, 24 Jun 2016 21:45:22 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[ES6]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=54</guid>
		<description><![CDATA[<p>ES6 adds a few new features that allows for more expressive and concise way of declaring parameters for various use cases. Let&#8217;s have a look at the new default parameter and rest parameters and understand their use.</p>
<p><span id="more-54"></span></p>
<h2>Default Parameter</h2>
<p>ES6 has introduced a new way of defining default argument to parameters. This can be applied to any type of function, whether it&#8217;s an arrow function, conventional function or class constructor function.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/es6-parameters/">ES6: Parameters</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/es6-parameters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ES6: Arrow Function</title>
		<link>https://www.thinkprogramming.co.uk/es6-arrow-function/</link>
		<comments>https://www.thinkprogramming.co.uk/es6-arrow-function/#respond</comments>
		<pubDate>Wed, 22 Jun 2016 21:13:28 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[ES6]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=52</guid>
		<description><![CDATA[<p>The arrow function allows declaration of anonymous functions (lambda) in a more concise way. Let&#8217;s see what&#8217;s so great about it :).</p>
<p><span id="more-52"></span></p>
<h2>Usage</h2>
<pre><code class="language-javascript">const sayHello = (name) =&#62; console.log(`Hello ${name}`)
sayHello("World")
</code></pre>
<p>In ES5, this would be a bit more verbose.</p>
<pre><code class="language-javascript">var sayHello = function(name) { 
  console.log("Hello " + name)
}
sayHello("World")
</code></pre>
<h2>Single argument</h2>
<p>When only one parameter is required,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/es6-arrow-function/">ES6: Arrow Function</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/es6-arrow-function/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ES6: let and cons</title>
		<link>https://www.thinkprogramming.co.uk/es6-let-and-cons/</link>
		<comments>https://www.thinkprogramming.co.uk/es6-let-and-cons/#respond</comments>
		<pubDate>Tue, 21 Jun 2016 21:11:14 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[ES6]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=48</guid>
		<description><![CDATA[<p><code>var</code> in JavaScript does not work particularly well, it confuses the heck out of beginners with it&#8217;s scope and the fact that it&#8217;s used everywhere for all concepts including constants make it difficult to identify the intent of each defined variable. ES6 introduces some new keywords that is easier to understand in terms of both scope and intent.</p>
<p><span id="more-48"></span></p>
<h2>let keyword</h2>
<p>The <code>let</code> keyword is the immediate replacement of <code>var</code>,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/es6-let-and-cons/">ES6: let and cons</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/es6-let-and-cons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Anonymous and Dynamic Type in .NET</title>
		<link>https://www.thinkprogramming.co.uk/anonymous-and-dynamic-type-in-dotnet/</link>
		<comments>https://www.thinkprogramming.co.uk/anonymous-and-dynamic-type-in-dotnet/#respond</comments>
		<pubDate>Sat, 14 May 2016 21:09:29 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=46</guid>
		<description><![CDATA[<p>Coming from a non-statically typed language such as PHP or JavaScript, when you hear dynamic type, we think of being able to modify any object runtime. C# is mostly statically typed, but has great support for some dynamic behaviour.</p>
<p><span id="more-46"></span></p>
<h2>Anonymous Type</h2>
<p>Let&#8217;s see how we can declare anonymous objects with C# just like we would with dynamic languages.</p>
<p>Typically, when we want a simple dynamic object in a dynamic language,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/anonymous-and-dynamic-type-in-dotnet/">Anonymous and Dynamic Type in .NET</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/anonymous-and-dynamic-type-in-dotnet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimising for the Web : Part One</title>
		<link>https://www.thinkprogramming.co.uk/optimising-for-the-web-part-one/</link>
		<comments>https://www.thinkprogramming.co.uk/optimising-for-the-web-part-one/#respond</comments>
		<pubDate>Thu, 12 May 2016 21:05:53 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Perf]]></category>
		<category><![CDATA[Web Performance]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=40</guid>
		<description><![CDATA[<p>One of the things that greatly impacts users experience is a website&#8217;s is perceived performance. One way of getting better perceived performance is by decreasing page load time, this not only helps user experience, but also gives you a better ranking in some search engines such as Google. The plus side is, there are optimisations are quite straight forward to do and only takes a bit of your time, especially if you&#8217;re just starting out with a fresh web project.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/optimising-for-the-web-part-one/">Optimising for the Web : Part One</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/optimising-for-the-web-part-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reduce Using and Try Catch Nesting</title>
		<link>https://www.thinkprogramming.co.uk/reduce-using-and-try-catch-nesting/</link>
		<comments>https://www.thinkprogramming.co.uk/reduce-using-and-try-catch-nesting/#respond</comments>
		<pubDate>Sat, 02 Apr 2016 21:07:59 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[ES6]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=44</guid>
		<description><![CDATA[<p>if possible, I try to keep nesting of blocks to a minimum. In C#, there&#8217;s actually a good way of reducing nesting when combining <code>using</code> with the <code>try</code> <code>catch</code> <code>finally</code> within it.</p>
<p><span id="more-44"></span></p>
<p><center></center></p>
<blockquote class="twitter-tweet" data-lang="en">
<p lang="en" dir="ltr">PHP Streetfighter 🙂 <a href="https://twitter.com/hashtag/php?src=hash">#php</a> <a href="http://t.co/5dQ5H1UrB2">pic.twitter.com/5dQ5H1UrB2</a></p>
<p>&#8212; Paul Dragoonis (@dr4goonis) <a href="https://twitter.com/dr4goonis/status/476617165463105536">June 11, 2014</a></p>
</blockquote>
<p>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>So let&#8217;s see if we can try to reduce our ugly nesting further.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/reduce-using-and-try-catch-nesting/">Reduce Using and Try Catch Nesting</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/reduce-using-and-try-catch-nesting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# Functional Programming</title>
		<link>https://www.thinkprogramming.co.uk/csharp-functional-programming/</link>
		<comments>https://www.thinkprogramming.co.uk/csharp-functional-programming/#respond</comments>
		<pubDate>Thu, 24 Dec 2015 20:57:16 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Functional Programming]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=38</guid>
		<description><![CDATA[<p>Functional programming has gained a lot of traction over the years, along with the growing trend of functional/hybrid programming languages including F#, Scala, Clojure and Haskell to name a few. I wanted to re-explore functional programming &#8211; Can it really reduce bug count? Is it here to stay, or is it just one of those things that becomes a trend and die out after a few years?</p>
<p><span id="more-38"></span></p>
<h2>What is Functional Programming?</h2>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/csharp-functional-programming/">C# Functional Programming</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/csharp-functional-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Undocumented side effect with .NET HttpClient</title>
		<link>https://www.thinkprogramming.co.uk/an-undocumented-side-effect-with-dotnet-httpclient/</link>
		<comments>https://www.thinkprogramming.co.uk/an-undocumented-side-effect-with-dotnet-httpclient/#respond</comments>
		<pubDate>Tue, 22 Dec 2015 20:56:02 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=36</guid>
		<description><![CDATA[<p>There appears to be an undocumented side-effect with HttpClient when operating with Stream&#8217;s</p>
<p><span id="more-36"></span></p>
<p><script src="https://gist.github.com/andy-williams/1532415b48dff1430201.js"></script></p>
<p>Seems that Stream gets closed when the operation is done &#8211; just something to keep in mind when dealing with Stream&#8217;s using HttpClient.</p>
<p>Understandably this is an async operation and could potentially cause issues when it&#8217;s used as fire and forget and causing issue where the Stream is never closed having to wait for GC to free up any resource.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/an-undocumented-side-effect-with-dotnet-httpclient/">An Undocumented side effect with .NET HttpClient</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/an-undocumented-side-effect-with-dotnet-httpclient/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Quirks for Classical OO Developers : Part Two</title>
		<link>https://www.thinkprogramming.co.uk/javascript-quirks-for-classical-oo-developers-part-two/</link>
		<comments>https://www.thinkprogramming.co.uk/javascript-quirks-for-classical-oo-developers-part-two/#respond</comments>
		<pubDate>Tue, 01 Sep 2015 20:54:33 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=33</guid>
		<description><![CDATA[<p>This is the second part of the JavaScript Quirks for Classical OO Developers. I will cover a bit of the most important things that you may have missed (I certainly did) with JavaScript as a C#/Java Developer without going into too much detail and some references for further reading.</p>
<p><span id="more-33"></span></p>
<h2>How do I create a class?</h2>
<p>In C# and Java, it is simple to think about how you would write a class &#8211;</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/javascript-quirks-for-classical-oo-developers-part-two/">JavaScript Quirks for Classical OO Developers : Part Two</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/javascript-quirks-for-classical-oo-developers-part-two/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Singleton without the bad side effects</title>
		<link>https://www.thinkprogramming.co.uk/singleton-without-the-bad-side-effects/</link>
		<comments>https://www.thinkprogramming.co.uk/singleton-without-the-bad-side-effects/#respond</comments>
		<pubDate>Sat, 04 Apr 2015 20:53:20 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[General Programming]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=31</guid>
		<description><![CDATA[<p>Singleton pattern gives a way of ensuring that there is only a single instance of a particular object &#8211; but why has the singleton become an anti-pattern? Well, the main issue with singleton is that it becomes very difficult to test since it is very likely that it&#8217;s tightly coupled to a something within the system &#8211; it&#8217;s just the nature of the singleton pattern, since it has to be able to create itself, and in order to do so,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/singleton-without-the-bad-side-effects/">Singleton without the bad side effects</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/singleton-without-the-bad-side-effects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developments in JavaScript &#8211; Framework overload</title>
		<link>https://www.thinkprogramming.co.uk/developments-in-javascript-framework-overload/</link>
		<comments>https://www.thinkprogramming.co.uk/developments-in-javascript-framework-overload/#respond</comments>
		<pubDate>Wed, 04 Mar 2015 20:52:40 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=29</guid>
		<description><![CDATA[<p>During the past few months, I&#8217;ve been experimenting with a lot of new JavaScript libraries and frameworks. I have found it impossible to keep up with majority of developments in JavaScript, and the best tools coming out solve the problems they aim to solve but also have their downsides as any other tool.</p>
<p><span id="more-29"></span></p>
<h2>ReactJS</h2>
<p>ReactJS is great, it thinks outside the box and distinguishes itself from other libraries and frameworks very well.</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/developments-in-javascript-framework-overload/">Developments in JavaScript &#8211; Framework overload</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/developments-in-javascript-framework-overload/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Quirks for Classical OO Developers : Part One</title>
		<link>https://www.thinkprogramming.co.uk/javascript-quirks-for-classical-oo-developers-part-one/</link>
		<comments>https://www.thinkprogramming.co.uk/javascript-quirks-for-classical-oo-developers-part-one/#respond</comments>
		<pubDate>Thu, 11 Sep 2014 19:54:15 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=25</guid>
		<description><![CDATA[<p>I feel that JavaScript is a very misunderstood language &#8211; especially by many classical Object-Oriented developers (most that I know of anyway, myself included some years ago) that work primarily with <code>C#</code> or <code>Java</code>. This post isn&#8217;t to serve as a complete guide, it&#8217;s not a best practice guide, and it&#8217;s not for beginners &#8211; It&#8217;s a quick run through the JavaScript&#8217;s oddities classical OO developers may find.</p>
<p><span id="more-25"></span></p>
<h2>Everything is an Object</h2>
<p>That&#8217;s right,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/javascript-quirks-for-classical-oo-developers-part-one/">JavaScript Quirks for Classical OO Developers : Part One</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/javascript-quirks-for-classical-oo-developers-part-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clean Code Review and Notes</title>
		<link>https://www.thinkprogramming.co.uk/clean-code-review-and-notes/</link>
		<comments>https://www.thinkprogramming.co.uk/clean-code-review-and-notes/#respond</comments>
		<pubDate>Fri, 04 Jul 2014 19:52:54 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Book Review]]></category>
		<category><![CDATA[General Programming]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=23</guid>
		<description><![CDATA[<p>So I&#8217;ve finished one of the books I wanted to read this year. Much of the content of the book itself will be familiar to most developers with one or two years of experience developing applications, but there are still great tips here that can easily be overlooked.</p>
<p><span id="more-23"></span></p>
<p>As the title of the book suggests &#8211; the book is a compilation of tips based on experience on what makes code clean,</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/clean-code-review-and-notes/">Clean Code Review and Notes</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/clean-code-review-and-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Hackathons</title>
		<link>https://www.thinkprogramming.co.uk/on-hackathons/</link>
		<comments>https://www.thinkprogramming.co.uk/on-hackathons/#respond</comments>
		<pubDate>Wed, 25 Jun 2014 19:34:52 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Culture]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=19</guid>
		<description><![CDATA[<p>I&#8217;ve recently written about some of the things I want to do this year &#8211; one of which is to attend hackathons and conferences on a regular basis &#8211; so far I have managed to act on this quite well, I&#8217;ve been fairly active in the developer community participating in Hackathons. So here, I write about my experience with the recent Hackathon events that I&#8217;ve attended.</p>
<p><span id="more-19"></span></p>
<h2>The Atmosphere</h2>
<p>The hacker community in London is simply amazing &#8211;</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/on-hackathons/">On Hackathons</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/on-hackathons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code first with MySQL and EF6</title>
		<link>https://www.thinkprogramming.co.uk/code-first-with-mysql-and-entity-framework-6/</link>
		<comments>https://www.thinkprogramming.co.uk/code-first-with-mysql-and-entity-framework-6/#respond</comments>
		<pubDate>Mon, 24 Mar 2014 22:13:02 +0000</pubDate>
		<dc:creator><![CDATA[Andrew Williams]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://thinkprogramming.local/?p=1</guid>
		<description><![CDATA[<p>Last week, I had to start a .NET Project that requires a database &#8211; our shared server however only provides MySQL as a database solution (Low cost solution has its price eh?).</p>
<p>Let&#8217;s have a quick look at how to get started with MySQL and EF6 with Code first approach.</p>
<p><span id="more-1"></span></p>
<h2>Dependencies</h2>
<p>Let&#8217;s install the main libraries that we need to get this working. Run the following install commands on Package Manager Console :</p>
<pre><code class="language-powershell">Install-Package EntityFramework
Install-Package MySQL.Data.Entities
</code></pre>
<h2>Create the database</h2>
<p>Let&#8217;s create the database &#8211;</p>
<p>The post <a rel="nofollow" href="https://www.thinkprogramming.co.uk/code-first-with-mysql-and-entity-framework-6/">Code first with MySQL and EF6</a> appeared first on <a rel="nofollow" href="https://www.thinkprogramming.co.uk">Think Programming</a>.</p>
]]></description>
		<wfw:commentRss>https://www.thinkprogramming.co.uk/code-first-with-mysql-and-entity-framework-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: https://www.w3-edge.com/products/

Object Caching 4027/4496 objects using disk
Page Caching using disk: enhanced
Content Delivery Network via N/A
Minified using disk
Database Caching using disk

 Served from: www.thinkprogramming.co.uk @ 2026-03-30 13:15:15 by W3 Total Cache -->