Power Pages presentation slide deck from aMS Singapore/Kuala Lumpur is here 👍

J'ai eu l'occasion de présenter la session "Power Pages : low code .. really ?" à l'aMS de Singapore et de Kuala Lumpur, qui sont une révision révisée de celle réalisé en Juin 2022. Notamment des informations importantes au niveau licencing.

La voici âžĄïž https://www.dropbox.com/s/uqy5o141ggwtl8x/aMs%20Singapore%20-%20Kuala%20Lumpur%20-%20Power%20Pages%20introduction.pdf?dl=0

How to integrate OpenAI API (Text, Codex, DALL-e, ChatGPT coming soon) in your .NET Core app in 15 minutes

OpenAI API overview (from Open AI)

The OpenAI API can be applied to virtually any task that involves understanding or generating natural language or code. We offer a spectrum of models with different levels of power suitable for different tasks, as well as the ability to fine-tune your own custom models. These models can be used for everything from content generation to semantic search and classification.

To makes it a little more understandable, so with OpenAI API you can : generate and edit text, generate/edit/explain code, generate and edit images, train a model, search, classify and comapre text. Checkt the documentation here.

We will use DaVinci GPT-3 model in our app, but you can try other models :

LATEST MODELDESCRIPTIONMAX REQUESTTRAINING DATA
text-davinci-003Most capable GPT-3 model. Can do any task the other models can do, often with higher quality, longer output and better instruction-following. Also supports inserting completions within text.4,000 tokensUp to Jun 2021
text-curie-001Very capable, but faster and lower cost than Davinci.2,048 tokensUp to Oct 2019
text-babbage-001Capable of straightforward tasks, very fast, and lower cost.2,048 tokensUp to Oct 2019
text-ada-001Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.2,048 tokensUp to Oct 2019

Important : today (02/17/2023), ChatGPT API is not yet available but OpenAI indicates that it will come soon.

Phase 1 : get your secret API key

  1. Go to the OpenAI website and create a new account
  2. Signup for an OpenAI account
  3. Confirm your email address
  4. Log in to your account and navigate to the 'View API keys' dashboard
  5. Click on 'Create a new secret key'

Store your API key in a secure location. You can test the API right now, but if you intend to use OpenAI API in a real workld case scanerio, check OpenAI documentation for details on usage and pricing.

 Phase 2 : create you .NET Core project to consume OpenAI API

  1. Open Visual Studio 2022
  2. Create a new .NET Core project (in my case a Web API)
  3. Install the 'OpenAI' NuGet package as below :

4. In your program.cs file, just copy the following code (replace the apiKey with yours, generated in phase 1)

using OpenAI_API;
using OpenAI_API.Completions;

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.UseHttpsRedirection();

app.MapGet("/givemesecretoftheuniverse", (string prompt) =>
{
    var apiKey = "sk-5ucaz1m00000000000000000000000000000000";
    var answer = string.Empty;

    var openAIAPI = new OpenAIAPI(apiKey);

    var completionRequest = new CompletionRequest
    {
        Prompt = prompt,
        Model = OpenAI_API.Models.Model.DavinciText,
        MaxTokens = 2000
    };

    try
    {
        var result = openAIAPI.Completions.CreateCompletionAsync(completionRequest);

        if (result != null)
        {
            foreach (var item in result.Result.Completions)
            {
                answer += item.Text;
            }
            return Results.Text("Answer of the universe : " + answer);
        }
        else
        {
            return Results.BadRequest("Not found");
        }
    }
    catch (Exception)
    {
        return Results.Problem("OpenAI API is not available or key are incorrect");
    }
});

app.Run();

5. Run your application, and open your Postman app or your favorite web browser to open the following URL : https://<your computer ip / localhost>:<your project port>/givemesecretoftheuniverse?prompt=what is the secret of the universe

6. The flow of the power of OpenAI will flow throught your screen 😁🚀🌚

More possibilities 🚀😁

As said earlier, you can use Codex, Dall-E, etc from OpenAI just by changing the Model = OpenAI_API.Models.Model statement and adapt your code consequently. Today, ChatGPT API is not yet available but OpenAI indicates that it will come soon.

