Comment intégrer votre code à GitHub dans le cadre d'un cours

Posted on October 29th, 2015

Si votre code existe déjà, ce qui est fort probable si c'est le prof qui fournit la voûte de remise :-), vous devez au préalable avoir in git local.

Les opérations se font dans le "Git bash"

vous devez positionner le répertoire de travail sur la racine de votre projet.
Si vous travaillez avec Android Studio, utilisez le menu suivant pour y accéder directement:
Notez que bash ne supporte pas la notation Windows pour les lecteurs et répertoires. remplacez les ":" et "\" par des "/".
"O:\monProjet" devient donc "/O/monProjet"

une fois dans le bon répertoire, vous devriez y voir votre contenu:

Consultez le site GitHub pour connaitre l'adresse du projet (qui se termine par .git)
ou dans la partie de droite si votre projet contient déjà du code:

utilisez cette adresse pour la commande "git remote add origin"

Votre voûte est maintenant liée au serveur
Ajoutez votre contenu, officialisez-le et poussez-le sur le serveur

...

...

Vous êtres enfin prêt à utiliser l'IDE (Android Studio ici) pour continuer à publier et récupérer des changements au code!
Activez le contrôle de source:


Le menu "Git" apparaît maintenant quand vous faites un clic-droit sur un item de l'arbre de projet.
Suivez la documentation de l'IDE pour plus d'instructions...






T-SQL Recommandations - à propos des conventions et la nomenclature des objets

Posted on February 18th, 2015

Il n'y a pas, à proprement parler, de convention officielle pour ce qui est du style et de la nomenclature des tables, des champs et autres objets que vous définissez en SQL. Comme dans tout contexte de programmation, commencez par savoir s'il existe une norme explicite ou implicite déjà en place avant même d'imposer votre style et une norme en particulier. Au besoin, consultez le standard ISO sur les métadonnées ou les modèles de références de Microsoft pour les bases de données. Vous y verrez des contradictions importantes... l'homogénéité passe avant le purisme, consultez vos collègues avant d'entreprendre des ajouts!

T-SQL Recommandations - à propos des schémas et de la structure d'accès

Posted on February 17th, 2015

Séparez les schémas objets de la notion de propriétaire. Les schéma par défaut est dbo, qui signifie database owner est un vestige de l'époque où SQL Server isolait les ensembles de bases de données par usagers. Depuis la version 2005, les tables appartiennent à un schéma (ne pas confondre avec un diagramme). Il s'agit d'un regroupement de tables portant un nom. Il est donc possible d'avoir plusieurs tables de même noms dans des schémas différents d'une même base de données. Les programmeurs C# peuvent faire l'analogie avec les namespaces puisqu'on utilise le point comme délimiteur, ou bien on peut aussi les voir comme des dossiers de tables.

Sur SQL Server on a donc la structure d'accès à 4 niveau séparés par des points :
Serveur.BaseDeDonnées.Schéma.Objet ou même plus simplement Serveur...Objet ou encore le très commun Schéma.Objet

Notez qu'il n'est pas toujours nécessaire de spécifier le serveur, la base de donnée ou le schéma car le contexte nous place déjà dans une base de donnée et un schéma par défaut. C'est suffisant pour beaucoup d'utilisations.

Cette notation est fort utile pour intégrer plusieurs sources de données dans une opération, mais peut devenir très lourde si on ne fait pas attention en utilisant du code généré par un outil. Gardez votre code clair et léger en tenant compte du contexte! Au besoin changez de base de donnée à l'aide de la commande USE. Il n'y a malheureusement pas l'équivalent aussi simple pour changer de schéma courant. Le schéma par défaut étant un attribut de l'utilisateur, il est possible de le changer avec la commande ALTER USER, mais je ne recommande pas cette approche lourde.

Plus de détails sur le site de Microsoft.


T-SQL Chargement de données

Posted on February 17th, 2015

