Diary of a code trotter

Laurent Bugnion

I am really happy to welcome you here. This page displays the 10 most recent entries of my blog.

For older posts, please go to this page where you can browse the whole content.

For other content, please visit my main page at https://galasoft.ch

Thank you for your visit!!
Laurent

DateTime.Now: No, no...

Azure, Technical stuff, Work
See comments

This post was cross-posted to Dev.To, an awesome community!

Recently my colleague and friend Donovan Brown was in Switzerland for customer visits and for the DotNet Day conference in Zurich. I took the occasion to spend some time with him and we got to talk (as you would expect) about geeky and "cloudy" stuff.

One topic of discussion (and that was also mentioned by one of the clients) is: What do you need to get ready for the cloud... and one topic was: Timezones!!

What time is it, really?

Because of all the regions we have, it means that your code suddenly has the potential to easily go global :) So here's a fun experiment you can do:

  1. Create a new web application. Here I use Visual Studio to create an ASP.NET Core web application with Razor pages.

  2. In the HTML code, display the local time and the UTC time. In ASP.NET, I can use the following code in the index.cshtml:

Local time: @DateTime.Now

UTC: @DateTime.UtcNow

In Razor pages, you can call C# code directly from the CSHTML markup, which is very convenient.

  1. Run the application locally. If like me you are based in Western Europe, you should see something like the below (notice the 2 hours difference between local time and UTC). If you are based somewhere else, it will vary, but there are very good chances that the Local time and the UTC time are going to be different (except of course if you happen to be in a timezone where the local time is the same as UTC).

Running the application locally

  1. Now deploy your application to Azure, into the West US region. You can do that from Visual Studio directly, or create an App Service in the Azure Portal and deploy there.

  2. Run the West US application. Now you should see the same time displayed for Local and for UTC.

Running the application in Azure

What?

So that might be a surprise, and in fact I wasn't expecting that when I first did this experiment a few months ago.

What's going on here is that the Azure architects decided to make it easy for people to migrate web applications (App Services) from region to region without changes in code used to calculate time and time differences. So they run all the Azure servers on UTC. On the other hand, this has the disadvantage that you might have to modify your code to take this in account when you migrate from on-premises to the cloud

For example, if I am based in Switzerland and deploy my application to Western Europe (which is based in the Netherlands), I would expect my application to have the exact same DateTime.Now in Azure than locally. And yet...

The morale of the story...

The big learning here is that if you are looking to migrate to the cloud, suddenly timezones become very relevant, but not necessarily in the way that you would imagine. It's not that you need to know where your code will be running. It is that you need to know that these regional questions will be abstracted.

It would be a great idea to prepare yourself to the migration by doing the right thing already now on premises: Do not use DateTime.Now in your code but use DateTime.UtcNow instead and do the conversions where needed. This way you are already abstracting the location of your code, and when you migrate to the cloud and the location becomes irrelevant or unpredictable, your code will continue to work without being affected.

Happy coding

Laurent

Creating the simplest possible ASP.NET Core form with a POST method

.NET Core, .NET Standard, ASP.NET, Razor
See comments

Simple HTML form in ASP.NET Core

Recently I needed to create a simple page for someone to submit an HTML form. The rest of the Azure aplication is running on Azure serverless functions, Logic apps and Cognitive services, but for that last part I wanted something where the user can click on a link, open the page in a web browser (probably on a mobile device), enter a passphrase in a form and then submit through a POST to an SSL encrypted page. I thought of writing a small Xamarin app and submitting through POST to an Azure Function. Another option would be to use a static HTML page and to use Javascript to submit the Form through a POST to that Azure Function. I don't exclude these two options for the future.

But in the meantime I wanted to experiment with a simple Razor page (CSHTML) that would present an HTML Form to the user, and submit this Form to itself with a POST over HTTPS.

I noticed that the documentation is not great about how to do this in the simplest possible manner and so I created an example with source code and complete instructions.

I hope this is helpful to you!

Happy coding

Laurent

