Saturday, December 22, 2018

[ADVENT 2018] Current state of F# 4.x tooling and IDE ecosystem on December 2017

Hi my dear blog readers!

First of all, happy holidays! Now I’m back to joining Sergey Tihon’s  F# advent blog 2018 gathering! Smile


My past 2017 advent blog is available here: https://fsharpmonologue.blogspot.com/2017/12/advent-2017-current-state-of-f-4x.html

In this blog entry, I bring you the states of F# news and updates in two major subtopics: the tooling ecosystem, and the community surroundings.

F# state in December 2018


A lot has happened in 2018, particularly the progress that has been made from Microsoft, F# communities, and the whole cool participations on F# github repo.

To increase clarity, let’s start discussing F# tooling ecosystem.

F# tooling ecosystem updates

The F# tooling is basically evolved since 2005 (as research project before integrated in Visual Studio) into these components:

  1. F# Language Specification
  2. F# Compiler
  3. F# Core libraries
  4. F# Compiler Services (since 2013)

Note that although F# Compiler Services derives from F# Compiler, the F# Compiler Services is very important. Because it brings parity with Roslyn as compiler service. It is also a good sample of having the compiler created with the language you want to compile.

Thanks to its flexibility and power, F# Compiler Services can be used as true component, and it is suitable to be used as language services.

Ionide use F# Compiler Services heavily to provide F# support in Visual Studio Code, and it enjoys many features available in Visual Studio.

Now in Visual Studio 2017 from 15.6, these are the noteworthy F# updates:

  1. Versioning model has been changed to decouple from Visual Studio version releases. This brings F# tooling more freedom and flexibility to progress further, although F# tooling is closely related to a VS release, as described in this RFC of F# versioning plan on GitHub. A follow up article by Phillip Carter brings more detail that VS 2017 15.7.x has F# 4.4, and 15.8.x has F# 4.5, like the captured table below. Note: there will be no 4.2, 4.3 version, it will be version 4.5 or later.
  2. Related to previous point, VS 2017 15.7 will have F# 4.5. And this version will be the same version as F# Compiler Service related iteration.
  3. F# supports the same semantic of ValueTuple as Struct tuple (since 15.6). This brings closer compatibility with the .NET class library of ValueTuple in .NET Framework 4.7.
  4. F# supports full file ordering for .NET Core 2.0 or later project (since 15.6)
  5. Realtime multi TFM targeting (a.k.a. multi targeting in .NET team blog, since 15.6). This brings unique experience compared to other language tooling such as C#/VB, because C#/VB doesn’t have this yet!
  6. Go to definition from the member tooltip (since 15.6)
  7. Removal of dependency to Windows 10 SDK (since 15.6). This brings less size and leaner requirement to have F# development.
  8. ..and many more in 15.6! For more detail, please visit this official blog post: https://blogs.msdn.microsoft.com/dotnet/2018/03/06/f-language-and-tools-update-for-visual-studio-2017-version-15-6/

This is the versioning illustration:

image

This is nicely documented as RFC in F# Language Design repo in https://github.com/fsharp/fslang-design/blob/master/tooling/FST-1004-versioning-plan.md

In 15.7, F# tooling keeps updated too. These are the noticeable updates:

  1. New F# template for ASP.NET Core 2.0 project! This is a very amazing progress since 15.5, because now we could create ASP.NET Core using F# Open-mouthed smile
  2. Enabled generating F# AssemblyInfo from properties with the F# compiler in the .NET SDK. This is not trivial but it is closer to C#/VB feature to support common AssemblyInfo infrastructure that common in C#/VB project.

A quick hands-on sample to use F# new ASP.NET Core template is by executing “dotnet new web –lang f#” like this illustration: (I run against .NET Core 3.0 Preview 1)

image

Now let’s see what’s inside this folder:

image

Looking at the content of Program.fs, we now see that we have the same quick start from C# template:

image

This code implies that we use Kestrel by default.

To be maximally applicable to use F# with ASP.NET Core, I recommend to use Visual Studio Code 1.28 with the updated Ionide.

Now, the other wonderful things happened since July 2018 are the updates from communities!

Bonus fun fact of Microsoft F# repo: it uses Azure DevOps since June as the main CIs!

image


F# community tooling update

These are the best updates from community so far:

  1. Paket now supports .NET Core 2.2 and .NET Core 3.0 as one of its TFM support since 5.181.0.
  2. Fable is reaching version 2.1, and it has tons of bug fixes

That’s it folks!!

Happy holiday and Merry Christmas!

Saturday, December 15, 2018

Speaking at DevOps ID event on Shopee, presenting DevOps culture adaptation and quick demo of Azure DevOps

Yes, another speaking opportunities in the last month of 2018! The date was 13th December, 2018.

In this event, I was invited by Hananto, leader of DevOps Indonesia community (also commonly called DevOps-ID). This is the first time I was asked to participate to speak for community beyond or outside my own community!

