First time here? You are looking at the most recent posts. You may also want to check out older archives or the tag cloud. Please leave a comment, ask a question and consider subscribing to the latest posts via RSS. Thank you for visiting! (hide this)

Blog Migration to Articulate

I’m in the process of migrating my blog from Subtext to Articulate.

There are various reasons to this. First, not being MVP I don’t have  free azure subscription anymore, and I’d have to migrate anyway. Then Subtext is a very old software, based on pre-nuget libraries, and I cannot even make it to run on my own computer, so I cannot update it with things I’d like in a modern blogging engine. And finally, being more and more into the Umbraco community, I wanted to host my blog on Umbraco as well.

I already setup a blog on Umbraco and Articulate: TriathlonGeek, and is about my triathlon experience and how I’m preparing for my first full distance Ironman for 2018. It’s pretty clean and easy, but planning on adding some more features to it.

Now, what are the issues the I’ve to face when migrating from my blog to Articulate:

  1. First I need to export all posts from Subtext and import them into Articulate: this is easy as Subtext exports to BlogML and Articulate imports BlogML
  2. Then I need to copy over all pics and make sure references are still ok. There are few options I’m considering for this.
  3. Articulate doesn’t natively support comments, but it can be configured to use either Disqus or facebook. I’ll go with Disqus as it allows me to import my old comments from BlogML.
  4. Finally I need to keep the same URLs. Now I have /archive/yyyy/mm/dd/title.aspx. Articulate by default has /archive/title. No date and no .aspx at the end. With a mix of 301 redirects and custom UrlProvider to generate custom url I should have this solved.
  5. I also need to import manually all tags, as the BlogML export from Subtext doesn’t provided them.

So while recovering from surgery I’m doing all these changes and I hope to have them done by when my MSDN subscription expires, beginning of next week. If not, my blog will be down a couple of days before it’s new life on Umbraco and Articulate on Umbraco Cloud.

All about Connect() 2016

Lots of announcements the Connect(); 2016 event around the new wave of tools from Microsoft.

TL; DR; Microsoft released Visual Studio for Mac, .NET Core 1.1 (with ASP.NET Core and EF Core) and Visual Studio 2017 RC… and many other Azure related and mobile related features

Here a selection of all the posts from various offical blogs about what happened recently:

If you want to go bit more in details of some of the features, here are some more in-depth coverage of the some of them:

The conference is not over yet, so make sure you tune in at for more in depth video about the new line of Visual Studio tools and for the Future of .NET

Extending the dotnet core cli: introducing dotnet-prop

Last week, on the last day of the MVP Summit, I participated in the .NET Hackathon. There were many different topics, ranging from ASP.NET Core to Minecraft and HoloLens. But I was interested in better understanding the .NET Core tooling so I joined the table of the dotnet-cli team.

With the move from the easily editable project.json file to the old .csproj format, it became more difficult to manually edit the project file, so I built a command for the dotnet cli, to make it easier to edit some properties without messing up with the XML-based format of the MSBuild file.

The usage of the tool is very simple. First you have to add the tool to the project you want to edit by manually editing the csproj file. I know this sounds a bit weird but unfortunately there is no way to add global tools for the dotnet-cli, but only tools specific for a project. I sent a pull request to the dotnet-cli project so this step won’t be needed if they include this tool as command.

To add the reference to the tool you have to add:

  <DotNetCliToolReference Include="dotnet-prop">

Then, restore the dependencies and finally just call the dotnet prop verb from the root of project. The commands available are:

  • add, to add a property (or update one that already exists)
  • del, to remove a property
  • list, to list all the properties of the csproj file

For the moment I only implemented the possibility to add/update the following three properties:

  • version number (-v|--version), which sets the VersionPrefix property in the MSBuild file
  • target framework (-f|—framework),  which  sets the TargetFramework property
  • supported runtimes (-r|--runtime), which sets the RuntimeIdentifiers. Since one project can be built for many runtimes, this option can be specified more than once


You can find the code on my github repository:

The tool is available on nuget and will be automatically downloaded when restoring the packages of your project.

This was just a test and it’s a work in progress, so please let me know what you think of it, and which other properties should be added.