2018 in review, planning for 2019

Azure, Cloud Developer Advocate, Conferences, Microsoft, Personal, Work
See comments

As 2019 is starting, I want to take a moment to reflect on 2018 and think about next year.

After joining Microsoft and the Azure Cloud Developer Advocates team in August 2017, 2018 was the first full year I spent in this team. I had decided to travel a lot and speak in places I had never spoken before, connecting with developers and communities that I had never met earlier. This meant a lot of travel, but I am happy to report that all went very well, I stayed (mostly) healthy (except for a small episode of the flu probably caught on a Singapore-Zurich flight), and I learned a lot of things, both about Azure and about myself :)

The conferences

I listed below all the conferences I spoke at in 2018. There was a total of 53 sessions, some of them online, most of them in person. I loved creating and giving these sessions, but most importantly I loved connecting with the attendees. If I had to pick my two favorite events of 2018, I would probably select two user group events :

More...

Meetup in Sao Paulo, Brazil (December 11, 2018)

.NET, .NET Standard, Conferences, Work
See comments

I am super happy to announce that on December 11, 2018, I will be presenting my session .NET Standard, .NET Core, why and how? to the .NET Sao Paulo User group.

DotNet Standard DotNet Core

You can register for this talk today! It's a free event and Microsoft will be offering free food and drinks.

More...

Where can you find me at NDC Sydney?

Cloud Developer Advocate, Conferences, MVVM, NDC, Xamarin
See comments

NDC Sydney

As I just arrived after a long trip from Zürich to Sydney, I thought it would be good to give an update on my activities down under.

More...

Three new videos on my YouTube channel

.NET Standard, ASP.NET, Azure, Cloud Developer Advocate, Conferences, Website
See comments

I just published three new videos on my YouTube channel. These videos are the beginning of a 14-videos series recorded live at the Modern Web Tour this July in Zurich Switzerland. You can see a recap of this session (including slides and source code) on my Presentations site.

If you like what you see, please subscribe to my YouTube channel. The more subscribers I have, the more motivated I am to create new videos :)

Title slide

More...

Where will you see me in September and October?

Cloud Developer Advocate, Conferences
See comments

Now that the summer break is over, I am preparing myself for quite a lot of travel in the coming months until Christmas. As you will see in this post, I went a little overboard with conferences, and will have the great pleasure to present in various location where I have never spoken before. This year was quite a busy year for me in terms of speaking engagements and travel, and I am so grateful that Microsoft has given me the opportunity to touch so many people and to share knowledge about the amazing services that Azure is offering. I also started recording myself during conferences and while the editing process is not as fast as I may wish, I have already put one such presentation about .NET Standard on my YouTube channel.

More...

Rebooting the blog (again...)

Azure, Blog, Cloud Developer Advocate, Website
See comments

If you have been attentive (and I wouldn't blame you if you haven't), you may have noticed that this blog was quite silent for the past few months. Apart from a blog post around the Microsoft Build timeframe, I didn't do much here. There are multiple reasons for that (aren't there always...), but the main one was that when I joined Microsoft a year ago, I also undertook a fairly big task on my free time: I decided to port my website and my blog to Azure.

APEX

More...

Meet me at Build 2018!!

Azure Functions, Build, Conferences, Microsoft, Xamarin
See comments

As I am on my way to Microsoft Build in Seattle right now, I want to post my schedule so as many of you as possible can come say hi! I really love to meet people from the community and hope that we have a good chance to talk in Seattle too!

More...

Publishing #MVVMLight V5.4.1 with .NET Standard support

.NET, .NET Standard, MVVM, Technical stuff, Universal Windows Platform UWP, Windows 10, Work, WPF, Xamarin
See comments

I just finally published MVVM Light V5.4.1 which is a stable version containing the .NET Standard support that was released as a preview a few months ago. It took a long time for this version to come out due to the new job keeping me busy as well as a few health issues in the family.

I am really happy to have this stable version out and about! Make sure to upgrade your packages! Pay attention to the following details:

More...