David Sale

Software Developer and Author

About Me

My name is David Sale. I am a passionate and perpetually learning Software Developer. Currently based in the South of London, I have worked on Agile Projects using mostly Python, Java and Ruby. I enjoy writing about programming and sharing learning with others.

This passion to inspire and write about the technologies I have been using has allowed me to deliver numerous articles, presentations and most recently a book, over the last few years. My website aims to showcase these works in one place, and provide an easy way for you to contact me should you find my work suitable for your next project. I am always keen to hear of exciting projects and opportunities, with Python in particular being a huge draw for me.

David Sale Nettuts Articles

Dockerizing a Python Django Web Application

Published: Sept. 7, 2016

This article will cover building a simple 'Hello World'-style web application written in Django and running it in the much talked about and discussed Docker. Docker takes all the great aspects of a traditional virtual machine, e.g. a self contained system isolated from your development machine, and removes many of the drawbacks such as system resource drain, setup time, and maintenance.


My Journey from Leeds Graduate to Senior Software Developer in 5 Years

Published: April 29, 2016

David graduated in 2011 with a BSc (Hons) Computing from the University of Leeds. In this talk, he shares his experience on software engineering in the real world, and about the Sky Software Engineering Academy including opportunities for placements and jobs within Sky.


BDD Testing a Restful Web Application in Python

Published: Oct. 28, 2015

Behaviour-driven development allows you to describe how your application should behave, and drive the development of features by adding new tests and making them pass. By clearly describing how your application behaves in different scenarios, you can be confident that the product delivered at the end meets the requirements you set out to deliver. Following BDD lets you build up your application piece by piece, and also provides you with living documentation of your entire system, that is naturally maintained as you keep the tests passing.


Testing Python: Applying Unit Testing, TDD, BDD and Acceptance Testing

Published: Aug. 8, 2014

Python is a hugely popular, open source programming language, especially in the world of web development, and is used by some of the largest and most popular web services including Spotify, YouTube, Google, and the Raspberry Pi. Python Testing teaches you how to use Unit Testing and Test-Driven Development (TDD) to build clean, flexible Python programs that work in an Enterprise environment. Python’s dynamic nature and vast range of external libraries make it a great choice for developers.

View Amazon

Rapid Website Deployment With Django, Heroku & New Relic

Published: June 27, 2014

Rapid development and deployment of applications is quickly becoming a requirement and goal for many projects, old and new. Fortunately, a vast array of options are springing up for developers to take advantage of in terms of deployment resources and tight integration with the programming language of your choice. Cloud deployments, where companies offer a vast amount of hardware which you can scale to your needs, are becoming increasingly popular due to their flexibility and cost effectiveness in following a pay as you use model.


New Relic & JMeter - Perfect Performance Testing

Published: Sept. 30, 2013

Following on from the great introductory articles featured recently on Nettuts+, this article looks to show how you can take New Relic to the next level. As a performance monitoring tool New Relic is fantastic, but what about performance testing, before you go live. That's where JMeter comes in to play. In this tutorial, you will see how we can stress test our application under realistic load, and combine the output of JMeter and New Relic to give you confidence in your applications performance, before releasing into a production environment.


The Agile 'Movement'

Published: July 3, 2013

Whenever you’re developing for a client there’s always one thing that’s inevitable: the requirements that you think you’re agreeing on at the start are never the same as what the client has in mind: either the product that you produce is different to what the client expects, or you find that halfway through development the client changes their mind. But where does this fit in to the waterfall model? At what point do we consider that the client could change their mind? Let’s not forget: they’re your client, and they’re paying you. We want to please them so that they come back to us. Telling a client that we can’t be flexible with what they ask is not going to leave them very happy.


Bootstrap Your Web Application With Ruby And Sinatra

Published: May 21, 2013

In this tutorial, I am going to show you how you can rapidly create a good looking website, with as little code as possible. By making use of the awesome Bootstrap templates that Twitter have provided, alongside Ruby and the Sinatra web framework, we can get a professional template site upon which to build in little more than a lunch break.


Flask - An Introduction to Python's Lightweight Web Framework

Published: March 22, 2013

