20.11.21

connexion NordVPN par script

wget https://repo.nordvpn.com/deb/nordvpn/debian/pool/main/nordvpn-release_1.0.0_all.deb
sudo dpkg -i nordvpn-release_1.0.0_all.deb
sudo apt-get update
sudo apt-get install nordvpn
nordvpn login
sudo usermod -aG nordvpn $USER
redémarrer la machine
nordvpn login
entrer le user et mdp
nordvpn connect

dans un fichier nordvpn.sh
#!/bin/bash
nordvpn connect

chmod +x nordvpn.sh
puis dans les applications au démarrage rajouter le script

//pour ouvrir la connexion localhost et NAS p.ex 

nordvpn whitelist add subnet 192.168.1.0/24
nordvpn whitelist add port 5000





https://support.nordvpn.com/fr/Connectivit%C3%A9/Linux/1569821662/Installation-et-utilisation-de-NordVPN-sur-Debian-Ubuntu-Raspberry-Pi-Elementary-OS-et-Linux-Mint.htm

nordvpn login - S’identifier.
nordvpn connect ou nordvpn c - Se connecter au VPN. Pour se connecter à des serveurs spécifiques, utilisez nordvpn connect <code_de_pays numéro_de_serveur> (par exemple : nordvpn connect uk715)
nordvpn disconnect ou nordvpn d - Se déconnecter du VPN.

nordvpn set ou nordvpn s - Définir une option de configuration.
Options possibles :
nordvpn set cybersec on ou off - Activer ou désactiver CyberSec.
nordvpn set killswitch on ou off - Activer ou désactiver le Kill Switch.
nordvpn set autoconnect on ou off - Activer ou désactiver la connexion automatique. Vous pouvez définir un serveur spécifique pour une connexion automatique à l’aide de la commande nordvpn set autoconnect on code_de_pays+numéro_de_serveur.

Exemple : nordvpn set autoconnect on us2435.

nordvpn set dns 1.1.1.1 1.0.0.1 - Définir un serveur DNS personnalisé (vous pouvez définir un DNS simple ou deux DNS, telle que l’indique cette commande).
nordvpn set protocol udp ou tcp - Alterner entre les protocoles UDP et TCP.
nordvpn set obfuscate on ou off - Activer ou désactiver les serveurs obfusqués.

nordvpn whitelist add port 22 - Ouvrir le port entrant 22 (le numéro de port peut être différent). Vous pouvez mettre en liste blanche plusieurs ports - il suffit de les séparer avec un espace.
nordvpn whitelist remove port 22 - Supprimer la règle ajoutée avec la commande ci-dessus.
nordvpn whitelist add subnet 192.168.0.0/16 - Ajouter une règle pour mettre les sous-réseaux spécifiés sur liste blanche.
nordvpn whitelist remove subnet 192.168.0.0/16  - Supprimez la règle de mise des sous-réseaux spécifiés sur liste blanche.

nordvpn settings - Afficher les paramètres actuels.
nordvpn status - Afficher le statut de connexion.
nordvpn countries - Afficher la liste de pays.
nordvpn cities - Afficher la liste de villes. P. ex., nordvpn cities united_states
nordvpn groups - Afficher une liste de groupes de serveurs disponibles.
nordvpn logout - Se déconnecter.
nordvpn help ou nordvpn h - Afficher la liste des commandes ou l’aide pour une commande

 

28.10.21

C# ConnectionString Oracle

La dernière ligne permet d'utiliser complètement LINQ, sinon possibles problèmes avec les update lors du SaveChanges() this._connectionString = "DATA SOURCE=url:port/instance;" + "PASSWORD=admin123;" + "PERSIST SECURITY INFO=True;" + "USER ID=admin;" + "load balancing=false;ha events=false;";

14.6.21

1.6.21

EntityFramework DbContext SQL

var customerList = db.Customers.SqlQuery("Select * From Customers").ToList<Customers>();

int customerId = db.Database.SqlQuery<int>("Select customerId From Customers where customerName='MAHDI'").FirstOrDefault<int>();

int result = db.Database.ExecuteSqlCommand("delete from Customers where customerId = 100");

6.5.21

MB Aorus pas de réseau sous ubuntu

 //installation kernel 5.9 minimum
sudo apt-get upgrade
sudo apt-get update
sudo wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-headers-5.9.0-050900_5.9.0-050900.202010112230_all.deb
sudo wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-headers-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb
sudo wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-image-unsigned-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb
sudo wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-modules-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb
sudo dpkg -i *.deb

- reboot
- uname -r