I’m also undecided on the right commands and options to use. Which of the following pattern do you think is better:

  • command for the operation (add or delete or list) and option for the property (like now): dotnet prop add –version <version>
  • command for the property and option for the operation: dotnet prop version  –add <version>|—del

The time I was top link on Hacker News and Azure killed my site: lessons learned

Monday morning (USA time) 31st October 2016, at a certain point my post about “Surface Book vs MacBook Pro” got the first position on Hacker News. It triggered a good amount of discussion, and luckly the tech-savy people commenting managed to go on using either the Google cache or directly reading from the RSS feed (which is distributed via feedburner, thus static)

What happened?

How did I notice it? Because someone wrote me on facebook that my site was down. The error I got was:


Going to page linked from the error, Azure SQL Database resource limits, looks like the problem is that I reached the maximum number of workers allowed by my SQL Basic Tier (30).

Also DTUs were maxed out, according to the resource chart from azure portal.


All these was due to the huge number of requests arriving from Hacker News, more than 40k per hour… with more than half of the response returning HTTP errors. Normally I have less than 500 per hour, so a huge peak.


I’m running on Azure thanks to my MSDN subscription, which entitles me to 130 Euro per month to spend on Azure. So I had a Standard tier for the Web and a Basic tier for SQL Server. And at the time I set them up this was almost maxing out my budget. I realized lately I was just using less than 40€ per month, so I upgraded the SQL server to the Standard tier, which has 60 workers and 10 DTUs. Unfortunaly it took 3-6 hours to scale up a database (even if mine is pretty small, less than half gigabytes). So I guess I lost the traction of the first visits from Hacker News. I would have expected Azure to allows sporadic peaks (I’m usually at half DTU all year long, and for the 3 hrs I’m above the limit they shut it down?).

What did I learn?

Short term solution, thanks to some suggestion from some friend, I setup my site under CloudFlare. It is a kind of CDN which caches my website and serves it up to the world. It caches only static files (js, css, images) but by default it doesn’t cache dynamic pages, so I’ll have to understand how to configure it to cache them and also keep the backend outside and update pages after comments have been added.

Longer term solution: Move away from Subtext and from Azure. This was already something I was planning to do since my MSDN license was a benefit of being MVP. And not making any money out of my blog (apart from the sporadic 5-10SUSD a month I get from ads) I can’t afford to spend 50€ a month on Azure fees.

I’m evaluating some options for the new home of my blog: one is making everything static, and host it on github pages. Another is migrating to another blog engine built with Umbraco, Articulate, and run it from Umbraco Cloud.

MacBookPro vs Surface Book [based on specs]

Now it is an exciting moment to buy a new laptop, with Microsoft having released its new lineup of Surface devices and Apple having released its new MacBookPro with TouchBar.

I have a super-old MacBook Pro, “early 2009” Core 2 Duo, that is still working pretty ok till now, after having boosted RAM to 8Gb and disk with an SSD. With a lifetime of 7 years and half, having kept all my previous laptop maximum 3 years, this is the longest living computer I ever had, more than twice.

But with the model getting out of support and not compatible with new macOS versions, it’s time for a new laptop to enter my home-office. If there were no Surface laptop, the decision would have been a no-brainer, but now it gets more complicate. So let’s see the specs and features of both the two models.

Note: Since none of the two laptops are available on the market, this comparison is just based on specs and personal opinions.

Microsoft Surface Book

The Surface Book is a hybrid laptop, with a 13” touch screen and pen, and a detachable keyboard that also contains additional battery and discrete graphic processor (NVIDIA® GeForce® GTX 965M 2GB).

The new version, called “Surface Book with Performance Base”, comes in 3 configurations all based on i7 Intel CPU: 8Gb RAM and 256Gb SSD and 16Gb RAM with both 512Gb or 1Tb of SSD.

The old Surface Book is still available and comes in 7 configurations, i5 or i7, with or without discrete graphic processor (still NVIDIA GeForce), 8Gb or 16Gb RAM and 126Gb to 1Tb SSD.

Apple MacBook Pro

The MacBook Pro is a standard laptop, with a new Touch Bar strip on top of the keyboard, available in both 13” and 15” displays, the latter with a quad-core i7 and a discrete graphic processor (Radeon Pro 450 2GB or 460 4GB).