In this tutorial, I will be looking at the installation and development of a simple web application using Python's Flask web framework. You will see how in a matter of minutes, you will have a simple but powerful skeleton with which to build your application upon. If you refer to my previous article on Tech.Pro, you can get your Python environment set up ready for development, and also follow the simple instructions for installing Python Packages using "pip". Also in that article, I take you through setting up a virtual environment for your projects, something you may wish to do for this project. Here, we will use the name "flask_tutorial" for our virtual environment.


Python Data Types and Their Usage

Published: March 12, 2013

In this tutorial we are going to look at the various Python data types available and how we can make use of them, including some neat tricks which can help keep your Python code clean and simple. The extra tips can be found in bold and italic. The first data types we will look at are standard across almost any programming language. These include strings, integers, floats and booleans. These data types form the basic building blocks from which we can construct our Python applications.


Setting Up Your Perfect Python Environment

Published: March 1, 2013

The first step to creating your perfect Python environment, is getting Python installed on your machine! For this tutorial, I will be explaining the process on Mac OS X and Linux. One important thing to bear in mind with Python, as with virtually all programming languages, is the different versions that are available. The Python community mainly make use of two popular versions. These are Python 2.* and Python 3.* Python 3 is intentionally backwards-incompataible with Python 2, however many Python 3 features have been back ported to the Python 2 library. It is entirely up to you which version you make use of, however in my experience more users are making use of Python 2.7.2 and you may find more 3rd party libraries available for this version. A little research into the topic may be of use if you are interested, but on the whole either version will probably suit you fine and cover the majoirty of requirements.


Beginning Test Driven Development in Python

Published: Feb. 21, 2013

Test-driven development (TDD) is a process that has been documented considerably over recent years. A process of baking your tests right into your everyday coding, as opposed to a nagging afterthought, should be something that developers seek to make the norm, rather than some ideal fantasy. I will introduce the core concepts of TDD. The whole process is very simple to get to grips with, and it shouldn't take too long before you wonder how you were able to get anything done before! There are huge gains to be made from TDD - namely, the quality of your code improving, but also clarity and focus on what it is that you are trying to achieve, and the way in which you will achieve it. TDD also works seamlessly with agile development, and can best be utilized when pair-programming, as you will see later on. In this tutorial, I will introduce the core concepts of TDD, and will provide examples in Python, using the nosetests unit-testing package.


Behaviour Driven Development in Python

Published: Aug. 24, 2012

Behavior-Driven Development is an excellent process to follow in software development. With testing often a practice that is pushed aside to the last minute (or ignored, entirely), baking the process into your daily workflow can prove to be hugely beneficial to the quality of your code. The structure and design of the tests, coupled with the Gherkin syntax makes tests easy to read - even for team members with non-technical backgrounds. All code should be tested thoroughly, meaning that defects should ideally never reach production. If they do, then a thorough test suite, focused on the behavior of your application as a whole, ensure that they are easy to both detect and fix. This speed, clarity, focus and quality in your code is why you need to be adopting this process...now.


Behaviour Driven Development at BSkyB

Published: July 5, 2012

BSkyB is a major player in the broadcasting and telecoms market in the United Kingdom. Sky’s offering of premium sports, movies and entertainment channels puts it at the forefront of Television entertainment in more than 10 million homes. Its ample broadband and telephone products have allowed the company to expand its customer base and offer an all round package to its customers. With a focus on quality and stability in everything Sky produces, testing of applications is paramount. As part of this business, the company needs a successful and efficient way to sell these products to its customers and as such the modelling, rules and pricing of packages need to lay a firm foundation for different parts of a sales application to function well. Testing plays a key role to ensure that delivery of a product is always as incident free as possible. Within the agile framework, unit tests, behaviour driven development (BDD) and continuous integration play a key role in making this possible.


GUI Development for a Neuromechanical Simulator of C. elegans Locomotion

Published: May 1, 2011

Outlined within this report is the inspiration, analysis and eventual implementation of the design of a Graphical User Interface (GUI) to a neural network model of Caenorhabditis elegans. The project as a whole looked at two computational models of the C. elegans worm and evaluated them in terms of which would be most successful as the underlying model to the interface. There were many criteria in which to evaluate the models and these are detailed within; along with explanations of the differences between the two models. The successful model was then taken to create a user interface, that would be beneficial to those who are not necessarily computer scientists. Herein lies the main inspiration for the project. That is to provide a means of using the simulation to achieve some goal. These may include, performing experiments or using as a teaching aid, without the need to understand the computation “under the hood”.