Bien que plusieurs logiciels choisissent de faire leur chargement de données "un enregistrement à la fois" à l'aide de la commande INSERT, le T-SQL offre la possibilité de charger massivement des données tabulaires à partir d'une liaison de données ou d'un fichier.

Il s'agit essentiellement d'utiliser la commande BULK INSERT pour effectuer le chargement à partir d'un fichier de type CSV.

Les deux dernières options sont facultatives:
  • Si vous fournissez une colonnes identitée, vous aurez sans-doute besoin de mettre le paramètre KEEPIDENTITY afin d'utiliser les numéros que vous fournissez au lieu d'en générer de nouveaux.
  • Dans certains cas vous aurez besoin de préserver les accents en utilisant le paramètre CODEPAGE = 'RAW'

Ce système à de nombreuses limitations:
  • Vous devez fournir un fichier avec la même structure que la table cible. Toutes les colonnes doivent être parfaitement compatibles. Il aussi est possible de fournir un fichier de directives pour arrimer un format différent, mais ce n'est pas simple.
  • Si vous importez des nombres en virgules flottantes, le format de ceux-ci ne sera peut-être pas compatible en raison des paramètres régionaux (virgule vs point).
  • Le système ne supporte pas les titres de colonnes en première rangées. En aucun cas vous ne pourrez laisser les entêtes de colonnes CSV.

Introduction au SQL

Posted on February 17th, 2015

Le SQL est le langage servant à exploiter les bases de données relationnelles. Il est constitué de trois langages:
  1. Le DML (Data Manipulation Language) est constitué des commandes INSERT, UPDATE, DELETE et la très célèbre commande SELECT. Il sert essentiellement à manipuler des enregistrements.
  2. Le DDL (Data Definition Language) est constitué des commandes CREATE, ALTER, DROP et RENAME. Il sert à manipuler la structure des tables.
  3. Le DCL (Data Control Language) est constitué des commandes GRANT, DENY, REVOKE, COMMIT, ROLLBACK et LOCK. Il contrôle l'accès aux données.
Toutes ces commandes constituent un langage déclaratif. En effet, quand on s'adresse à une base de données, on déclare le quoi et non le comment. C'est ce qui fait la force et la complémentarité du SQL face aux langages impératifs, orientés objets et autres.

Le langage existe depuis 1974. Bien qu'il ait été normalisé à plusieurs reprises par ANSI et ISO, il convient en général d'être assez spécifique au moment d'implémenter le code. En effet, les principaux fabricants de SGBDR ont des dialectes et des conventions qui leurs sont propres. Oracle à son PL/SQL, PostgreSQL à le PL/pgSQL, Sybase et Microsoft ont le T-SQL comme extension du SQL standardisé en vue d'en faire un langage qui inclut un volet procédural en plus d'appliquer des filtres et autre opérations là où le langage standard ne le permet pas. Cette richesse est à double tranchant. Il est relativement rare de voir du code SQL qui n'est pas teinté de la plateforme où il est destiné. Au fil des ans, de nombreuses abstractions sont venues servir d'interface aux logiciels qui se connectent aux bases de données afin d'en standardiser l'accès tout en préservant leurs avantages (ODBC, JDBC, ADO, ... et le mapping relationnel objet).

Je vous recommande le document Les bases fondamentales du langage Transact SQL produit par l'Association Dotnet France pour approfondir le sujet.


T-SQL Les types de données

Posted on February 16th, 2015

[Bon résumé sur les types SQL, tiré de W3Schools, à retravailler pour faire des recommandations]


En gros et gras le plus populaire... adéquat si vous n'avez besoin d'aucune optimisation, mais à optimiser en contexte industriel.