You can also try this .NET library which is pretty cool as well : https://github.com/betalgo/openai

Conclusion

Integrating OpenAI APIs into your application is just as easy as creating a minimal API with .NET Core, so test it, learn it, and make our world a better one. With ChatGPT coming soon, accessible AI is becoming a reality.

DĂ©velopper sous VS Code / Windows en remote sur un Linux WSL / Github Codespaces en quelques minutes

Grand fan de WSL (sous-systÚme Linux) qui apporte à Windows la touche manquante comparé à un environnement de développement Mac : un véritable Shell Linux/Unix. WSL rend accessible bon nombre d'outils de développement uniquement disponible sous Linux (ou s'exécutant mieux et avec moins de configuration et de dépendances).

A cela s'ajoute le fait que vous pouvez avoir plusieurs sous-systÚmes Linux et vous en servir comme environnement de développement dédié, et cela sans avoir besoin de lancer une VM Hyper-V coûteuse en ressources et une intégration avec Windows beaucoup moindre (accÚs aux fichiers directement, intégration Visual Studio, etc). Pas besoin donc de déployer tous les runtimes et langages (Python, Ruby, Go, NodeJS, etc) sur votre machine de production Windows.

Cet article vous présente le développement avec un environnement distant WSL, mais cela s'applique à bon nombre d'autres scénarios dont le service Github Codespaces.

