dimanche 15 avril 2007

SQL Server 2005 - trucs en vrac

On n'utilise pas assez le motclé case en TSql. En particulier pour les tris...

Pour voir si un utilisateur est sysadmin: SELECT is_srvrolemember('sysadmin')

Le XML:
SELECT table.col1 'noeud@id', table.col2 'noeud/ssnoeud' FOR XML Path('   ')
A l'inverse, il y a une méthode nodes pour requêter un doc xml:
DECLARE MYDATA XML
SET MYDATA = 'bla bla xml'
SELECT XMLColumn.value('noeud' ou 'noeud/@' ou 'noeud/noeud', datatype) 'col1', ... FROM @MYDATA.nodes('requête Xpath de sélection') resultTable (XMLColumn)

XQuery: select @MYDATA.query('//dornano[@valeur > 10])

Les fonctions
Elles doivent être déterministes. Elles ne peuvent rien modifier dans la base de données. Elles peuvent retourner une table.

Les procédures stockées peuvent être écrite en CLR (sp_configure 'clr enabled', '1' ). Mais je ne recommande de l'utiliser qu'en cas de calculs sévères, sinon cela va être très lent...

On n'emploie pas souvent non plus la syntaxe: INSERT INTO <nom table> default values

Il y a maintenant en TSQL le try catch avec BEGIN TRY et END TRY

Modification avec offset sur un champ varchar(max)
UPDATE matable SET macol.WRITE (valeur, offset,longueur)

Les champs UPDATETEXT et WRITETEXT deviennent déconseillés.

jeudi 12 avril 2007

Apprendre à mon équipe à grogner

Une des premières choses qu'on apprend en tant que manager, est que les employés ont toujours des problèmes vis à vis de divers éléments extérieurs ou intérieurs. Il faut canaliser cette irritation.
  • Etre patient : la grogne sort peu à peu
  • Irritation en temps réel : reportez la grogne des employés à la réunion spéciale grogne
  • Etre d'accord avec des irritations légitimes sans arrêter de jouer l'avocat du diable
  • Etre sur que chaque employé fait part de ses irritations à un moment donné.
  • Inviter quelqu'un d'un autre département à ces défouloirs
  • Résolution d'une irritation : identifier le problème, en discuter et le résoudre.
  • Garder 30 minutes après la réunion pour les employés qui ne souhaitent pas parler de leur grogne en public

mercredi 11 avril 2007

recette: canistrelli

  • 250g farine
  • 80g huile
  • 85g de sucre
  • 85g de vin blanc
  • Amandes au goût
  • 1/2 sachet de levure chimique
Mélanger et pétrir pour obtenir une pâte de 1 cm de haut.
Faire des formes. Mettre sur une plaque beurrée.
180 degrés pendant 10 minutes
puis 150 degrés pendant 10 minutes

dimanche 8 avril 2007

Les schémas XSD

Ils sont plus puissants qu'une DTD pour décrire des documents.
Les catégories sont
  • Un élément racine, xs:schema
  • 3 éléments de déclaration: xs:element, xs:attribute, xs:notation
  • 8 éléments de type: xs:complexContent, xs:complexType, xs:extension, xs:list, xs:restriction, xs:simpleContent, xs:simpleType, xs:union
  • 7 éléments de modèles de contenu: xs:all, xs:any, xs:anyAttribute, xs:attributeGroup, xs:choice, xs:group, xs:sequence
  • 3 éléments de composition externe: xs:import, xs:include, xs:redefine
  • 12 facettes pour types simples: xs:enumeration, xs:fractionDigits, xs:length, xs:max|minExclusive, xs:max|minInclusive, xs:minLength, xs:pattern, xs:totalDigits, xs:whiteSpace
  • 3 éléments de doc: xs:appinfo, xs:annotation, xs:documentation
Un bon exemple de Schéma est celui auquel je contribue actuellement avec le groupe AFNOR pour le LOMFR. La dernière version est mise en ligne sur http://www.cndp.fr/standards/metadonnees/outils/lomfr/lomfr.xsd

Il existe quelques types prédéfinis: anyURI, boolean, dateTime, byte, duration, ID, IDREF, integer, language, name, string...
complextype indique que l'élément a des attributs et/ou des sous-éléments.
simpleContent indique que le contenu de l'élément est un type simple
On peut regroper des attributs similaires avec attributeGroup. attribute group ref="..." pour l'appel et attributeGroup name="..." pour la déclaration.
Les schémas et espaces de nom
  • Dans le doc:
    Faire pointer xmlns: sur le W3c, xsiSchemaLocation="mon_uri URI_du_xsd" xmlns:"mon_uri"
  • Dans le schéma:
    <xs:schema xmlns:xs="le W3c" targetNameSpace="mon_uri" xmlns:local="monURI" (pour les ref locales)>
    elementFormDefault="qualified" AttributeFromDefault"qualified" (vérifient que élément et attrbiuts déclarés localement sont vérifiés par un espace de nom).
mixed: il existe des données textuelles dans le corps de l'élément
sequence: impose un ordre aux éléments
choice: permet d'énumérer des éléments
all: vérifie que les éléments existent sans contrôles leur ordre
group: déclare des séquences d'éléments pouvant se répeter dans le document xml.

Schémas externes
include inclut le schéma comme si totu était dans le même fichier
import: permet d'importer des schémas extérieurs (ex: w3c)

extension et restriction: permet d'étendre des types existants selon un mode ressemblant à la programmation objet. On utilise pour cela xsi:type"le_type_restreint_ou_etendu"
L'attribut final= #all|extension|restriction est l'équivalent de sealed en C#.

Unicité
on utilise unique et key (idem que unique sauf que les valeurs sont obligatoires)

vendredi 6 avril 2007

Les méthodes qualité

Quelques définitions:
  • Qualité: définition de procédures à appliquer par tout un chacun pour mener à bien sa mission.
  • Normalisation: inscription dans la durée des résultats de l'analyse qualité. Cela définit des règles communes à minima ainsi qu'une échelle de mesure pour accepter ou non un produit ou service.
Une norme a une connotation juridique, obligatoire alors qu'un standard est un accord consensuel.

Pourquoi la qualité?
- En externe: se conformer aux normes et standards.
- En interne: meilleure connaissance des coûts et des délais.

3 types de méthodes:
- qualité finale : par des spécifications, test, contrats fonctionnels.
- maîtrise de l'information : journaux de livraison, doc technique
- minimisation des difficultés interne et des erreurs : revues de projet, validations formelles

Moyens mis en oeuvre:
- définition de l'objectif
- définition de méthodes et de procédés.

Niveaux:
- non qualité : tous les process sont informels.
- qualité intuitive : méthodes propriétaires
- qualité formelle : il existe des méthodes qualité qui peuvent être allégées.
- qualité officielle : l'entreprise est en marche vers la certification.
- qualité totale : tout est sous contrôle

ISO 900x : ce sont des normes techniques volontaires.

Merise:
- gestion du cycle de vie du projet (définitions, processus, étapes)
- gestion des solutions ou cycle d'abstraction entraîne la modélisation
- gestion du cycle de décision

Abstraction      MCD     MCT   Gestionnaire
Implémentation   MLD     MOT   Informatique

CMM: Capacity and Maturity Model
5 niveaux de maturité
- Initial : la réussite vient de capacité d'individus, pas d'organisation
- répétable : procédures de gestion de projet. Coûts et délais sont identifiés
- défini : processus de dvt documenté de manière technique et managériale. Bonne vision de l'avancement d'un projet.
- géré : les risques sont connus et quantifiés
- optimisé : prévention des risques. Gestion de l'évolution et des technologies.

La documentation du logiciel est indispensable, car il en est partie intégrante!
La documentation expliquant la construction du logiciel est nécessaire car elle permet de construire une checklist et de communiquer les décisions.

mercredi 4 avril 2007

Medecine ball

D'autres exercices avec medecine ball.
Un autre pour les abdos:



Divers exercices pour les bras:

mardi 3 avril 2007

Quelques subtilités de XML

xi:include permet de combiner différents docs xml bien formés. L'élément xinclude possède un attribut href qui pointe sur le fichier xml. Les entêtes xml du fichier ne sont pas inclues. Si on rajoute l'attribut parse="text", le document inclu n'est pas analysé. On peut avoir un attribut Xpointer pour charger une partie du fichier xml uniquement.
xi:fallback est un sous élément de xi:include. Il indique ce qu'il faut faire si le xi:include ne marche pas.

Le formatage:
  • XSL-FO: document xml à la syntaxe un peu barbare. Permet de générer un pdf. xsl-fo permet un formatage très précis, des notes de fin de pages, etc.
  • CSS: s'adapte parfaitement pour le web. Il faut rajouter la ligne <xml-stylesheet type="text/css" href="dornano.css" ?>
RDDL (Ressource Directory Description Language:
C'est une application xml utilisée pour décrire des applications xml identifiées par les url d'un espace de nom.
RDDL se présentera sous la forme d'un fichier XHTML qui inclut des tags rddl:ressource qui sont des xlink pointant sur une ressource relative à ce que le docuiment rddl décrit.

XML-RPC:
La requête se présente sous la forme methodCall / methodName / params / values
La réponse sous la forme methodResponse / params / values

SOAP
C'est un webservice décrit par un doc WSDL (Web Service Ressource Langiage) qui est localisé dans un annuaire UDDI (Universal Description Discovery and Integration)

Astuce: si les balises d'une application xml ont vocation à être inclues dans d'autres applicatiojns (ex: LOMFR dans OAI), il faut spécifier elementFormDefault="qualified" (et éventuellement attributFormDefault="qualified")

lundi 2 avril 2007

nouveautés de VS 2005

On peut créer un diagramme entité relation du projet avec les différentes classes. Cela permet de créer automatiquement les classes et les propriétés.

Côté design, les master pages permettent de mettre en commun:
  • la structure
  • le design
  • l'ergonomie
  • les traitements
  • les éléments graphiques non modifiés
  • les contrôles spécifiques
Une masterpage contient au moins un contrôle ContentPlaceHolder contenant des thèmes (css et skin: ImageButton).
On met dans la directive de la page:
<% MasterEnableTheming = "true" blablabla... %>
Pour l'appeler:
  • <%@ MasterPageFile="~/dornanomasterpage.master" blablabla...%>
  • rajouter un contrôle <%asp:content> pour chaque ContentPlaceHolder et l'attribut ContentPlaceHolderID correspondant de la page master
On peut aussi créer directement une page dérivant de masterpage avec l'interface de création
Ces masterpages sont intéressantes pour gérer des pages popup

La gestion du mail
nouvelle classe System.Net.Mail d'où on dérive Smtpclient, MailMessage et MailAccess

samedi 31 mars 2007

Etre authentique pour être efficace

Il faut détecter les incongruences des autres mais surtout être soi-même congruent. Cela offre à nos interlocuteurs une communication claire, directe et facile d'accès. Elle traduit au plus juste nos intentions et nos objectifs.
La vidéo est très utile pour réaliser un travail d'auto-observation.

vendredi 30 mars 2007

Savoir exprimer ce que l'on veut

Le manque de précision dans la définition des objectifs et l'absence d'évaluation de leur faisabilité sont les principales causes des résultats non désirés.
Pour atteindre ses objectifs, il faut un fort investissement personnel qui ne dépend que de nous.
Si l'atteinte d'un objectif est soumise au changement d'une tierce personne, il n'a aucune chance d'aboutir.

La généralisation est une arme à double tranchant. Il faut savoir l'éviter dans son discours et parfois il faut savoir faire préciser ce que veut dire son interlocuteur. Tous les corses ne sont pas fainéants.
Les omissions par comparaison : "c'est moins cher", "tu es la plus belle".

Les divinations => Je sais ce que vous pensez! Il faut répondre: "comment faîtes-vous pour savoir cela?"
Les nominalisations => Je veux obtenir une amélioration de mes conditions de travail. Il faut répondre: "Comment voudriez-vous les voir améliorer"
Mots à relever => questions à poser
  • verbes: penser, croire,estimer, deviner => comment le savez-vous?
  • verbe action: faire => comment faire?
  • mieux, pire, pareil, égal, moins, plus => comparé à quoi?
  • le mieux, le pire, le moins, le plus => par rapport à quoi?
  • il faut, je dois, c'est obligatoire => que se passerait-il sinon?
  • ce n'est pas possible => qu'est-ce qui en empêche?
  • jamais => vraiment jamais?
  • toujours, tout, tout le monde => toujours? personne?
  • c'est vrai, clair, juste, faux, bien, mal => qui affirme cela?
  • amour, justice, liberté => comment cela se manifeste-t-il?
  • c'est à cause de, en raison de, parce que => s'il n'y avait pas cette raison?

jeudi 29 mars 2007

Créer un bon environnement de travail

Les causes de découragement et de l'épuisement professionnel.
  • Trop de travail
  • Pas de contrôle sur son temps
  • Travail non reconnu
  • Pas d'esprit d'équipe
  • Conflit de valeurs, le travail semble sans but
  • Pas d'objectivité

Comment les éviter?
  • Garder une charge de travail raisonnable
  • Faire participer les employés au processus de décision
  • Reconnaître la valeur des gens et les récompenser
  • Développer un sens de communauté
  • Développer le sens de la valeur du travail dans des termes identifiables par les employés
  • Maintenir un environnement de respect et de justice

mercredi 28 mars 2007

Comment gérer des ordres avec lesquels je ne suis pas d'accord?

  1. Ce n'est pas la guerre, il n'y aura ni morts ni blessés. Ce n'est que du travail.
  2. Je dois décider : ou je veux être un un soldat de cette armée ou bien je la quitte.
  3. Demander au général: "permission to speak freely". Et essayer de lui exposer mes arguments.
  4. Bien définir le cadre de la mission de mon équipe, et s'y tenir.
  5. Etre toujours en accord avec ce que je présente à mon équipe.

dimanche 25 mars 2007

Xlink et Xpointer

Les Xlink définissent des liens.
L'attribut type le plus utilisé est simple.
On y rajoute l'attribut href, qui est l'URI de la ressource liée.
Puis l'attribut optionnel linkshow
  • new : nouvelle fenêtre
  • replace : remplace le doc actuel
  • embed : inclut une image dans la ressource courante
  • other : quelque chose de différent...
  • none : rien (pourquoi le spécifier alors?)

Puis l'attribut optionnel activate
  • onload : lien suivi immédiatement
  • onrequest : lien suivi sur demande
  • other | none : idem que ci-dessus
En plus de la valeur simple de l'attribut type, on trouve les valeurs:
  • locator
  • extended
  • arc
  • title
  • ressource
Si le type = locator (ressource multiples) on spécifie l'attribut xlink:label pour chaque lien.
Si le type = arc on spécifie xlink:from et xlink:true ainsi que l'attribut optionnel title.
Si le type = ressource, on spécifie xlink:label


Les Xpointer sont basés sur Xpath en y rajoutant les points et les régions.
Par exemple on pointera sur le premier élément nom d'un document. Cela donne xlink:href="http://d-ornano.com/toto.xml#xpointer(//nom[position()=1])"

Pour définir des points on utilise start-point(noeud) et end-point(noeud)
Pour définir des régions (étendues de données textuelles entre 2 points), on définit range().

samedi 24 mars 2007

Xpath

C'est un langage non xml pour identifier des parties de documents xml. Il indique les noeuds par position, position relative, type ou contenu
XSLT et Xpointer utilisent Xpath pour sélectionner respectivement un élément ou un point.

Il y a 7 types de noeuds:
  1. racine
  2. élément
  3. texte
  4. attribut
  5. commentaire
  6. instruction de traitement
  7. espace de nom
match= "/" : noeud racine
comment() : commentaire
text() : noeud de texte enfant direct

Les jokers:
  • * : tout noeud d'élément. Ex svg:* : tous les éléments de l'espace de nom svg
  • node() : tous les noeuds
  • @* : noeuds d'attribut
  • | : ou
Localisation:
  • / : chemin absolu
  • // : chemin relatif
  • . : noeud contextuel
  • .. : noeud parent
Un prédicat sélectionne un sous-ensemble.
Ex: <xsl:apply-templates select="//element[.='value']"/>
<xsl:apply-templates select="//element[@id=8]"/>
and et or sont les opérateurs logiques des prédicats.

La notation abrégée ci-dessus permet de parcourir child|parent|self|attribute|descendant-or-self.
On peut aussi utiliser une localisation non-abrégée
  • ancestor : tous les ancètres
  • following-sibbling : frères cadets
  • preceding-sibling : frères ainés
  • following : noeuds suivants
  • preceding : noeuds précédents
  • namespace : tous les espaces de nom dans la portée du noeud contextuel
  • descendant : tous les descendants
  • ancestor-or-self : ancètre ou soi-même
Ex: <xsl:apply-templates select="descendant::noeud"/>

Les fonctions Xpath
Sur un ensemble de noeuds:
count(//nom) :nombre d'éléments nom
position() : cardinalité de l'élément
id('mca1') pointe sur l'id unique mca1
string() = xsl :value-of()
start-with('ornano','or')=true
contains('mca','ca')=true
substring-before('dd/mm/yy','/')='dd'
substring-after('dd/mm/yy','/')='yy'
substring('dd/mm/yy',4,2)='mm'
substring('dd/mm/yy',7)='yy'
string-length('ornano')=6

fonction booléennnes
not() : inverse
boolean() : convertit en booléen


fonction nombres<br/> number() : conversion
round(3,1)=floor(3,1)=3
ceiling(3,1)=4

vendredi 23 mars 2007

SQL server 2005 la suite. Des conséquences sur .net

Text et ntext deviennent obsolètes au profit de (n)varchar(max)
De même image est remplacé par varbinary(max)

Le driver SqlNativeClient permet une connexion optimisée à sqlserver 2005

Enfin il est possible d'avoir de multiples recordsets pour une même connexion en .net
Pour ce faire, il faut mettre l'option MultipleActiveResultSets = true dans la chaîne de connexion

Si l'on veut être alerté lorsqu'un dataset est modifié sur la base d'origine, il faut activer l'événement depend_OnChange.

jeudi 22 mars 2007

SQL server 2005 premières nouveautés

Il existe maintenant un outil de configuration de la surface d'exposition qui détermine "quoi" est accédé par "qui".
L'utilitaire sac.exe en ligne de commande permet d'importer exporter cette configuration.

Top fonctionnalité: après avoir modifié la structure en mode graphique, on peut générer le script TSQL.

Des projets type Visual Studio permettent de grouper les requêtes (efficacement?).

Les modèles permettent de faire plein d'opérations élémentaires "for dummies". Possibilité d'instancier les variables par défaut facilement.

Profiler: on peut maintenant l'exécuter en parallèle avec l'analyseur de performances.
Le fichier de trace est récupéré par l'assistant paramétrage.


Sqlcmd remplace le vieux osql.

mardi 20 mars 2007

Comment le parseur détermine le code de caractères XML

  • Le parseur regarde les 2 premiers octets #xFEFF ou #xFFFE pour déterminer si c'est de l'UTF16
  • Si le fichier commence par #x3C3F7860 (<?xm) alors c'est de l'UTF8 (ou de l'ascii)

namespaces en XML

un namespace sert à 2 choses:
  1. Distinguer les éléments et les attributs ayant le même nom mais issus de vocabulaires différents
  2. Grouper les éléments et les attributs relatifs à une même application xml

Tout ce qui commence par xml est implicitement rattaché à xml. Donc xml* sont des préfixes réservés.
Les espaces de nom sont indépendants des DTD et peuvent être utilisés dans des documents valides ou pas.
Une fois déclaré dans un élément, l'espace de nom est automatiquement affecté à ses sous-éléments. Il faut préfixer les sous éléments par un autre espace de nom pour qu'ils en fassent partie.

Il faut utiliser l'attribut xmlns="http://www.monespacedenom.com/monespace" pour le namespace par défaut.
On utilisera xmlns:html="http://namespacepourhtml.org/blabla" puis l'élément <html:table/> par exemple.

vendredi 16 mars 2007

Ado.net

les objets ado.net
  • Connection: Ouvre une connexion vers une source de données spécifique
  • Command: Exécute une commande sur une source de données
  • DataReader: Lit un flux de données à partir d'une source de données en mode connecté. Le mode d'accès est en lecture seule avec un curseur en avant seulement.
  • DataSet: Représente un ensemble de données en mode déconnecté. Il peut être constitué de plusieurs tables ainsi que des relations et contraintes existant entre elles.
  • DataAdapter: Remplit un DataSet et répercute les mises à jour dans la source de données.
Exemple avec sqlserver (using System.Data.SqlClient;):

string conn = "User ID=monuser;password=monpass;Initial Catalog=mabase;
Data Source=monserveur.com;Packet Size=4096";


string strSQL = "select * from mavue"; 
SqlCommand DBCmd = new SqlCommand(strSQL, this.Conn); 
SqlDataReader rs; 
rs = DBCmd.ExecuteReader(); 
while (rs.Read()) 
	{ 
	this.urlid=(int)rs["urlid"];
        ....
        }

samedi 10 mars 2007

Aide mémoire sur les DTD

Histoire de se rafraichir la mémoire après quelques années, un petit memento sur les DTD.
Mettre standalone="yes" dans l'entête xml permet déjà de ne pas utiliser de dtd (pas recommandé).

Déclaration d'élément:
<!ELEMENT nom_élément (contenu)>
contenu peut être:
  • #PCDATA : n'importe quoi sauf un sous élément
  • elt1, elt2, ... : une suite de sous éléments ordonnée
  • un mix des deux précédents séparés par des |
  • EMPTY : pas de contenu ni de sous-éléments (ex: balise img en HTML)
  • ANY : n'importe quoi
A noter que les sous-éléments ont les suffixes suivants:
  • +: 1..n occurences
  • ?: 0..1 occurence
  • *: 0..n occurences
  • aucun: 1 et 1 seule occurence

Déclaration d'attribut:
<!ATTLIST nom_élément nom_attribut type_attribut valeur>
valeur:
  • #IMPLIED : optionnel
  • #REQUIRED : obligatoire
  • #FIXED : valeur fixe et non modifiable
  • littéral : la valeur par défaut entre guillemets
type_attribut:
  • CDATA : chaîne de caractères
  • NMTOKEN : alphanumérique + ", : . - _ "
  • NMTOKENS : NMTOKEN séparés par des espaces
  • Enumération: liste des valeurs possibles
  • ID: alphanumérique unique. Commence par un caractère ou _
  • IDREF: chaîne de caractères référençant un ID
  • IDREFS: liste d'IDREF
  • ENTITY: entité non analysée
  • ENTITIES : liste d'ENTITY
  • NOTATION: référence une notation système

Déclaration d'entité:
<!ENTITY nom_entite chaine>
On affiche ensuite la chaîne en appelant &nom_entite;

- page 4 de 5 -