In addition to these, there is also a revamped MacBook Pro 13” without the Touch Bar. In total there are more than 30 possible configurations as you can mix and match what you want. They even have 2 different clock speeds available and SSD goes up till 2Tb, with the powerful configuration being a 15” with 2.9Ghz quad-core i7, 16Gb of RAM, 2TB SSD and Radeon Pro 460 4GB.

Comparing the two beasts

Moving along from the factual information, let’s compare the products, focusing on the features that are not just coming from the specs

Processing Power

This is difficult to do a fair comparisons, especially when comparing prices later, because, while for the MacBook Pros we know exactly their clock speed and if they are dual-core or quad-core, there are no specs for the new Surface Book. I read somewhere they used the same processors of the previous model, so dual-core i5 2.4Ghz and dual-core i7 2.6Ghz. Which is more than the revamped MBP whose i5 is 2.0Ghz and i7 is 2.4Ghz, but (much) less than the new models which have an i5 with 2.9Ghz and i7 up to 3.3Ghz and even a quad-core i7 2.9Ghz for the 15”.

Update: In comments someone wrote that “processors are not benchmarked by GHz these days”. While there is more to CPU performances than GHz, they still play an important part of it. So I looked up the model numbers of CPUs, and compared their scores on PassMark benchmarks.

CPU Laptop Mark
i7-6920HQ @ 2.90GHz MBP 15” (optional) 9588
i7-6820HQ @ 2.70GHz MBP 15” (standard) 8697
i7-6700HQ @ 2.60GHz MBP 15” (standard) 8029
i7-6567U @ 3.30GHz MBP 13” (optional) 5479
i5-6267U @ 2.90GHz MBP 13” (standard) 4882
i7-6600U @ 2.60GHz Surface Book (all) 4751

So, as you can see, the i7 used by the Surface Book has even lower score than the i5 used as standard option in the MacBook 13”.

Winner: MacBook Pro


If in the pure processing power the MBP wins hands down, when it comes to graphics it’s a bit different: the MBP does have a discrete graphic processor, but only in the 15”. The MBP 13” has the integrated Intel Iris Graphics 550, but it’s nothing compared to the GeForce and even less compared to the 15” MBP.

Winner: Surface Book with Performance Base


I’ve been using a Surface Pro at work, and I came to love the touch-screen. And the new Surface Book has a touch-screen and with the addition of the pen (included), the dial and you can remove the screen and use it as a tablet. You can also buy the dock and connect it to external displays and other USB devices. This makes it the perfect hybrid device for both desktop and mobility usage.

The MacBook Pro doesn’t have a touch-screen, so no pens or dial-like devices, but it has the new Touch Bar and now a bigger trackpad (thanks to Antonio for pointing it out). Thinking back and how I use the touch screen, I mostly use it for tapping on command icons and autosuggestions while typing or navigating between tabs or scrolling pages. And for 80% of these operations, the Touch Bar is a good replacement. And comes with the added advantage of not making the screen dirty with finger marks. The disadvantage is obviously that it needs apps to be specifically designed for it, while with a touch-screen any app works. And also that you cannot draw on it: Apple has the idea right or wrong I can’t say) that if you want to draw or do things with your hands, you use a lighter a more focused device, which is the iPad.

Update: Lot of people in the community (and in comment) also complained about the MBP only having USB-C/Thunderbolt ports, and not having HDMI, USB 3 or other port. This is true indeed, but you if you are thinking of buying a 2500USD laptop, I guess you can also afford a 70USD multi-adapter, which is still cheaper than then 200USD dock for the Surface Book.

Winner: No winner … or depends on the usage, probably for a developer the touch bar is better.


The MacBook Pro, thanks to Handoff and universal clipboard, can seamlessly transition between laptop, tablet, phone (if running iOS) and even watch.

For the Surface, the transition between laptop and tablet is as easy and unplugging the keyboard, but the transition to phone is very limited and not many people still have Windows Phones.


No comparison is over without comparing prices.  The Surface Book comes only with 3 configurations, so the exercise should be fairly easy. Unfortunately there is not a single configuration exactly available in both laptops. Not all MacBooks have discrete graphic processor, and normal CPU is more powerful in MBP.

