What happens if you give Alexa a modern AI agent? Alexa already provides a microphone, a speaker, and a natural place for a conversation, but it has not traditionally been backed by a particularly powerful or stateful AI. Microsoft Foundry agents offer reasoning, tools, and conversation context, but they do not come with a ready-made consumer interface. Combining the two seemed like an interesting…
An experiment in AI-assisted theoretical physics A note on how this was made This project began as a question: what happens if you point a generative AI at one of the hardest unsolved problems in fundamental physics? I’m not a professional physicist. I have a background in software and mathematics, and a long-standing obsession with the question of why the Standard Model has the structure it does…
The Spark: From Conversation to Code It started with a simple question: “What if we could find planets that others have missed?” NASA’s Kepler and TESS missions have produced petabytes of public data, carefully analyzed by professional astronomers and citizen scientists alike. Thousands of exoplanets have been discovered. But in a dataset this vast, could there still be hidden signals waiting to…
Today I decided to test Microsoft Copilot Researcher’s problem-solving capabilities by asking it to solve today’s Wordle puzzle. What I discovered was fascinating - the AI didn’t just guess randomly, but used a systematic approach through its “Computing Using Agent” feature. The Prompt “do today’s new york times wordle” The Approach The Computer Using Agent has access to a desktop browser. It…
I thought it would be fun to ask these LLMs to create a self portrait of themselves. I used this prompt: create a self portrait of yourself …and here are the results: Gemini ChatGPT Copilot Grok GitHub Copilot (with Claude Sonnet 4) ╭─────────────────────────────────╮ │ GitHub Copilot Self-Portrait │ ╰─────────────────────────────────╯ ⚡ GITHUB COPILOT ⚡ ┌─────────────────────────────────────┐ │…
In this blog post, we will explore the various Microsoft tooling options available for application modernisation. Whether you are working with ASP.NET or Java, Microsoft provides a range of tools to help you discover, containerise, and migrate your applications to Azure services such as Azure Kubernetes Service (AKS) and Azure App Service. Let’s dive in and explore the options. Azure Migrate: App…
In the middle of 2023 I was left at home for a week while my wife and kids went abroad. I was left with a list of DIY tasks, so I decided listen to some audiobooks while glossing the hall stairs and landing. Since then I have been cramming audiobooks into dog walks, car journeys and household tasks. These are the titles I listened to in 2023 (a couple of physical books too). I have rated them out…
Most of the GenAI use cases we see are the ‘copilot’ experiences, with a chat assistant helping a user to complete a task. However GenAI can also be used in a variety of ways to support ‘back end’ processes, such as: Classify documents/emails Converting unstructured data into structured data Summarisation of documents/conversations Azure Logic Apps provides a great way to implement business…
An AI generated image of “constructing a large language model”. There are many use cases for generative AI, but one that many people have been excited about is the ability to build a chatbot that can answer questions about any topic. In this post I cover the different levels of sophistication you can build into your chatbot, and how you can use the Azure OpenAI API to build your own Copilot.…
The ChatGPT interface is much more flexible than the chat, text generation and summarisation examples often cited. As a developer there are a few interesting use cases I have played with briefly. Here are a few examples. If you have any more, let me know! Extracting search terms from a question Question: from the question below, extract the relevant search terms as a comma separated list --- what…
GitHub Copilot Tips and Tricks Enable/Disable Specific Languages in VSCode In VSCode you can enable and disable specific languages by adding the following to your settings.json file: "github.copilot.enable" : { "*" : true , "plaintext" : true , "markdown" : true , "scminput" : false , "yaml" : false } , Enable/Disable Specific files in your project If you want to enable or disable specific files…
History In the early days of Azure (circa 2008) the only compute option was PaaS (Platform as a Service) in the form of Web Roles and Worker Roles. It was often a challenge to get software running in this environment, but the effort often was often rewarded with a system that was stateless, scalable, it might have used the native queues and blobs, and was probably connected into the health…
FTP vs SFTP FTP (or File Transfer Protocol) is a protocol that’s been around for 50 years, and is used for exchanging files between a client and a server. It supports username and password authentication, but doesn’t have encrypted transport. FTPS adds TLS to this protocol to encrypt the traffic. SFTP (or Secure Shell File Transfer Protocol) is a protocol for exchanging files between a client and…
With the advent of .NET 6, C# 10 and Orleans 4.0 (preview) it seems like a great time to take a fresh look at Microsoft Orleans (which is now included in the official Microsoft docs!). What is Orleans? Orleans is an open source framework for building distributed systems in .NET. This makes it easier for a developer to build software which will scale from a single computer to running across a…
Background I think the storage services in Azure are excellent. They provide a cheap and reliable data storage mechanism which can scale to 500TB (per container/table/queue) and provide 20k req/sec throughput. The challenge is the lack of secondary indexing. Blob and Table records are indexed by a sorted key. This allows easy retrieval if you know the name of the thing you want. The key can be…
TL;DR Don’t bother. Hardware Selection I thought I would try my hand at mining crypto in the cloud. After all, who wouldn’t want to be a bitcoin billionaire? There are a few VM options in Azure which have GPUs installed, I tried Standard NV6 (6 vcpus, 56 GiB memory) - £783.47 /month Standard NC6 (6 vcpus, 56 GiB memory) - £365.62 /month (promotion) It turns out the NC6 is an older model and uses…
On a recent project we wanted to have high quality mapping, but completely offline. Most map providers are online-only, and some permit temporary download as a cache. In my case the whole dataset needed to be downloaded in advance, as the device I’m working with will not be connected to the internet. I decided on the map tiler datasets, they provide various extracts of open street map, as vector…
I bought a £50 security camera off Amazon to improve security at our home. For a low cost unit it’s fairly capable, it works at night thanks to an array of IR LEDs, and the companion software allows you to control/view the feed from your phone, even outside your home network (which makes me slightly worried!). It supports recording a video feed to a micro SD card, but I couldn’t actually prise the…
Summary In a previous post I discussed a pattern for implementing maps in React based web applications using a pub/sub approach. This post expands on the idea, presenting a complementary approach using the command pattern . The basic problem is that the state driven approach of React.js is at odds with API approach of web map components. Using the command pattern allows encapsulation of the logic…
I recently worked on an internal project with a team of grads and inexperienced developers. Five of us in total. It was a short project - a line-of-business application to convert spreadsheets into software. It was a lot of fun. The challenge for me was how to get four people as productive as possible in a short timescale, given the extraordinarily high concept count of modern software development…
The Problem After implementing maps in react applications a few times, I have found that map components and react have have quite different, and largely incompatible abstractions. A typical map control is initialised, with a DIV element it uses to render the map: < div id = " map " /> const position = [ 51.505 , - 0.09 ] const map = L . map ( ' map ' ). setView ( position , 13 ) You can then call…
I started to take JavaScript seriously in 2012 with node.js. It offered a nice module system, a rich package ecosystem and a fast startup/development cycle. However the most compelling thing about JavaScript was that it took me out of the .NET world, including the painfully slow Visual Studio and the cumbersome static type system of C#. JS gave me a refreshing new dynamic world. It felt really…
Azure Maps consists of a set of geospatial REST APIs and a JavaScript web map control. Some of the services (including the data service) are in preview. What caught my particular interest was a Data Service which allows you to bring your own data in GeoJSON format, upload it, and then perform spatial queries on the data. After a quick play with the service, there are some interesting things to…
Vector Tiles are an efficient way of displaying a large amount of data on a mapping control. The traditional approach of adding pushpins, or other layers in the browser fail with large amounts of data. The browser becomes sluggish when the number of points reaches 1000. Colleagues of mine have produced an excellent workshop with detailed steps on how to build your own vector tile layers using…
TL;DR I wrote a fractral viewer using Leaflet.js which renders map tiles in the browser using a pool of service workers. You can view the app and source code . Introduction I’ve used leaflet.js before to render fractals in Go and C# , but I thought it would be intersting to see if it was possible to render tiles in the browser without any cooperation from a tile server. First of all, what is a…
On a recent family trip to Denmark we spent a day at the Lego House in Billund. It’s set back behind the Lego theme park, and has only been open for about a year. In the large open plan ground floor there’s a restaurant and a lego shop, these being the only commercial offerings available. The ticket barrier greets you by name, and allows you to walk up a long ramp, winding around a huge lego tree…
https://deveast.uk I’m one of the oragniser of Dev East. A single day, single track software developer conference running on 16th March 2018 at Ipswich Town Football Club. The Agenda I want the conference to be inspiring, almost like a TED event. You might not be using bleeding edge technologies on a day-to-day basis, but perhaps it’ll open your mind to what other people are doing with software…
Let’s say with have a simple table in SQL Server CREATE TABLE [ dbo ].[ test ]( [ Value ] [ varchar ]( 36 ) NOT NULL ) …in which we want to insert thousands of values (Guids) from a .NET application. One by one A naive approach is to insert one at a time, like this: public void OneByOne () { const string sql = "INSERT INTO [Test] ([Value]) Values (@Value)" ; for ( var i = 0 ; i < count ; i ++) {…
Note: This isn’t a particularly well balanced, scientific review comparing all 13” laptops on the market. This is just the thoughts of one man who bought one laptop. I was in the market for a new laptop for work. I wanted a 13” (ish) Core i7 (7th gen), 16GB RAM and a 512 GB SSD to replace my 6 year old Lenovo X1. I compared a few laptops on the market: The HP Envy stood out on three counts:…
I am attempting to improve the performance of image resizing in C#. This StackOverflow answer provided some excellent pointers for improving performance. I found these tips make a difference: Set pixel format to PixelFormat.Format32bppPArgb when creating a Bitmap. Set Graphics.CompositingMode to CompositingMode.SourceCopy . Set Graphics.InterpolationMode to InterpolationMode.NearestNeighbor .…
Introduction Never has there been such a good time for C# developers wanting to develop software based on Virtual Actors . At the moment there are two systems available, Orleans and Service Fabric Reliable Actors . Other actor frameworks are available of course. On the JVM there is Orbit , a Virtual Actor implementation, and Akka with more traditional actors. In .NET there is also Akka.NET , a…
Yesterday I was trying to learn F# by reading through the O’Reilly book and trying a few code samples. I then made a flippant remark: I wish someone would write 'F# - the good parts' — Richard Astbury (@richorama) May 24, 2016 I got quite a few responses, with people joking that it was all good, or all bad, but I also got serious offers of help. I’ve spent some more time thinking about this,…
Orleans has seen lots of improvements over the last year, in terms of the client APIs, the configuration and installation. So the process of getting started is now a little different. Let’s walk through setting up a grain, with a silo host and client application. Creating the grains First of all, open Visual Studio and create a class library which will host our grains. Note that at the time of…
Continuous integration is a development practice where every commit to a repository is built and tested. There are some excellent services available, such as Travis CI and AppVeyor which you should use. They’re even free for open source projects. I wanted to build my small .NET application, which is held in a private BitBucket repository, without having to pay anything for a CI service. I don’t…
When building occasionally connected apps, we frequently want to synchronize data between client and server. It’s common to build REST APIs to retrieve records from a database that have changed since we last connected. All too often I’ve seen dates as way of keeping track of a point in time since changes occurred. I think this is a bad idea (as Einstein taught us, time is not reliable ). This post…
In this series of blog posts, we’re looking at how to set up a simple web app in node. In the previous installment we looked at building an API in node, and then consuming it from a web app using browserify to build node modules into a JavaScript file for the browser. In this post we’ll look at using react to render the data on the screen. Installing dependencies We’ll need a couple more modules,…
In this series of blog posts, we’re looking at how to set up a simple web app in node. In the previous installment we looked at storing data, the node way. In this post we’ll look at moving code into the browser, to make a single page application - the node way! Creating an API Let’s add some extra routes to our express app, to allow data to be posted and retrieved in JSON format. The code is very…
In this series of blog posts, we’re looking at how to set up a simple web app in node. In the previous installment we looked at serving angle brackets, both static files and server-side templates. In this post we’ll look at persisting data to a database. The node way. A Basic Todo List A simple todo list is a great way to explore persisting data. Let’s create a new view to allow users to…
In this series of blog posts, we’re looking at how to set up a simple web app in node. In the previous installment we got the basic set up running. In this post we’re going to put the plumbing in for serving html, both static and dynamic pages. Serving static files We could serve static files using express to match on a given path like this app.get('/filename', ...) and returning the file in the…
I’ve been talking to a few people lately about how I build web applications. There’s no single right-way of doing it, but here’s my workflow, split into small blog posts you can follow. First of all, let’s create a web server using node.js. Setting Up As a prerequisite, install node.js. You can download the latest version here . You’ll also need somewhere on your computer to save the files you’re…
Setting up a Google Hangout is not obvious, here are the steps I take to create one. 1. Create the Hangout On Air Go to https://plus.google.com/hangouts/onair , and click ‘Create Hangout On Air’. 2. Configure the Hangout Set the title, description, start and duration. I also invite the relevant people/circles. You should see your hangout in a list here: https://plus.google.com/events You’re all…
Introduction Orleans helps the developer with concurrency problems in a distributed system, by providing single instances of your objects running in a single thread (we call these grains). This eliminates problems such as competing threads attempting to access singleton resources. However, concurrency problems can still be encountered. Perhaps you have two users of your system looking at the same…
Yesterday we had a very interesting and productive Orleans meetup, which included the Orleans product team (Sergey and Gabriel) as well as Hoop from 343 Industries. I suggest you watch the recording if you’re interested in the future of Orleans. On the call Sergey mentioned that he would like to make the deployment of Orleans easier. Here are my thoughts. Azure SDK Plugins The Azure SDK has a…
Download the io.js binary io.js can be downloaded here : https://iojs.org/download/ You just need the iojs.exe file itself which you can get from the nightly builds, for example: https://iojs.org/download/nightly/v1.0.0-nightly2015011284fa1f8c46/win-x64/ Place this file in a bin directory. Configuring Azure To tell Azure Websitest that you want to use this version of node, rather then the version…
Thanks to Yevhen Bobrov for pointing this out. The default behavior of an Orleans system is to respond to external signals. Your grains are activated when required, so with no requests coming into the system, nothing happens. The bootstrap provider enables you to hook in some code at silo startup. There are a variety of reasons for doing this, perhaps you want to set some local grains up, or…
The default grain placement behavior in Orleans is to activate grains on a random silo in the cluster. However, it is possible to change this behavior on a grain-type basis, by adding an attribute from the Orleans.Placement namespace to the Grain interface. using Orleans.Placement ; namespace MyGrainInterfaces { // you should probably just choose one of these! [ LoadAwarePlacement ] […
Disclaimer, this post is opinionated, poorly researched, and really just the thoughts in my head. In the office we have a healthy, ongoing discussion about language choice. We generally discuss some hypothetical long term (10, 25, 100 year?) software project, and which language would be the most suitable. With no real requirements it’s more of a fun debate than a serious design exercise, but you…
I have been playing around with the Julia programming language for about a week. I like it. It has a easy to read syntax, and makes sense. What surprised me the most was after an afternoon I had submitted two PRs on GitHub for libraries in the HTTP stack. It’s not normally the case that I can get my head around a language that fast. Ok, my contribution was small, and I have by no means mastered…
I have moved my blog to GitHub. I’m fed up with wordpress, and prefer the simplicity of Jekyll and git, using GitHub pages for hosting. The code highlighting is also more pleasant (and supports Julia!). function foo () println ( "hello world" ); end You can fork my blog if you like, and use it to create your own.