David Sale is a passionate agile Senior Software
Developer. Developing clean, test driven code in Java and Python. An avid reader, writer and blogger of
programming, software development processes and tech in general.
This passion to inspire and write about these technologies has enabled the delivery of numerous articles, presentations and more recently a book, over the last few years.
This website aims to showcase these works in one place, and provide an easy way for you to contact David, should you find his work suitable for your next project. He is always keen to hear of exciting customer centric projects and opportunities, learning new skills and sharing his knowledge with others along the way.
When I first met David Sale as part of a small team building an innovative commerce platform at Sky almost 10 years ago, he was a bright graduate, eager to learn everything he could from the people we worked with. By the end of our time working together, I was the one learning things from him and asking for his expertise. I was always impressed by David’s ability to dive deep into a wide range of topics and technologies and quickly emerge with authority, new skills and pragmatic perspective.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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”.