Config Surface Book MacBook Pro 13” MacBook Pro 15”
i7 8GB 256GB SSD 2399USD 2099USD 2399USD (16Gb)
i7 16GB 512GB SSD 2799USD 2499USD 2599USD
i7 16GB 1TB SSD 3299USD 2899USD 2999USD

The Surface Book is always about 300USD more expensive than the MacBook Pro 13” (which doesn’t have a dGPU) but is also 200USD more expensive than the 15” (apart from the 256SSD configuration which is 8GB vs 16GB). If you need a fully desktop/mobile solution with both devices should buy additional accessories: the 199USD dock for the Surface Book and an iPad for the MacBook Pro (399USD to 799USD depending on sizes and configurations).

Doing a bit of math: 200USD of difference + 200USD of dock – 400USD of the cheapest iPad = 0 (or 100USD if you compare to 13”).

So at the end the difference of price is negligible.


If you just want a laptop that works on its own, the MacBook Pro is a better choice: cheaper, more powerful and with a bigger display.

If you want to be able to transition between desktop and mobile there is no clear winner: depending on how you want this transition to happen – unplug a keep the same device, or move to a more focused device – and depending on which ecosystem you are already used to, you want to choose one or the other. The price and specs are very similar so I think it’s just a matter of preferences and habits.

Personally I think I’ll go with the MacBook Pro: I have iPhone, iPad and Apple Watch. And I don’t do much designing with pen and I think a tablet is more useful for my usage then an heavier multi-purpose hybrid device.

I’m no more an MVP… and that’s OK

This the time of the year when usually member of the Microsoft community post about becoming Microsoft MVP or having their status renewed for another year. I also did that for 8 years, first on my blog since I was first awarded in 2008, in 2009, then when I became a Belgian MVP in 2010, and then on social media when blogging became slower.

But this year, instead of announcing my renewal as MVP, I’ve to announce that I’m not being renewed.

The reason is simple… during the last year, apart from presenting ASP.NET Core at the Umbraco CodeGarden, I mainly worked on my upcoming book, which is not released yet. So no real tangible contribution.

Also last year they put together many expertices into one, so from being MVP on ASP.NET I became an MVP in Visual Studio and Development Technologies, together with MVPs from .NET, ALM, Security, IE and C++, so basically the “generic” Microsoft developers group which do not focus on Azure or devices. This meant more people to be compared with, and with categories that are usually more prolific in community contributions.

At first I was kind of upset and annoyed, but after some hours of introspection I remembered that being an MVP for me was a way to get into closer contact with the product groups I care, which are ASP.NET and Web Tooling. But I’m an ASP Insider, so I can still do that.

The only thing that affects me is that I’d lose my Azure credits, so I’ll move my blog away from Subtext and from Azure (the use I do wouldn’t justify the 30-40 Euro per month that I’d pay).

So, you’ll still see me this year at the MVP summit, and probably also in the years to come.

From iPhone to Windows Phone and back: why?

I just bought myself a new iPhone 7. This was a long overdue change, as since a few months my Microsoft Lumia was acting weird, and with no clear future path for Windows Phones, I didn’t want to buy something that would be useless in a few months.

Back to #iphone after seeing the #smartphone #dream of #Microsoft rise and fall #iphone7

A photo posted by Simone Chiaretta (@simonech) on

A bit of history

But let’s go back in time and see my phones.

I bought my first smartphone, an iPhone 3G, in June 2008, as soon as the first version of iPhone working in Europe was announced (iPhone 3G). I went on using iPhone for a few years, upgrading to iPhone 4 in 2010.

Then Microsoft announced its smartphone operating system, Windows Phone 7, and I almost immediately bought one to test how it worked and with the idea of building some apps. After some times I started using WP as my main phone, and never looked back for a few years, passing from the Samsung Omnia, to a Lumia 800, to a Lumia 930 in July 2014. I loved the UI, with dynamic tiles that displayed information at a glance. I also developed an newsreader for Windows Phone 7.

Then Windows Phone 8 came, and changed the way apps had to be built. And then again Windows Phone 10, and yet another change in how apps have to built.