Therefore, I feel grateful and many thanks to Hananto for this opportunity! Of course, I always welcome for invitations from other community, not just from my own such as MUGI and Lambda Jakarta.

The host, Shopee, has nice arrangements of materials and speakers, not just me. I am glad that I could see one of their engineer presenting the experiences on optimizing internal’s Shopee apps, with basic telemetry and logging.

I bring the topic of having gentle intro on DevOps, not just as concept but also a culture.

It is common in Indonesia that most companies see DevOps as a dedicated team that oversees both Development (Dev) and Operations (Ops), without actually trying to ensure collaborations and interactions between those two. Therefore, frictions are often seen later instead of continuous communication and collaboration.

I also gave quick intros on how easy Azure DevOps to use with Azure using free basic app services, so dev and ops can have the same streamline experience on how basic cycle of DevOps can be simplified but still applicable on both Dev and Ops department.

Here’s the pictorials from the event:




And this is me, delivering the presentation:







And demo time using Azure DevOps project on Azure!




Then we have fun wrapping up and photo session:




Thanks to DevOps ID community and Shopee, of course!

My slide deck is available here:  https://1drv.ms/p/s!Ak-RlH5R7H66hrZEY8kd9mrGkIVobA

Friday, November 30, 2018

Speaking at MUGI Purwokerto meetup event about DevOps on Azure

Hi my fellow bloggers and audiences! It turns out in 2018 I have had many requests to speak more, and I’m grateful!

Compared to last year, this year I have more than two speaking engagements! It is quite surprising to myself, because usually maximum speaking frequency each year is twice, and at least once.

This November, my speaking engagement is now at Purwokerto to provide DevOps awareness. Thanks to Agus Suparno and his crew of MUGI Purwokerto, I had the chance to visit this small city with my wife.

The event was on 24th November 2018, and it was a continuing collaboration between MUGI Jadetabek and MUGI Purwokerto.

Pwt_DevOps_on_Azure

The preparation of the event was quite long, it was prepared since September. This is quite normal, because usually any tech events in Indonesia must be announced at least two months before, to provide the event awareness early so the audiences could come at least 80% of the expected audience number.

The event was held on Universitas Muhammadiah Purwokerto (Muhammadiah University of Purwokerto), courtesy of the lecturers and the MUGI’s representative there.

The agenda is: opening speak by the lead EO (also one of MUGI Purwokerto lead at Universitas Muhammadiah), by major informatics study head of Universitas Muhammadiah, Azure quick intro by Agus Suparno, and myself about having DevOps on Azure.

I was amazed of the audience’s enthusiasm! The number of the audiences were about 88% of projected 180 audiences!

This was the pre-event reregistration:

DSC_0521

And then everyone entered the room (it was a special room for student’s final paper assignment):  

DSC_0525

These are the opening speaks: (left to right: EO lead, the major head, and Agus Suparno)

DSC_0528DSC_0534DSC_0546

And then myself spoke:

DSC_0553DSC_0561

There’s no official definition of what DevOps is, so I deliberately use the most succinct DevOps definition from Microsoft:

image

for more information about DevOps by Microsoft, please visit this link: https://aka.ms/DevOps

In the near end of the event, we had a small quiz/game:

DSC_0563

Event Retrospective

I have to admit, I have to talk about this. When I started my speaking, most of the audiences many students weren’t aware of DevOps at all. So I had to went back to explaining that the SDLC today has been more demanding, in a sense that most theories thought at universities (unfortunately) couldn’t keep up well enough with the industries, especially software engineering industry. I know this quite often because even in Jakarta, not most of us are aware of DevOps, as part of common modern SDLC. I remembered I had asked about this on my previous speaking at DotnetConf Indonesia 2018 and Azure DevOps on Azure Day.

But many universities have been teaching more conceptual thinking of having true OOP, procedural programmings, regardless of what the languages you learns initially for more than 8 years. This is a welcoming sign, as more and more student are becoming polyglots Smile

I was amazed that Universitas Muhammadiah has started to provide this polyglot awareness in its early semester in informatics majors. Usually I know that there are not so many universities provide this mindset, and as far as I know only a small of handful universities: UI, ITB, UGM, and my own former college, iSTTS. So now yes, I am now adding Universitas Muhammadiah on my list of unis that provides conceptual mindset of polyglot. KUDOS to University of Muhammadiah!

Sunday, September 30, 2018

Speaking at dotnetConf Indonesia 2018