- aller ici : https://www.realtek.com/en/component/zoo/category/network-interface-controllers-10-100-1000m-gigabit-ethernet-pci-express-software
- télécharger 2.5G Ethernet LINUX driver r8125 for kernel up to 5.6
- sudo apt-get install make gcc
- sh autorun.sh
- sudo touch /etc/NetworkManager/conf.d/10-globally-managed-devices.conf
- sudo service network-manager restart

28.4.21

Mes applications Ubuntu

 sudo apt-get install make gcc clementine audacity kdenlive ubuntu-restricted-addons ubuntu-restricted-extras pulseaudio unetbootin mediathekview asunder playonlinux teams

 steam

discord

vscode

jdownloader

lutris

virtualbox

webcamoid

teams

skype

obs

brave

falkon

gameconqueror (https://github.com/scanmem/scanmem)

nordvpn

nordpass

btop

cpu-x

 

Git

//télécharger git pour windows
https://git-scm.com/download/win
https://desktop.github.com/

//tester si ok
git --version

//dans un terminal aller dans le répertoire souhaité
//récupérer le projet en local
git clone https://github.com/USERNAME/REPOSITORY

//mettre un nouveau fichier et l'uploader
git add newFile.txt
git commit -m "Un message obligatoire pour pouvoir commiter un fichier"
git push

26.4.21

Appel d'une procédure stockée (Stored Procedure) SQL SERVER

DROP PROCEDURE dbo.sp_xxx;
create procedure dbo.sp_xxx @DossierId INT
AS
DELETE FROM Winning WHERE dossierId = @DossierId
DELETE FROM Dossier WHERE Id = @DossierId

EXEC dbo.sp_xxx@DossierId = 536244;

//appel d'une procédure stockée
            Entities ep1 = Entities.GetEntities();
            DbCommand cmd = ep1.Database.Connection.CreateCommand();
            var parameter = cmd.CreateParameter();
            parameter.ParameterName = "@DossierId";
            parameter.Value = 536244;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "dbo.sp_xxx";
            {
                cmd.Connection.Open();
                Console.WriteLine($"resultat : {cmd.ExecuteNonQuery()}");
            } catch (Exception e)
            {
                Console.WriteLine(e);
            } finally
            {
                if (cmd.Connection.State == ConnectionState.Open)
                    cmd.Connection.Close();
            }

6.4.21

extract mp3 ubuntu

sudo apt-get install lame rhythmbox gstreamer1.0-plugins-bad

dans rhythmbox, burger, préférences, musique, format préféré : MPEG Layer 3 Audio

menu ... --> extraire

30.10.20

Entity Framework SQL Select dynamic

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.Entity;
using System.Dynamic;
using System.Linq;

namespace ConsoleApp1
{
    public class Program
    {
        static void Main(string[] args)
        {
            FactureEntities fe = new FactureEntities();
            List<dynamic> results = SQLHelpers.DynamicListFromSql(fe, "select a.nom as a_nom, a.prix as a_prix, c.nom as c_nom from article a inner join categorie c on a.categorieid = c.id where a.id > @xxx", new Dictionary<string, object> { { "xxx", 0 } }).ToList();
            foreach (var r in results)
            {
                Console.WriteLine($"{r.a_nom} - {r.a_prix} - {r.c_nom}");
            }
            Console.ReadLine();
        }
    }

    public static class SQLHelpers
    {
        public static IEnumerable<dynamic> DynamicListFromSql(this DbContext db, string Sql, Dictionary<string, object> Params = null)
        {
            using (var cmd = db.Database.GetDbConnection().CreateCommand())
            {
                cmd.CommandTimeout = 300;
                cmd.CommandText = Sql;
                if (cmd.Connection.State != ConnectionState.Open) { cmd.Connection.Open(); }

                if (Params != null)
                {
                    foreach (KeyValuePair<string, object> p in Params)
                    {
                        DbParameter dbParameter = cmd.CreateParameter();
                        dbParameter.ParameterName = p.Key;
                        dbParameter.Value = p.Value;
                        cmd.Parameters.Add(dbParameter);
                    }
                }

                using (var dataReader = cmd.ExecuteReader())
                {
                    List<string> listNameFields = null; 
                    while (dataReader.Read())
                    {
                        listNameFields = new List<string>();
                        var row = new ExpandoObject() as IDictionary<string, object>;
                        for (var fieldCount = 0; fieldCount < dataReader.FieldCount; fieldCount++)
                        {
                            int i = 1;
                            string fieldName = dataReader.GetName(fieldCount);
                            //pour éviter l'erreur de plusieurs noms de champs avec le même nom (duplicate key field)
                            if (listNameFields.Any(l => l == dataReader.GetName(fieldCount)))
                            {
                                fieldName += i++;
                            }
                            listNameFields.Add(fieldName);
                            row.Add(fieldName, dataReader[fieldCount]);
                        }
                        yield return row;
                    }
                }
            }
        }
    }
}

16.10.20

GitHub et NuGet dans Visual Studio

//GitHub (https://www.c-sharpcorner.com/article/how-to-connect-visual-studio-project-to-github/)
- se connecter sur github.com
- créer un nouveau repository (WpfHelpers)
- cocher public, Add a readme file, add .gitignore, choose a licence
- dans visual studio créer une nouvelle solution avec un projet (Class Library (.NET Framework)) dans ce répertoire
- (dans les propriétés du projet, ajouter les "Assembly Information")
- fichier "ajouter au controle de code source"
- aller dans "Team Explorer" (onglet à droite)
- double clic sur le projet dans git locaux
- cliquer sur "Sync"
- cliquer sur "Publish to GitHub"
- remplir les infos et cliquer sur "Publish"
- se connecter à github et contrôler que les fichies soient bien présents10:06 16.10.2020
- depuis visual studio dans "Solution Explorer" on peut voir les modifications faites, faire un commit, puis un "Pull" depuis le "Team Explorer"

//NuGet (https://docs.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package-using-visual-studio-net-framework)
!!!A TESTER AVEC LA COMMANDE dotnet pack
- aller sur nuget.org et télécharger nuget.exe et le mettre dans le dossier du projet
- dans visual studio, mettre le projet en "Release"
- dans une cmd lancer la commande "nuget spec nom_du_projet.csproj", cela créé le fichier nom_du_projet.nuspec
- remplir le fichier avec les bonnes valeurs (id, version, authors, description) et supprimer éventuellement (projecturl et iconurl) ou ce qui apparait comme avertissement dans la commande suivante

<?xml version="1.0" encoding="utf-8"?>
<package>
  <metadata>
    <id>DelphivesHelpers</id>
    <version>1.1</version>
    <title>WPF Utilities</title>
    <authors>Delphives</authors>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <license type="expression">MIT</license>
    <description>utilities for WPF</description>
    <releaseNotes>Add RelayCommand</releaseNotes>
    <copyright></copyright>
    <tags></tags>
<dependencies>
      <group targetFramework=".NETFramework4.5" />
    </dependencies>
  </metadata>
  <files>
    <file src="bin\Release\*.*" target="lib/net45" />
  </files>
</package>

- ajouter les balises dans le fichier :

    <dependencies>
      <group targetFramework=".NETFramework4.5" />
    </dependencies>
  </metadata>
  <files>
    <file src="bin\Release\*.*" target="lib/net45" />
  </files>
</package>

- lancer la commande "nuget pack nom_du_projet.nuspec" et un fichier "$id$.1.0.0.nupkg" est créé
- aller sur nuget.org et se connecter
- aller dans le menu upload et charger le fichier .nupkg créé précédemment
- par défaut le package est en attente de publication, ensuit on reçoit un email qui nous confirme la publication
- recherche le package depuis nuget manager
//GitHub récupérer un projet existant
fichier, "cloner le dépôt"
- parcourir un dépôt en se connectant à GitHub
- sélectionner le répertoire, le chemin et appuyer sur "Clone"




//optionnel - installer l'extension "GitHub Extension for Visual Studio"

6.10.20

Fond transparent avec Gimp

- ouvrir l'image dans gimp
- dans le menu calque - transparence - ajouter un canal alpha
- dans le menu sélection - par couleur
- dans le menu édition - effacer
- sauvegarder

30.9.20

WPF Avalonia Ubuntu vscode

 http://www.avaloniaui.net/

1. télécharger le zip des templates : https://github.com/AvaloniaUI/avalonia-dotnet-templates
2. sudo add-apt-repository universe
   sudo apt-get install apt-transport-https
   sudo apt-get update
   sudo apt-get install dotnet-sdk-3.1 dotnet-runtime-3.1 aspnetcore-runtime-3.1
3. dotnet new --install avalonia-dotnet-templates-master/
4. dotnet new (il doit y avoir les nouvelles options avalonia)
5. créer un répertoire pour la solution --> mkdir testAvalonia
6. cd testAvalonia
7. ouvrir ce dossier dans vscode
8. avec solution-explorer créer une nouvelle solution
9. dans le terminal aller dans le dossier testAvalonia
10. dotnet new avalonia.app -o MonApp (créé un répertoire 'MonApp' avec un projet à l'intérieur)
11. dans vscode ajoute le projet à la solution
12. builder l'application
13. dans un terminal aller dans testAvalonia/MonApp/bin/Debug/netcoreapp3.0/
14. lancer ./MonApp

23.9.20

déployer asp.net core sur ubuntu

dans visual studio :
- clic droite sur le projet
- publier
- créer un nouveau profile et publier dans un dossier
- cliquer sur publier
sur le serveur ubuntu isntaller les composants .net core :
- sudo apt-get install apt-transport-https && sudo apt-get update && sudo apt-get install dotnet-sdk-3.1 dotnet-runtime-3.1 aspnetcore-runtime-3.1
installer le serveur apache :
- sudo apt-get install apache2
- sudo a2enmod proxy proxy_http proxy_html proxy_wstunnel
- sudo a2enmod rewrite
- sudo gedit /etc/apache2/conf-enabled/netcore.conf

18.9.20

Entity Framework Core Asp.net Core MVC

 - créer un nouveau projet "Application web ASP.NET Core"

Application web (MVC)

- installer les package nuget suivants :

Microsoft.EntityFrameworkCore.SqlServer

Microsoft.EntityFrameworkCore.Tools

dans la console du gestionnaire de package nuget :

dotnet tool install --global dotnet-ef

dotnet restore

dotnet ef dbcontext scaffold "Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=C:\Users\xxx\Desktop\testSqlServer.mdf; Integrated Security=True;" Microsoft.EntityFrameworkCore.SqlServer -o Modelsxxx --project TestGenerateModels

- dans le fichier appsettings.json ajouter la ligne :

"ConnectionString": "Data Source=(localdb)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\xxx\\Desktop\\testSqlServer.mdf; Integrated Security=True;"

- dans le fichier Startup.cs

//hyper important de mettre une valeur dans la variable pour la suite

public static string ConnectionString = "bla bla bla";

- dans le fichier Startup.cs, dans méthode Configure :

Startup.ConnectionString = @Configuration.GetSection("ConnectionString").Value;

- dans le fichier de context, méthode OnConfiguring :

optionsBuilder.UseSqlServer(Startup.ConnectionString);

- dans le context ajouter la variable privée :

private string _connectionString;

- dans le context adapter le constructeur par défaut pour qu'il prenne un paramètre :

public SqlServerContext(string connectionString)

        {

            this._connectionString = connectionString;

        }

- sur le dossier "Controllers", clic droite, ajouter controlleur

Controler MVC avec EntityFramework

choisir le model

choisir le context

- dans le context ajouter un constructeur par défaut

- dans le fichier Startup.cs changer tout à la fin le nom du controller a charger par défaut pour tester

- dans le controller, commenter le constructeur qui reçoit le context en paramètre et ajouter :

public PersonnesController()

        {

            this._context = new SQLiteContext(Startup.ConnectionString);

        }


C# Task Course 100m

Quelques liens utiles :
https://www.c-sharpcorner.com/article/async-and-await-in-c-sharp/
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/
-----------------------------------------------------------------------------------------------------
public class Course100M
{
public static bool isGagnant = false;
public static int vainqueur = 0;
public static int nombreParticipants = 5;
static async Task Main(string[] args)
{
Course100M.isGagnant = false;
Console.WriteLine("A vos marques...");
Thread.Sleep(1000);
Console.WriteLine("Prêts...");
Thread.Sleep(1000);
Console.WriteLine("Partez!!!");
int vainqueurx = await DepartDeLaCourse();
Console.WriteLine($"{vainqueurx}");
Console.WriteLine("-->Course terminée<--");
Console.ReadKey();
}
public static async Task<int> DepartDeLaCourse()
{
await Task.Run(() =>
{
for (int i = 1; i <= Course100M.nombreParticipants; i++)
{
_ = Coureur(i);
}
});
while (Course100M.vainqueur == 0)
{
Thread.Sleep(1000);
Console.WriteLine("Quel suspens...");
}
return Course100M.vainqueur;
}
public static async Task/*<int>*/ Coureur(int numCoureur)
{
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token;
await Task.Run(() =>
{
//100 mètres
for (int i = 1; i <= 10; i++)
{
Thread.Sleep(500 - numCoureur);
//Console.WriteLine($"{numCoureur}. {i * 10} mètres");
string x = "";
for (int y = 1; y <= i; y++)
{
x = x + " --> ";
}
if (i * 10 != 100)
{
Console.WriteLine($"{numCoureur}. {x}");
} else
{
Console.WriteLine($"{numCoureur}. Terminé!!!");
if (Course100M.isGagnant == false)
{
Course100M.isGagnant = true;
Console.WriteLine("------------------------");
Console.WriteLine($"VAINQUEUR : {numCoureur}");
Console.WriteLine("------------------------");
Course100M.vainqueur = numCoureur;
source.Cancel();
}
}
}
}, token);
}
}

10.9.20

Désactiver l'assistant Google sur Android

- allez dans l'application Google de votre téléphone

- appuyer sur "plus" en bas à droite

- "paramètres"

- "assistant google"

- onglet "assistant"

- cherchez "téléphone" en bas 

- désactivez "assistant google"