While this is not a problem per se for end users, it is a problem for developers that had to rebuild their apps in order to be compatible with the new versions of the phones. Sometimes small changes, sometimes more fundamental changes.

This, over time, alienated developers which at the end turned into less applications available for end-users, which caused less users to buy WP phones, which didn’t incentivate developer to spend time in updating apps, and so on. And only the biggest app and companies that couldn’t afford to lose that small 5%-10% of the market (in EU, in USA I think it never grew more than 2-3 %) made apps for Windows Phone. Which IMHO was enough for most of the users: email, calendar, facebook, twitter, instagram, whatsapp, snapchat, wheather, maps, banking and the occasional games and fitness app.

Why moving back to iPhone? The fitness niche and no future

So why did I move to away from Windows Phone to an iPhone? Because recently I started being more involved into sport. I started training for triathlon. And none of the big fitness companies that produce sport watches or devices have apps for Windows Phone.  This is due to the fact that Windows Phone 10 lacks some support for connecting to these modern BLE devices (doesn’t support “code-less” BLE pairing and cannot act as BLE client to devices).

So I couldn’t sync my sport watch with my phone. Same for cyclocomputers and indoor trainers. And since these big players do not support WP, none of the popular fitness apps like Strava, TrainingPeaks and more support it either.

Another is my growing interest in connected devices, most of which comes from startups from USA. And given the afortmentioned reasons (low market share) they obviously don’t spend time in making a Windows Phone app.

Yet another, more fundamental, reason is the (no) roadmap for the future of Windows Phone. Microsoft sold the featurephone division beginning of 2016, and it was hinted that they will not make new Lumia phones and even stop selling what they have in stock. They might produce a Surface Phone, or anything else, but this level of uncertainty doesn’t help keeping the few users they still have.

Why not an Android?

I own an Android phone from Sony for 2 years already, and recently I also had a Galaxy Express for a few weeks when I was in USA and both my other phones were dead (Lumia with a unresponsive touch-screen and Sony with a broken glass).

In general the feeling of Android is less polished and a bit too technical for the user point of view. Apps are almost as many as for iOS even though not many fitness app have the same level of quality that they have on iOS.

But the thing that annoys me the most is the update of the operating system. Since every vendor has its own flavour of Android, you don’t get updates as soon as Google releases a new version. And it might pass long time before it happens (or might even never happen as it’s the case of my Xperia from 2014 which is still at Android 4.4). I know you can install ROMs and so on, but I’d rather spend my free time on OSS development and swimming/biking/running and not fiddling with technology that should “just” work.

Do you also think the small experience of Microsoft with smartphones is over? Let me know in the comment here below.

Umbraco and Me

If I can summarize in one word what is my main field of expertise I would say CMS: since I started working in 1996 I always built public websites based on CMS.

When working with Esperia, around year 2000, I developed our internal CMS, which was used to power lots of very popular websites with lots of traffic (at least for the time), like all the top Italian soccer teams, winter sport and soccer portals.

At the time, around 2003-2006, I was also using DotNetNuke to develop some sites for small businesses. It was ok for simple sites, but customizing and making a site look like the designer envisioned was almost impossible.

Then in 2006 I stopped working professionally with CMS as I worked almost one year building emailing apps in New Zealand and then other 2 years and half doing ”IT Consultancy” in Avanade. But as side I was still working on a smaller CMS, the once famous Subtext Blogging engine, which still powers this blog.

Then, a few months after my ASP.NET MVC v1 book was released, I received an email from Niels Hartvig (CEO of Umbraco) asking me if I could go to Copenhagen and give him and the core team a quick start on ASP.NET MVC because they want to rebuild it using ASP.NET MVC. At that point I had never used Umbraco before, but just evaluated it a bit some years before.

Obviously I said yes, I went there, delivered the course and immediately felt like I knew these guys since ever. Also I was fascinated by how they were working with the community to bring an edge to the product.


I immediately became engaged with the community, and gave two talks at CodeGarden 10 about ASP.NET MVC.

Accidentally, as soon as I started my new job after moving to Belgium, I was surprised that Umbraco was used for one of the main public sites of the organization I joined. So I also start working professionally with it.

