GitHub Copilot: A young Jarvis?

I recently watched yet another time travel TV series on Netflix. This time out of South Korea. I forgot the name, so in looking it up I realized that time-travel K-dramas are very much a thing, lol. Anyway, it’s called, “Sisyphus: The Myth”. It comes to mind because the writers of the show were fond of having characters repeat the quote,

The future is already here – it’s just not evenly distributed

William Gibson

I mean, for a time travel show, it’s fine. And I think they probably got what they were going after since here I am, quoting them, quoting Gibson. But look, I wrote about Jarvis about two years ago. Sort of wondering when will that kind of tech be available. Of having a sort of programmatic au pair who would come alongside and help not just with syntax and formatting, which admittedly, has existed for a long time, but with coming up with the actual code based on your intent.

In that blog post, I didn’t put a time horizon on it, but I thought, “maybe soonish”. This week though, I realized it’s already here.

I just got access to the still-in-beta GitHub Copilot.

It’s been blowing my mind and I didn’t even read everything on the tin, I just dove right in. In following the first example, it involved creating a method to get the difference between two dates:

First example … writing a method with GitHub Copilot’s help.

Again, I didn’t read everything, so I wasn’t sure what would happen when I began the method definition, but things fell into place quickly. I typed the “function calculateBetweenDates(” and sure enough, just like I have grown accustomed to with IntelliSense, I saw a prompt.

But, unlike IntelliSense, these prompts weren’t based on any methods I had written or that was available in some framework/library that had been loaded. These prompts came from Copilot’s body of knowledge.

Now, excited, I wanted to use an example of something I would do from time to time.

For a lot of my current projects there’s a “sign in to your cloud provider” step. So, that’s the method I went with. I wrote, “function signInToAzure(” and after a tab, Copilot has inserted the full method.

Playing just a bit more, in the generated method, I noticed the need for something related to the AAD_AUTH_URL. So, I started a method, “function GetAzureADAuthUrl” and voila, Copilot understood and gave me the method.

These are simple examples, but I really dig how it works.

I’ve got an AFRAME project I wanted to take this on a spin with, so I’ll see it in action in more detail, but this is very groovy already.

Now, just like Tony in Iron Man 2, the question of if he should even be the hero, wielding the suit while being the child and prime beneficiary of a massively successful arms company, the moral questions are in no short supply with Copilot. This includes the licenses of the code used to train Copilot, and whether they permit it to exist in its current form.

Nat Friedman, GitHub CEO weighed in on some of those issues here, essentially concluding,

We expect that IP and AI will be an interesting policy discussion around the world in the coming years, and we’re eager to participate!

Nat Friedman, HackerNews

I’m still in experiment-and-play mode with Copilot, observing where the technology goes, but I’m mindful of the arguments about its existence and will keep tracking that.

Here’s to Jarvis, he’s a teenager now, but already showing promise.


Learning to scale.

My friend Christopher shared this on Facebook. It’s a queue for CXC results.

Tomfoolery. That’s the adjective that bubbled into my mind when I saw this screenshot and understood what it was describing.

Admittedly, this was a bit harsh. I mean, someone built this, they took the time to craft a way to deal with the rush of users trying to get their examination results from the Caribbean eXamination Council (CXC). They (CXC) have a classic seasonal scale problem.

During the year, the number of users hitting their servers is probably at a manageable level. And when results come up, they probably literally see a 10-fold increase of access request. They’d have the numbers, but I think this guess is reasonable.

I was curious about the traffic data on, so I got this from

Their solution may have been reasonable in 2012, when maybe scaling on the web was more of a step-wise move in terms of resource management than a flexible thing as it is today. Scaling may have meant buying new servers and software and getting a wider team to manage it all.

But there are solutions today that don’t necessarily mean an whole new IT investment.

SAD sporting
I really dig this chart from Forbes demonstrating the seasonality challenge

So, how do you contend with seasonal IT resource demand without breaking the bank? Design your solution to leverage “The Cloud” when you need that extra burst.

“The Cloud” in quotes because if things were as easy as writing the line, “leverage The Cloud” then we wouldn’t be this deep on a blog post about it. So, specifics, here’s what I mean:

Plan the resources needed. In this case, it might be a solution that uses load balancing where some resource is handled on-prem and capacity from the cloud is used as needed. Alternatively, an whole new approach to sharing the resources at play might be worth investigating – keeping authentication local, but sending users to access results stored in the cloud via a serverless solution is a great consideration.

I don’t want to spec out the entire solution in two paragraphs. I do want to say CXC can and should do better, since they serve the needs of much of the Caribbean and beyond.

Cloud teaching

Exploring the differences between SaaS, PaaS and IaaS

In Cloud Technologies class today, we used both the course outline and the notes from MSFTImagine’s Github repo to talk through the differences in service offering.

I used the canonical service model responsibility chart to start the conversation off.

Service Model Division of Responsibility, via MSFTImagine on Github.

It’s fairly straightforward to talk to these divisions, of course. I often use it to drive home the NIST 2011 definition of cloud services. With emphasis on the service delivery models.

In today’s presentation, one of the things that jumped out at me was the slide that provided a distinction between SaaS Cloud Storage and IaaS.

SaaS or IaaS, via MSFTImagine on Github.

Finally, when talking about the ever versatile Salesforce, and how its PaaS solution works out it reminded me of the Online Accommodation Student Information System (OASIS 🙂 ) that I had built when I was in undergrad.

I’d built OASIS as a commission for the Office of Student Advisory Services. It was a tool to help off-campus students more easily find accommodation. Prior to OASIS all the information was a notebook in an office. It was built before I learnt about the utility-based computing of cloud. I’m thinking about using that as the basis of an exploration of the architectural changes need to move an old service to the cloud.

Hopefully, I’ll be able to revisit it when we touch on Cloud Design Patterns.

Cloud teaching

Cloud Technologies – 2017. Ready, class 1

Started back with the UWI Cloud Technologies course today. This class was an Introduction to Cloud generally, with some conversation about the course outline and expectations for assignments.

We still in the process of confirming the course outline, so I’ll share that next week. But I used the slides from the technical resources provided by the Azure Computer Science module on cloud technology.

On my way to class I met up with Naresh who runs the UWI’s Department of Computing and Information Technology servers. He gave me a quick tour of their deployment. I’m looking forward to him sharing some stories from setting up that environment in our IaaS classes in a few weeks.

Recommended reading for today’s class is Consumption Economics: The New Rules of Tech


Teaching Cloud Technologies (2016/2017)

We just concluded another run of the Cloud Technologies course at the University of the West Indies. This course is part of the MSc Computer Science program.

As lecturer, I had to come up with the course outline as well as the content. In so doing, I get the opportunity to refresh what we talk about as well as how we approach assignments.

This course comprised of ten modules:

  1. Intro to Cloud Technologies
  2. Cloud computing infrastructure
  3. Virtualization
  4. Big data
  5. Cloud development patterns
  6. Cloud resource management
  7. IaaS Automation
  8. Microservices
  9. IoT
  10. Cloud for Research

Though our primary cloud platform is Microsoft Azure, students are free during assignments and project submission to use other cloud providers.

One of the assignments involves virtual machine scale sets and containers. The draught goes like this:

Z. Zanko Systems provide sales processing systems for large commercial banks.

They receive more than 5 million JSON requests per hour (revised to 300,000).
Each request must be stored in permanent storage. The format of the request is:
“{“TransactionID”:”1″,”UserId”:”A1″,”SellerID”:”S1″,”Product Name”:”Financial Trap”,”Sale Price”:1000000,”Transaction Date”:” “}”

You have been hired as a System Developer by Zanko. You have access to VMs whose capacity is equal to that of A1 VMs in Azure IaaS or Containers of similar capacity.

Develop a mechanism to generate the requests your system faces.

Design and implement a solution using a container-based approach or a
virtual machine-based one to process 5 million requests in an hour.
For your receivers introduce a failure rate.
Store the occurrence of failures.
Justify how you chose to store and monitor failures.

Though most students can build this out using azure, one enterprising student chose to use AWS and reading his submission was a nice view of getting this done using Amazon’s resources vs Azure.

This year, Microsoft put a halt to the Azure for Education Academic grant, but did have a number of other ways for students to get into cloud, including DreamSpark and other offers.

The project component this year changed a bit, too. In the two years prior, we asked students to build working cloud services themselves. This year, we asked them to propose a cloud service that featured understanding of:

  • Cloud service definition
  • Cloud service models
  • Cloud delivery models
  • Cloud for research
  • Cloud development with a regional focus

We saw some excellent solutions that we hope to hear more about in the future.


Teaching Cloud

I’m lecturing at the University of the West Indies this year.  I’ll be teaching the MSc. course in Cloud Technologies.  This year, I’ll be working along with Alysia Huggins. She’ll be bringing expertise in distributed systems to the course, but not just that, some very cool approaches.

  • We’re looking to have more interaction from professionals, so there’ll be in-class Skyping, interviews and assignments that require our students to get out and look around at what’s happening in the region ’round Cloud Technologies.

Their first assignment will be to take a look at IaaS and start to answer the question, “Is the West Indies ready for building/deploying it’s own IaaS services”?


Teaching (again)

Last year, I taught three courses.

  • Intro to Mobile Applications
  • Software Engineering
  • Cloud Technologies

I hadn’t done any lecturing for a while, and the opportunities came around fairly suddenly, but it was good to be back in class and sharing experiences. Mobile Apps & Software Engineering were taught at the University of Trinidad & Tobago.

I’ve found that interacting with the students and faculty is excellent for understanding how important the relationship between industry & practitioners and institutions can be.

That’s it for now, but I’ll write on Cloud Technologies another time.