TypeDescriptionStorage
char(n)Fixed width character string. Maximum 8,000 charactersDefined width
varchar(n)Variable width character string.
Maximum 8,000 characters
2 bytes + number of chars
varchar(max)Variable width character string. Maximum 1,073,741,824 characters2 bytes + number of chars
textVariable width character string. Maximum 2GB of text data4 bytes + number of chars
ncharFixed width Unicode string. Maximum 4,000 charactersDefined width x 2
nvarcharVariable width Unicode string. Maximum 4,000 characters 
nvarchar(max)Variable width Unicode string. Maximum 536,870,912 characters 
ntextVariable width Unicode string. Maximum 2GB of text data 
bitAllows 0, 1, or NULL 
binary(n)Fixed width binary string. Maximum 8,000 bytes 
varbinaryVariable width binary string. Maximum 8,000 bytes 
varbinary(max)Variable width binary string. Maximum 2GB 
imageVariable width binary string. Maximum 2GB 

Numériques:

Data typeDescriptionStorage
tinyintAllows whole numbers from 0 to 2551 byte
smallintAllows whole numbers between -32,768 and 32,7672 bytes
intAllows whole numbers
between -2,147,483,648 and 2,147,483,647
4 bytes
bigintAllows whole numbers between -9,223,372,036,854,775,808 and 9,223,372,036,854,775,8078 bytes
decimal(p,s)Fixed precision and scale numbers.

Allows numbers from -10^38 +1 to 10^38 –1.

The p parameter indicates the maximum total number of digits that can be stored (both to the left and to the right of the decimal point). p must be a value from 1 to 38. Default is 18.

The s parameter indicates the maximum number of digits stored to the right of the decimal point. s must be a value from 0 to p. Default value is 0

5-17 bytes
numeric(p,s)Fixed precision and scale numbers.

Allows numbers from -10^38 +1 to 10^38 –1.

The p parameter indicates the maximum total number of digits that can be stored (both to the left and to the right of the decimal point). p must be a value from 1 to 38. Default is 18.

The s parameter indicates the maximum number of digits stored to the right of the decimal point. s must be a value from 0 to p. Default value is 0

5-17 bytes
smallmoneyMonetary data from -214,748.3648 to 214,748.36474 bytes
moneyMonetary data from -922,337,203,685,477.5808 to 922,337,203,685,477.58078 bytes
float(n)Floating precision number data from -1.79E + 308 to 1.79E + 308.

The n parameter indicates whether the field should hold 4 or 8 bytes. float(24) holds a 4-byte field and float(53) holds an 8-byte field. Default value of n is 53.

4 or 8 bytes
realFloating precision number data
from -3.40E + 38 to 3.40E + 38
4 bytes

Date types:

