On Tuesday it was our fourth .NET Oxford, and this time we had a slightly different format ... In order to give more people the opportunity to get up and talk, we decided to go with a lightning / grok talk event. There was actually quite a lot of interest, and the speaker slots filled up very quickly with a really good line-up ...
Before continuing, I'd like to thank our amazing sponsors Corriculo Recruitment, who as usual, did an fantastic job, not only covering the venue costs and providing everyone with plenty of liquid refreshments, but also making everyone feeling very welcome, and for being a great part of the .NET Oxford team!
Speaking of liquid refreshments - they came up with a great idea of having themed beers at the meetups. Eg. a particular country per meetup perhaps? So if you have any ideas for this, do let us know!
As there were more talks than usual, we were on quite a tight schedule - so we decided to keep the intro fairly short, skipping out the news section for once. Thanks to the Build conference, the news section at our last meetup had more than enough news to make up for not having one this time!
After thanking Corriculo Recruitment, I then introduced the three prize draw sponsors - before realizing that I had unfortunately messed up! Matt's talk was first, so to avoid having to switch laptops, I shared the intro talk slides to his laptop - completely forgetting that it didn't have my Prizedraw WPF app on it! Standing on stage isn't the best time to realise this, but luckily we have quite a forgiving audience, and no-one objected to switching the prize draws to just before the break ...
We had three prize draws for this meetup. All of which were very kindly provided by the companies themselves ...
Our first giveaway this month was an NCrunch licence. For those who haven't hard of NCrunch - it's a Visual Studio extension which adds live unit testing. This means that whilst you're coding, it's running your tests in the background and visually showing you (via dots in the side gutter) whether the code is covered by passing or failing tests, or not covered at all. That's a very simplistic explanation, and doesn't really do it justice - if you're doing any form of TDD, this is amazing - you're getting live feedback from your tests as you type your code!
A huge congratulations to Tom Dutton for winning the NCrunch licence!
The next giveaway was our regular e-book giveaway very kindly provided by Manning Publications! They always let the winner choose whatever e-book they like from their site, and they certainly have a large selection of tech books to choose from!
This month's winner goes to Andrew Withers!
The last giveaway (but most certainly not least!) was from Oz-Code! A Visual Studio extension that puts the debugger ON STERIODS! And that's really no exaggeration. Just take a look on their website for plenty of animated gifs demonstrating their many features!
This Oz-Code winner this time actually went to one of our speakers tonight - James World! He told my in the pub afterwards that he had recently installed the trial version, so was chuffed to bits with his prize! Perfect timing!
The first talk was by our very own Matt Nield. He's the Development Manager at Ridgeway, is big in the Kentico space, and has even been recently awarded his Kentico MVP! His blog can be found at Mattnield.co.uk.
The main focus of Matt's talk was about headless CMSs, and why they're the next big thing in the CMS space. This really makes me happy, as personally as a developer, I see them as a necessary evil. I just want to write code and use the latest and greatest modern shiny technologies - .NET Core, Angular2, Xamarin, etc. I really don't want to be held back by an all encompassing CMS platform that requires older technologies. We're living in a micro-service / API world after all and we have various different ways of viewing content - from web to mobile, so we do not want to be so tightly coupled to a CMS platform.
So enter the Headless CMS ...
Matt starts off explaining the history and evolution behind CMSs, then moves onto explaining what headless CMSs are and why we would want this - eg. decoupling the content management from the view technologies. He then finishes off with a demo of Kentico Cloud.
Like myself, this was his first talk at .NET Oxford, and he did a great job - really looking forward to hearing more from him at future events!
One of the first questions James asked everyone at the start of his talk was who here uses Git. Most people put their hands up. He then asked who thinks they're an expert in Git. Whilst I think I know Git very well, I'm glad I didn't put my hand up to this question - as his first few slides showed Git commands that I'd never heard even of! A very fast paced talk covering a lot of detail.
James' first slide was a graphic symbolizing a single Git node. He expressed the beauty of this node, explaining how it is the very core of what Git is all about. Everything in Git is a node. In fact, this is always the first thing I start with when explaining Git to developers who are new to it - stop thinking of source control as a list of changes, and start thinking it as a graph of nodes.
James then shows various commands that we as developers don't tend to use normally - allowing us to use and browse Git as a file system, using commands such as
git cat-file, etc.
Even as someone who uses Git daily and is very confident with things like rebasing, and Git's various common use-cases - I really would still like to re-watch a few times to really soak it in the extra less common bits and pieces he went through. Luckily, I can now do just that!! James has now put an extended version of his talk on YouTube! ...
Anže starts off telling us about his food map. He's a coeliac, and being a self proclaimed geek, keeps an extensive food diary - including photographs and GPS coordinates! He decided to store all this information in the Azure Data Lake and use simple U-SQL to look at the photos, and using Azure Computer Vision (cognitive services) figure out if it’s a picture of food.
He then used PowerBI to visualize this data on a map.
Rather than going into too much detail here and getting bits wrong - he's saved me the trouble, by writing an awesome blog post himself all about his talk! ...
The next was my talk! This is the first time I've done a talk at .NET Oxford (other than the intro talks that is). Although in fairness, thanks to the massive amount of news from the recent Build conference - last month's intro talk was almost as long as this talk!
Most people who know me, or read my blog, know that I'm a huge fan of LINQPad. I'm often quite often surprised by how many .NET developers don't actually use it though, or even know its many use-cases. So that's what this talk is all about - sharing the LINQPad love and showing people what it can do, and demoing some common use cases.
At the start of my talk I asked three questions ... who has heard of LINQPad? who is a .NET developer? and who uses LINQPad on a day to day basis. For both of the first two questions - most hands went up. However, as I expected, not many hands went up for the last question. I was actually quite relieved, as if all hands had gone up, then my talk would have been a complete waste of time! So at least I had lots of people to convert!
I then introduced the UI, and showed a few basic expressions being run, showing the awesome dump output, and explaining the different types of query (eg. expression, statement(s) and program), before moving onto demoing querying an actual database ...
For the demo database, I wanted a very basic schema that most people could relate to without thinking too much about it. The obvious choice was the typical
Product. I showed a SQL script which created those tables, and then ran it from LINQPad. Then I showed another LINQPad C# script which seeded some demo data, before moving over to a new query window to demo querying the database. I wanted to show that you could literally just type
Order, and then use the hyperlinks in the output window to drill down into your data without messing around with lots of SQL join commands. When I showed this, and pointed out that all I'd done is typed
Orders, I'm sure quite a few lightbulbs went on in the room!
I then showed a more custom LINQ query where it was querying specific data, and also using the
Util.Image(..) method to render the product image inline in the results.
Finally for the context of database, I showed how you'd update a database - both within your script, or editing inline using the data grid view.
Dealing with databases of course isn't the only use-case for LINQPad. Far from it! I discussed various other use-cases - eg. prototyping (introducing the nuget package manager); automation (mentioning the
lprun.exe command line tool); testing code snippets (eg. ones you might find on Stackoverflow), etc.
My talk ended with a prize draw for a LINQPad Premium licence, which was very kindly provided by the creator of LINQPad - Joe Albahari! A big congratulations to the winner of the licence - David Marrs!
The talk received fantastic feedback, with lots of people saying to me that they were going to start using it. I was especially chuffed by this tweet that Frans sent out! ...
... who also said that he was going to repeat my talk internally to his team at the company he owns getting everyone there using it too! I think I should be on commission! ;)
(ignore the SQL in the photo - the rest of the demo was C#! ;))
Speaking of Frans, he was then up next for his talk on GDRP! This stands for General Data Protection Regulation. Sounds pretty boring right? Actually, no - it was pretty scary! Well, scary certainly for businesses that write software! Frans gave us all a lot to think about, and it sounds like software companies will have a lot of work to do to comply with this new replacement to the outdated data protection act. I certainly need to do a lot more reading for projects that my company is working on! Something I wouldn't have even considered if it wasn't for Frans' talk!
We're already in the transition period, where companies need to start making the transition, and the deadline is the 25th May 2018, which will be here before we know it!
Given the importance of the topic, rather than me trying to remember the details and accidentally spreading false information due to getting it wrong - Fran's is going to share the slides from his talk which summarizes the main points. They're not quite ready yet, but I'll update this post when his slides are available.
Last, but most certainly not least, was Robin Minto telling us about the OWASP ZAP security tool! I've obviously heard of OWASP, but I hadn't actually heard of ZAP other than for Robin's talk. This is definitely now going to become a commonly used tool in my toolbox!
Robin shows us his demo site that he built containing deliberate security issues, then he uses the ZAP tool to crawl the site very quickly testing many different types of security vunerablies - eg. XSS, SQL Injection, and many many more.
He even showed running this on his company's production site by spinning up XAP in Docker (which is a great way of not having to install Java to use the tool).
The ease of using this tool to scan your site for vunerabilities was quite an eye opener. He also points out that you can do this from the command line to allow easily incorporating these scans into your build and automated test pipeline. Definitely a tool all web developers should have in their toolbox!
As usual following our meetups, the story continued at the pub! Due to the length of the talks, all the Q&As were deferred to the pub. This actually just turned into the usual dev geek-out at the pub - which we all love! :)
Next month's meetup has already been announced on Meetup.com, and we're very excited to be having Matt Ellis from Jetbrains telling us all about their new Rider IDE! But there's a slight twist - we're programmers right? We want to go a bit deeper than just being shown a few features in an IDE (as awesome as those features may be!). Instead, Matt'll be taking us further under the hood discussing how they took Resharper out of process as a headless language server, and how they managed the communications between it and Rider.
Looking forward to seeing you there! ...