HI there, my blog audiences!
After watching full sessions of dotnet Conf on Channel9: https://channel9.msdn.com/Events/dotnetConf/2018
Now we have dotnetConf in Indonesia!
This event is held on 29th September
But to be honest, the dotnetConf Indonesia is not a complete relay, it’s within the same spirit of the dotnetConf itself: celebrating .NET world as we know and use extensively, especially on using .NET Core on your dev machine, cloud, and on mobile/any devices!
Thanks to Dicoding (https://www.dicoding.com) and Buitenzorg Maker Club (Bogor’s IOT community) to co-host and also promote this event, we have gathered around 100+ attendances!
dotnetconf2018_dicoding_poster
So in this event, we focus on .NET ecosystem and also its application, such as Blockchain using Nethereum, an open source implementation of Ethereum using C# and .NET Core.
I speak on having gentle intro on .NET Core 2.1, and currently at version 2.1.4 (and the related SDK version is 2.1.402).
I also have demonstrated how easy to develop and also at the same time have CI for free using Azure DevOps, as long as it’s open source projects Smile
The demo also focus on the fact that we can code in C#, F#, VB.NET on .NET Core!
.NET Core, although it is quite new, it is a true cross platform of .NET. It is not the same as .NET Framework that only runs on Windows.
Although .NET Core has about 80% API compatibility (except of course excluding Windows-specific API such as WPF, Windows Forms, and Workflow), some of the namespaces haven’t been ported yet.
Some namespaces that needs more works are the parity in System.Data, System.Data.Common, and some inconsistent detail on .NET Framework HttpContext and comparable .NET Core HttpContext.
I gave demo and also gentle intro on .NET Core 2.1, but from the feedback on the audiences, I had to give intro on .NET Core first then .NET Core 2.1.
This is not surprising, because most companies in Jakarta that uses .NET don’t know much or even somehow don’t care much about .NET Core.
We have always hoped that this event will bring more awareness that there is .NET Core, a truly cross platform of .NET and it is also performant!
Here’s the pictures from the event:
dotnetconf_eriawan_00
dotnetconf_eriawan_01
dotnetconf_2018_speaker_namecard
I gave the swag of this event:
dotnetconf_eriawan_02
Here’s Fuad giving presentation on DevOps in general:
dotnetconf_fuad_devops_01
And this is some of the speakers including me:
dotnetconf_speakers_01
From left to right: Puja (MVP), me, Marsya (MS Indonesia), and Fadhil (MVP)
Due to the fact that many of the audiences and also developer communities in Jakarta have asked me to provide blog to track .NET Core, I will spin off a new blog that’s specific to .NET Framework and .NET Core interop!
Watch this blog for the announcement Smile

Tuesday, March 13, 2018

Speaking at MUGI Purwokerto’s meetup: Azure Day on March 3, 2018

Hi my blog audiences! Now on this March 2018, I have speaking session!
In the end of February, I got a warm speaking request from Agus Suparno. He’s a Visual Studio MVP like me, and also a chairman of MUGI Purwokerto. He cordially invited me as speaker for his MUGI Purwokerto’s meetup, themed Azure Day on March 3, 2018.
So I immediately accepted his invitation and speaking request Smile
The Azure Day meetup is held at Microsoft Indonesia, BEJ, Jakarta. Again, thanks to Microsoft Indonesia for providing the venue!
This is his initial public invitation:
MUGI_Purwokerto_AzureDay_20180310
Agus spoke about Gallery Server on Azure, one of the marketplace template on Azure to store and manage files. And yes, I spoke .NET Core on Azure!
Basically I drove the audience to have quick intro on .NET Core, then have some demos on .NET Core runs on Linux on Windows 10.
Yes, we can use Windows 10’s Windows Subsystem for Linux (WSL) feature to have supported Linux distro runs inside Windows 10. I really mean it, runs inside Windows 10 instead of running on VM!
Since Windows 10 Creators Update, you can just use add/remove Windows Feature and ensure that WSL is checked:
image
For more information, please visit this official doc on Windows 10 WSL: https://docs.microsoft.com/en-us/windows/wsl/install-win10
I have chosen Ubuntu 16 as my distro choice.
I have installed .NET Core SDK 2.0.1 before the meetup, and it installed nicely!
After installing .NET Core SDK 2.0.0, you’ll have this dotnet –info results:
image
And then you’re good to go!
It is advisable to install .NET Core SDK at least 2.1.4, because it contains latest bug fixes.
Now, using Azure, we can just use the Azure DevOps template to quickly learn the Azure integration with Visual Studio Team Services (TFS cloud version).
For the sake of simplicity and quick setup, I have created the Azure DevOps solution that has integration with my VSTS account:
image
Now, looking at the URL of the application endpoint, we have http://azureaspnetcoremugi.azurewebsites.net/
image
Yes, it runs fine and kicking!
So here’s the pictures from the meetup:
MUGI_Purwokerto_AzureDay_20180310_01
MUGI_Purwokerto_AzureDay_20180310_02
We had pictures for the attendees and speakers:
MUGI_Purwokerto_AzureDay_20180310_04
And last but not least, having closing picture with Agus and MS Indonesia’s host, Jody:
MUGI_Purwokerto_AzureDay_20180310_03
This is also the initial collaboration of MUGI Jadetabek and MUGI Purwokerto!
See you on the next MUGI sessions, my blog audiences!