[Clarifier et recommander l'usage du GMT]

Data typeDescriptionStorage
datetimeFrom January 1, 1753 to December 31, 9999
with an accuracy of 3.33 milliseconds
8 bytes
datetime2From January 1, 0001 to December 31, 9999 with an accuracy of 100 nanoseconds6-8 bytes
smalldatetimeFrom January 1, 1900 to June 6, 2079 with an accuracy of 1 minute4 bytes
dateStore a date only.
From January 1, 0001 to December 31, 9999
3 bytes
timeStore a time only to an accuracy of 100 nanoseconds3-5 bytes
datetimeoffsetThe same as datetime2 with the addition of a time zone offset8-10 bytes
timestampStores a unique number that gets updated every time a row gets created or modified. The timestamp value is based upon an internal clock and does not correspond to real time. Each table may have only one timestamp variable 

Autre:

Data typeDescription
sql_variantStores up to 8,000 bytes of data of various data types, except text, ntext, and timestamp
uniqueidentifierStores a globally unique identifier (GUID)
xmlStores XML formatted data. Maximum 2GB
cursorStores a reference to a cursor used for database operations
tableStores a result-set for later processing



MVVM

Posted on February 6th, 2015

Le patron de conception Modèle-Vue-VueModèle (Model View ViewModel en anglais) à été publié en 2005 par John Grossman de Microsoft. Il vise une séparation forte entre le modèle contenant la logique d'affaire (ou de jeu :-), la vue et l'état de cette vue (la VueModèle). Le couplage se fait par commande et événements routés afin d'éliminer les dépendances bidirectionnelles.

On a donc:
  • Une Vue : La partie apparente de notre application pour l'usager;
  • Un Modèle : Une représentation cohérente et pure des données et du comportement (logique d'affaire ou de jeu). A ce niveau, les changements d'états y sont souvent transactionnels et permanents.
  • Une VueModèle : Une représentation dédiée à la vue, prenant en charge les validations élémentaires, conversions et autre adaptations du modèle à la vue. C'est une forme de mémoire tampon. Cette représentation étant couplée à la vue et au modèle, les changements d'états y sont transitoires. Ils sont, soit un reflet adapté du modèle, soit l'écho d'un changement d'état de la vue.
    On utilise la VueModèle pour prévisualiser l'effet d'une action, pour inter-relier le comportement des composantes de la vue et au besoin pour préparer les changements d'états complexes du modèle en autorisant temporairement des inconsistances là où le modèle ne le permet pas.
Plus de détails sur Wikipédia

De Windows Forms à WPF - Partie 1: Historique

Posted on February 6th, 2015

À la base Windows Forms (aussi appelé WinForms) a été conçu pour encapsuler l'interface native de Windows (Win32) pour pouvoir l'utiliser dans la technologie .Net. Il s'agit donc d'une technologie élaborée pendant les années 1990 (VB/c++) qui a été mise à la saveur du jour avec l'apparition de la technologie .Net (2002) .
  • 2005 - La 2e génération de .Net apporta des changements importants à tous les niveaux. On y voit apparaitre de nouvelles composantes graphiques et un meilleur couplage aux sources de données.
  • 2006 - La 3e génération de .Net introduit le successeur de WinForms, Windows Presentation Foundation (WPF), une technologie basé sur DirectX et un nouveau langage déclaratif le XAML. La technologie DirectX, réservée jusque-là pour les jeux, ouvre la porte à des interfaces plus rapides et plus riches en esthétique et fonctionnalité. Grâce à DirectX, les cartes graphiques sont utilisées de plus en plus à leur plein potentiel. Grace à XAML, la conception du visuel est mieux découplée de la logique d'affaire. Le concept est poussé à l'extrême avec l'apparition du produit Microsoft Blend. Ce dernier n'étant pas destiné aux programmeurs purs et durs, mais aux concepteurs d'interfaces graphiques. L'idée n'était pas mauvaise, mais l'adoption ne fut pas au rendez-vous. Visual Studio est maintenant le seul produit que Microsoft entretient.
  • 2007 - Microsoft introduit Silverlight pour concurrencer la technologie Flash de Adobe et d'autres technologies similaires. Bien qu'elle soit basée sur XAML comme WPF, Silverlight est à la base conçue pour fonctionner dans un fureteur web en mode Rich Internet Application (RIA). Ce marché étant déjà saturé, relativement peu d'applications ont vu le jour et sont encore en opération. De plus, le monde des applications mobiles et des appareils ayant des architectures variées est maintenant incontournable . Microsoft n'ayant pas porté cette plateforme sur les principaux appareils mobiles, c'était une guerre perdue d'avance. L'arrivé du HTML 5 est venue planter le clou dans le cercueil. Microsoft a arrêté l'évolution du produit en 2013.
WPF continue d'être utilisé comme interface graphique dans les applications modernes. Depuis Windows 8, la notion d'applications "modernes" prend un sens particulier. L'interface utilisateur de Windows 8 et ses successeurs est basé sur l'interface jadis appelé Metro s'appelle maintenant, tout simplement, Modern UI (MUI).
Bien que le développement d'application MUI ne soit pas exclusif au WPF (le HTML est aussi populaire), il est facile d'intégrer cette nouvelle ergonomie dans les applications WPF. Le fait que le XAML soit un XML permet d'enrichir dynamiquement le langage pour y inclure les spécificités du MUI. Voir https://code.msdn.microsoft.com/windowsdesktop/Modern-UI-Samples-for-WPF-cfca7ddf pour des exemples.

Stéphane Denis

Contrat Creative Commons
Ces articles produits par Stéphane Denis sur stephanedenis.cc sont mis à disposition selon les termes de la licence Creative Commons Paternité 4.0 International.