Posts

The Possibilities of Augmented Reality

Image
  The creative potential of Hololens and "Mixed Reality"is huge. There are a wide variety of applications we can develop for it. I believe the demos shown so far are barely scratching the surface of what we can do with the Hololens. Once the imagination of the development community warms up, we're going to see world changing ideas. Industries will be turned upside down, lives will be changed, and millionaires will be made. I'm going to make some assumptions on its abilities, but try and highlight some of the many directions we can take in creating for the interface of the future. Presence Sharing One of the most interesting uses for the Hololens is allowing others to share your experience, and interact with it. This opens up many prospects for communication and collaboration in virtually every industry. Think about how cool GoPro cameras are and what we're able to do with them. Now imagine seeing the video live and being able to interact with it. This par

Sunday Service at the Church of Retail

Image
Sundays. The day of rest. The day of community, and spiritual reflection. Or at least it used to be. Now, we have something else. Today’s church is the shopping mall. We worship retailers. We congregate not side by side but in long queues, at the alter of the checkout. We pray for discounts, credit cards in hand, stain glassed windows replaced with shiny glass store fronts. This is the world we have built for ourselves – consumerism is our new religion. There is no community here. We shop alone in large crowds, even fighting each other for the last bargains. Instead of spiritual guidance, we have forced lip service from uncaring store clerks. The almighty dollar is our god now. These shiny, air conditioned, logo-emblazoned plazas are our churches. I’m in no way religious – but there is definitely something to be said about getting together with your community and reminding yourself of life’s purpose. Of course, it would be better minus the guilt, indoctrination and irrational

Microsoft Certified Solutions Developer!

Image
After 3 years, 3 exams, and an excessive amount of study I have achieved the Microsoft Certified Solutions Developer - Web Applications certification. I realise that many people don't put a huge amount of emphasis on exams, valuing real world experience instead. But I have found that what I learned studying for these exams has been extremely valuable to my profession, helping me make more informed decisions in my day to day work. There is no substitute for real world experience, but real world experience leaves a lot of gaps and doesn't always teach the best habits. The exams have enabled me to fill in these gaps and develop a real technical proficiency which I may not have had without them. Update:  Born to Learn just posted this blog talking about a recent study which found 4 advantages certified staff have over non-certified staff, there are some interesting findings! https://borntolearn.mslearn.net/b/weblog/archive/2016/01/25/four-solid-reasons-to-hire-certi

Amazing Things You Can Do With Azure Storage Queues

Image
Load Balancing and Workload distribution Queues can be used to organise the distribution of a workload across multiple processors. A common technique is to post messages to a queue which are a key to a task which needs to be performed, and have multiple worker processes pick these tasks from the queue to perform in parallel. This can be combined with other storage mechanisms to perform complex tasks. Say you were trying to render an animation. The queue could be loaded with keys, which point to an entity in Table storage. This entity could contain the Url of an image stored in blob storage. A worker process would pick up the message from the queue, reference the entity from the table and download the image from blob storage. It could then perform compute intensive tasks on the image while other worker processes picked up other images. In this way, cloud storage can be used to augment worker roles and perform powerful parallel operations. Asynchronous Processing and Temporal

Calling Long Running Methods Asynchronously

Image
When you are able to call an async method, do it using async and await or by making your method return a Task: p ublic async Task < string > RequestData ( Uri uri ) {     WebClient webClient = new WebClient ();     return await webClient.DownloadStringTaskAsync ( uri ); } // Rely on underlying Tasks whenever possible. public Task < string > RequestDataAsync ( Uri uri ) {     WebClient webClient = new WebClient ();     return webClient.DownloadStringTaskAsync ( uri ); } // Rely on underlying Tasks whenever possible. Dealing with synchronous calls When the method you are calling is not asynchronous, wrap the method in a task delegate:   public Task < string > RequestDataAsync ( Uri uri ) {     return Task .Run < string >(         () =>         {             WebClient webClient = new WebClient ();             return webClient.DownloadString ( uri );         }); } // Create Tasks when you have no

NuGet Like a Boss: Part 1 - Don't Check in Packages

Image
After suffering like many with so many Package Restore woes in my projects I decided to make notes on the best way to deal with Nuget packages. Ignore the packages folder Not doing this means you check in the packages which are huge. This is annoying and kind of defeats the purpose of Nuget. When you ignore (and therefore don't check in) your packages folder, anyone getting your source code can run package restore on the solution and Nuget will download the packages automatically. How? First, add a file named .tfignore . This may require some Command prompt renaming as some set ups don't like files beginning with a dot. When you get past this annoyance, open the file in notepad and enter the following: \packages That tells TFS to ignore the packages folder. For some bizarre reason, this doesn't include the respositories.config file. You'll need to add a second line as follows: !\packages\repositories.config You'd think this would be it, but you may

Developing for the Cloud - An Introduction

Image
When you create a web application for the cloud, there are many things that need to be done differently. It's not just a case of saying "I'm doing cloud" and all you're really doing is putting it on someone else's VM. Doing this, the costs are much higher than if the application is designed with cloud in mind. This might be fine from an infrastructure point of view, but the cloud can have profound impacts on development from the ground up. Azure allows us, and also forces us, to engineer our applications completely differently. Forces? Well, this is because when you're hosting in an App Service plan, you're billed based on compute time and resource usage. This forces you to write more efficient code. You can't just write code that performs unnecessary operations and get away with it - the efficiency of code now directly translates to dollars. This demands that you think twice when writing code, espcially loops, to ensure you're being