Unfortunately I couldn’t always work with it, as my job requires me to juggle many different hats and various projects, but nevertheless I stayed involved into the community as much as I could, and I attended various conferences of the Belgian Umbraco User Group (or BUUG) and went again to two other CodeGarden, in 2014 and 2015.

Then the Big Bang happened… and a new project came by. For the next years, Umbraco will be the main product I’ll be working with as we’ll be rebuilding all our online presence using this amazing CMS, and most of the things we’ll customize will be given back to the community, both as packages and PR to the Core.

At first, coming from my background of “purist” .NET developer, I didn’t like too much the mixed approach that required developer to configure the system using the backoffice as it prevented a proper code versioning and Ci to happen. But with the help of the great people in the community I solved most of the issues. And now, with Umbraco 7.4, almost all these issues are solved, thanks to strongly typed models and some tools that help with the versioning of stuff that is still configured in the backoffice.

Now that I’ll be working full-time on Umbraco expect to see something more coming out of me in the Umbraco community and conferences in the future. And if you missed it, I also just had a talk about ASP.NET Core at CodeGarden 16 (slides and demo are available).

And hopefully soon I’ll be moving my blog from this totally dead Subtext to Articulate on Umbraco.


Slides and demo for my ASPNET Core talk at Umbraco CodeGarden 2016

Talk notes

Yesterday I had the pleasure to introduce ASP.NET Core to a very crowded and interested room at Umbraco CodeGarden.

I really liked the conference and the amazing best OSS community ever, and even got more hooked to Umbraco if that’s even possible.

Now I just want to list the links and resources I mentioned during my talk.

If you attended my talk, I’d love if you could comment or tweet me (@simonech) and tell me what you thought of it, both about the topic itself and about my presentation.

Apparently there were videos recorded, so I’ll post a link when they’ll be online.

How to debug .NET Core RC2 app with Visual Studio Code on Windows

So, you installed .NET Core RC2 , you followed the getting started tutorial and you got your “Hello World!” printed on your command prompt just by using the CLI.

Then you went the next step and you tried to use Visual Studio Code and the C# extension to edit the application outside of Visual Studio.

And finally you want to try and debug and set a breakpoint inside the application, but you encountered some problems and nothing worked. Here is how to make it work.

Specify the launch configuration

Visual Studio Code needs to know how to launch your application, and this is specified in a launch.json file inside the .vscode folder. From the debug window, click the “gear” icon and Code will create it for you: just choose the right environment “.NET Core”.

Then you must specify the path to your executable in the program property. In the standard hwapp sample app, replace

"program": "${workspaceRoot}/bin/Debug/<target-framework>/<project-name.dll>",


"program": "${workspaceRoot}/bin/Debug/netcoreapp1.0/hwapp.dll",

There is much more you can specify in the launch.json file. To see all the options have a look at the official doc: Debugging in Visual Studio Code.

Specify the task runner

If you try to debug now you’ll have another warning: “No task runner configured”.

This is because for launching, VS Code has to build the project, and this is done via a task.

But no worries, just click the “Configure Task Runner” button in the info box, choose which task runner you want to use, in this case “.NET Core”, and the tasks.json file will be created for you.

More info on task runners in VS Code can be found on the offical documentation: Tasks in Visual Studio Code.

Running and debugging

Now you can click the “Start Debugging” button or F5 and the application runs. Cool…

Now you set a breakpoint and the executions stops where you set it, doesn’t it? Well… if you are on Mac or Linux it does. But it doesn’t stop if you are on Windows and the Debug Console says something like:

WARNING: Could not load symbols for 'hwapp.dll'.
'...\hwapp\bin\Debug\netcoreapp1.0\hwapp.pdb' is a Windows PDB.
These are not supported by the cross-platform .NET Core debugger.

Introducing Portable PDBs

In order to be able to debug cross-platform, .NET Core has now a “portable PDB” format, and the newly introduced .NET Core debugger for Visual Studio Code only supports this format. Unfortunately by default, on Windows, the .NET Core build generates standard “Windows PDBs”, which are not supported. But the fix is easy, you just have to tell the compiler to generate portable PDBs.

This is done by specifying the debugType to be portable.

  "buildOptions": {
    "debugType": "portable"

And voila! Breakpoints are hit!