Prérequis

  • Windows Terminal : la fine fleur du terminal sous Windows (mĂȘme si Commander a encore un peu d'avance mais Terminal suffit largement dans la majoritĂ© des scĂ©nario)
  • WSL installĂ© (Windows 10/11) : voir la documentation suivante et avec une distribution dĂ©ployĂ©e
  • Extensions Visual Studio Code :
    • Remote - WSL

Installation de VS Code Server sur vos distro WSL

En une ligne : dans votre shell Terminal connecté à votre systÚme WSL, saisissez :

code

Laissez le systĂšme installer le serveur (hĂŽte) tout seul :

Puis laissez VS Code s'ouvrir pour vous tout seul :

En prime vous aurez droit d'avoir un walkthroughs "Get started with Remote -WSl" à vous mettre sous la dent pendant quelques minutes pour vous aider dans vos premiers pas à bien comprendre le développement remote sur votre distro Linux.

Vous pourrez aussi ouvrir directement le répertoire courant dans lequel vous avez lancer code grùce à l'explorateur :

Le terminal VS Code est déjà directement branché sur votre shell WSL :

Vous pouvez maintenant installer tous les langages et les extensions nécessaires pour faire de votre WSL votre environnement de développement.

Extensions

Les extensions de votre VS Code ne seront pas activĂ©es dans cette configuration de travail Ă  distance sur votre instance WSL. En rĂ©alitĂ©, ils n'ont pas les droits pour accĂ©der aux fichiers distants ni d'exĂ©cuter des scripts Ă  distance. C'est pour cela qu'il existe des extensions de "lieu de travail" - on utilisera workspace pour la suite 🙄 - qui eux s'exĂ©cutent dans l'environnement distant et peuvent donc accĂ©der aux fichiers, permettre de dĂ©bugger, exĂ©cuter des scripts, etc. (voir schĂ©ma dans la partie suivante pour mieux comprendre l'architecture).

Il faudra les réinstaller dans l'hÎte de travail à distance WSL :

Attention : soyez patient il faudra parfois un peu de temps pour que l'extension s'installe et que l'UI de VS Code réagisse pour vous dire que c'est en cours ou installé.

Optionnel : comment ça marche techniquement ?

Je ne ferais pas mieux que la documentation qui vous présente cela trÚs bien : Supporting Remote Development and GitHub Codespaces | Visual Studio Code Extension API

Bonne lecture pour les plus techniques d'entre vous.

Conclusion

Que dire à part : à vous les joies d'un environnement de développement Linux tout en restant sur votre Windows pour utiliser le meilleur de ces deux mondes !

Vous pourrez trouver quelques informations supplémentaires spécifiques à l'utilisation d'un environnement distant WSL dans la documentation Developing in the Windows Subsystem for Linux with Visual Studio Code.

Les slides de ma session « Power Pages : no/low code .. really ? »

J'ai eu l'occasion de prĂ©senter la session "Power Pages : low code .. really ?" le 21 Juin 2022 Ă  Aix En Provence lors de l'aMS Aix / Marseille. Cet Ă©vĂšnement, composĂ© d'une bonne base de MVPs tous aussi sympa les uns que les autres (c'est aussi un critĂšre de sĂ©lection non ? 🙄) Ă©tait sous le signe de la convivialitĂ© et de partage. Alors dans cette tradition, voici mes slides (c'est une premiĂšre version ... tout comme Power Pages ...) :

https://1drv.ms/p/s!ApqY-zke0ZFbgo9luwgiOxAwBSZYOQ?e=JBaweV

PnPJS 3.2.0 est sortie et liste des projets PnP recommandés

Ce n'est pas tout frais, mais ça valait le coup de s'arrĂȘter quelques minutes dessus. Comme tout dĂ©veloppeur SharePoint, la librairie PnPJS est l'une des pierres angiulaires de nos projets => pnp/pnpjs: Fluent JavaScript API for SharePoint and Microsoft Graph REST APIs (github.com)

C'est avec plaisir que la version 3.2.0 est sortie corrigeant quelques petites coquilles que j'avais pu voir lors de mes derniers projets, et apporte aussi quelques nouveautés qui nous faciliteront la vie pour la suite, je vous laisse consulter le CHANGELOG pour voir de quoi il en retourne spécifiquement.

Je vous partage aussi quelques uns des projets de PnP que je suis activement :

25 ans pour le meilleur IDE du moment : Visual Studio 🎂🍰

Ce mois de Mars 2022 marque les 25 ans d'un des meilleurs IDE du moment (et des derniÚres années) pour les projets .NET et bien d'autres : (sans suspens) Visual Studio !

Revivez l'expĂ©rience et l'histoire de l'Ă©volution de cet IDE au travers d'un site dĂ©diĂ© pour cet occasion âžĄïžAnniversaire Visual Studio 25e (microsoft.com)

Depuis, devenu une famille de produit, Visual Studio a donnĂ© lieu Ă  une version plus lĂ©gĂšre et orientĂ©e Ă©diteur de code multi-plateforme/multil-langage avec l'excellent Visual Studio Code, l'Ă©diteur de code du moment tout lange de dĂ©veloppement confondu comme le rĂ©vĂšle le sondage stackoverflow de 2021 âžĄïžđŸ€©https://insights.stackoverflow.com/survey/2021#section-most-popular-technologies-integrated-development-environment

Pour rappel, Visual Studio est disponible gratuitement dans sa version Community tĂ©lĂ©chargeable ici : Visual Studio 2022 Community Edition – TĂ©lĂ©charger la derniĂšre version gratuite (microsoft.com)

Bon anniversaire Visual Studio !

SharePoint maintenance mode to track webpart issue

As a SharePoint consultant, I often bump into issues with pages in SharePoint OnPrems and Online. To resolve these cases, we - SP consultants - need to deploy our super magic powers (what our clients think we have) 🙂

Most of the page, an error in a page is due to a bug in a webpart raising an exception, sometimes it's a delegate control but this is another story for another blog post. Here is one magic trick to debug the pages and identify which webpart is running wrong.

SharePoint OnPrems / Classic

Starting from SP 2010, and for next version of OnPrems installation, just add ?contents=1 at the end of the page URL. This will open the page in maintenance mode and display all webparts in this page.

Modern SharePoint

Like a lots of developers I tried the old way and failed ... thanks to this Microsoft support article, it gives you the right URL suffix to add to your URLs to enter the web part maintenance mode

In the address line of your browser, append ?maintenancemode=true to the end of the URL for the page. Checkout the Environment property in the mainten

You can find more documentation on these links âžĄïž Maintenance mode for client-side web parts | Microsoft Docs and âžĄïž Open and use the web part maintenance page (microsoft.com)

Bonus : how to disable SPFx web parts ans extensions

Ayt the end of this nice Microsoft article there is a golden tips âžĄïž "If you need to troubleshoot a SharePoint page to see if there is a SharePoint Framework extension or web part causing issues you can append ?disable3PCode=1 to the URL to disable loading of SPFx components" that helped me a lot recently, so I share it to you.

Master piece : all useful SharePoint URLs

You can find every useful SharePoint URLs to save your life every day with SharePoint developement :Useful SharePoint URLs – SharePoint Stuff

Windows 11 : mes raccourcis préférés avec la touche Windows

Exploiter toute la puissance d'un systÚme d'exploitation, c'est avant tout de savoir se servir des raccourcis de celui-ci, et Windows en est particuliÚrement doté !

Je vous livre quelques uns de mes raccourcis avec la touche Win(dows), mais sachez que Microsoft a dotĂ© chacune des lettres de notre alphabet avec des raccourcis et mĂȘme des combinaisons avec Ctrl & co ... c'est pour dire la culture des raccourcis de cet OS !

Win + D : Afficher er masquer le bureau

Win + E : Ouvrir l'explorateur de fichiers

Win + I : Ouvrir les ParamĂštres Windows

Win + M : RĂ©duire toutes les fenĂȘtres

Win + P : Sélection du mode de présentation

Win + . OU Win + ;âžĄïž vous ouvre le panneau des emoticons + GIF + le raccourci indispensable pour les messageries😍

Win + flĂšches : positionner la fenĂȘtre en cours sur l'Ă©cran ou les Ă©crans

Win + espace : changer de langue du clavier

Pour les autres raccourcis, vous pourrez trouver ceux-ci et bien plus encore dans la Docs de Microsoft âžĄïž Raccourcis clavier dans Windows (microsoft.com)

[20th anniversary of .NET] Best of C# : null operators

In this series, I'd like to share with you my best experiences with .NET / C# and the best evolutions the .NET team brings us over the time.

Today I'd like to talk about null operators 🙂 C# provides 3 operatrs to make it easier to with with nulls :

  1. Null conditional operator
  2. Null coalescing operator
  3. Null coalescing assignment (new in C# 8)

You can find more details about these operators in this great book => Amazon.fr - C# 10 in a Nutshell: The Definitive Reference - Albahari, Joseph - Livres

Null-conditional operator

The ?. operator is also called the Elvis operator and as originally introduced in C# 6. It allows you to call methods and access members like the . operator except that if the left operand is null, the expression is evaluate to null without throwing the killer exception 'NullReferenceException'.

string s = null;
string sUpper = sb?.ToUpper(); // sUpper is null

The only condition is that the final expression/assignment is capable of accepting a null (exit all value type) :

string s = null;
int lengthS = s?.Length; // Won't compile

Then use a Nullable :

string s = null;
int? lengthS = s?.Length; // Ok

Null-coalescing operator

The very useful ?? operator tells to return the value of the left operand if it's not null, else return the specify value (right operand - example : default value)

string s = null;
string sDefault = s ?? "My default value"; // sDefault is "My default value"

Another good use of this operator is to check an assignment and rise an exception if null (example in ASP.NET controller or anywhere else) :

_companyRepository = companyRepository ?? throw new ArgumentNullException(nameof(companyRepository));

Null-coalescing assignment (C# 8)

The ??= operator assigns a variable only if it's not null. So it's a sugar syntax to replace this :

if (s != null) s = "Hello world";

with this :

s ??= "Hello world";

Add data attributes in Razor view with HTML helper method

With HTML 5 and JS frameworks heavily using data attributes within HTML tags, Razor views could cause you a headache without this little tip for attributes.

For example Data attributes have a syntax like "data-*". If you add the hyphen within the name of an attribute in your anonymous class, Razor engine will interprets it simply as a minus sign ... and won't compile !

To add a Data attribute (or any other attribute with a hyphen within the name) within an HTML helper, you should replace the hyphen with an underscore. Hence, Razor engine will understand this and converts it to a hyphen in the HTML output.

@Html.DropDownList("Country", ViewData["Countries"] as SelectList, new { @class = "selectpicker", data_style = "btn-form-control" })

The HTML output will be:

<select id=”Country” name=”Country” class="selectpicker" data-style=”btn-form-control” />