Barre horizontale de naviagtion

jeudi 8 décembre 2011

L'Extreme Programming

L'Extreme Programming (XP) est un processus de développement logiciel, c'est-à-dire un ensemble de pratiques destinées à organiser le travail d'une équipe de développement. Ces pratiques se focalisent sur la construction proprement dite du logiciel, en aval des phases préparatoires d'études d'opportunité ou de faisabilité.

XP propose une réponse originale à ces questions, avec un ensemble de pratiques organisées autour des principes suivants :

  • Le client (maîtrise d'ouvrage) pilote lui-même le projet, et ce de très près grâce à des cycles itératifs extrêmement courts (1 ou 2 semaines).
  • L'équipe livre très tôt dans le projet une première version du logiciel, et les livraisons de nouvelles versions s'enchaînent ensuite à un rythme soutenu pour obtenir un feedback maximal sur l'avancement des développements.
  • L'équipe s'organise elle-même pour atteindre ses objectifs, en favorisant une collaboration maximale entre ses membres.
  • L'équipe met en place des tests automatiques pour toutes les fonctionnalités qu'elle développe, ce qui garantit au produit un niveau de robustesse très élevé.
  • Les développeurs améliorent sans cesse la structure interne du logiciel pour que les évolutions y restent faciles et rapides.

L'objectif de ce dossier est de donner une vision d'ensemble des principes et des pratiques d'XP, en commençant par ce qui fait son agilité : l'ouverture au changement.

mercredi 7 décembre 2011

Atelier :Bonnes pratiques objet en .net : Introduction aux principes SOLID

I. Introduction

SOLID est l'acronyme de cinq principes de base (Single Responsibility Principle, Open/Closed Principle, Liskov Substitution Principle, Interface Segregation Principle et Dependency Inversion Principle) que l'on peut appliquer au développement objet.


I - B. Couplage=--------
Le couplage est une métrique qui mesure l'interconnexion des modules. Deux modules sont dit couplés si une modification d'un de ces modules demande une modification dans l'autre.

I - C. Encapsulation :+++++++
L'idée derrière l'encapsulation est d'intégrer à un objet tous les éléments nécessaires à son fonctionnement, que ce soit des fonctions ou des données.
Le corolaire est qu'un objet devrait (et non pas doit, comme c'est souvent expliqué) masquer la cuisine interne de la classe, pour exposer une interface propre, de façon à ce que ses clients puissent manipuler l'objet et ses données sans avoir à connaitre le fonctionnement interne de l'objet.

II. Responsabilité unique (SRP: Single Responsibility P
rinciple)

Le principe de responsabilité unique, est qu'une classe donnée ne doit avoir qu'une seule responsabilité, et, par conséquent, qu'elle ne doit avoir qu'une seule raison de changer.
Les avantages de cette approche sont les suivants:
-Diminution de la complexité du code
-Augmentation de la lisibilité de la classe
-Meilleure encapsulation, et meilleure cohésion, les responsabilités étant regroupées
pour l’appliquer il faut Analyser et regrouper des méthodes du code puis en sortir des classes

II. Ouvert/fermé (OCP: Open/closed Principle)
-Les modules qui se conforment au principe ouvert/ferme ont deux attributs principaux. 1 - Ils sont "ouverts pour l'extension". Cela signifie que le comportement du module peut être étendu, que l'on peut faire se comporter ce module de façons nouvelles et différentes si les exigences de l'application sont modifiées, (hériter de la classe d'origine)
2 - Ils sont "Fermés à la modification". Le code source d'un tel module ne peut pas être modifié. Personne n'est autorisé à y apporter des modifications.«
Voir Exemple

III. Substitution de Liskov (LSP: Liskov Substitution Principle)

-Les sous-types doivent être remplaçables par leur type de base SANS CAST.
Principe de Polymorphisme on POO.

Voir Exemple

IV. Séparation des Interfaces (ISP: Interface Segregation Principle)

-Les clients ne doivent pas être forcés de dépendre d'interfaces qu'ils n'utilisent pas.
Les interfaces doit être le moins compliquée.


Modèle ISP
V.Inversion des dépendances (DIP: Dependency Inversion Principle)

Les architectures classiques ne permettent pas la réutilisation des modules "métier"
Dans la plupart des applications, les modules de haut niveau (ceux qui portent la logique fonctionnelle de l'application ou les aspects "métier") sont construits directement sur les modules de bas niveau (par exemple les librairies graphiques ou de communication)
Les modules de haut niveau doivent être modifiés lorsque les modules de bas niveau sont modifiés.
Selon le principe d'inversion des dépendances
, la relation de dépendance doit être inversée : les modules de bas niveau doivent se conformer à des interfaces définies et utilisées par les modules de haut niveau.


Vers des Framework métier ?
Ce principe conduit à des applications dans lesquelles la logique "métier" est parfaitement réutilisable. Cette partie métier forme une sorte de "framework", qui permet de développer une même application dans des contextes techniques différents.(sfeir Tools bon exemple, edition EML )

mercredi 20 juillet 2011

mardi 7 juin 2011

Exemple de migration d’application web ASP.net vers Azure

Le numéro de Juin du magazine Programmez ! est disponible et Avec un article, qui présente succinctement la migration d’une application ASP.net vers Windows Azure qui présente migration de l’application

Open Source nopCommerce pour la rendre “Azurée”.

Plus d’infos voila le lien de l'article

vendredi 3 juin 2011

projets Régie ou forfaits

Les différences pour un développeur sont :
* Forfait : le projet se déroule en général dans les locaux de ton employeur (et non pas du client). Tu travailles avec les personnes de ta SSII et non pas directement chez le client. Les projet sont en général plus tendu (si le projet prend du retard, ta boite perd de l'argent. Si le projet a de l'avance, ta boite gagne de l'argent car ils te feront bosser sur autre chose -> ta boite va tout faire pour que le projet aille le plus vite possible). Le forfait est très formateur, il permet également de montrer à ton employeur ce que tu vaux. Par contre, la dimension métier est souvent amoidrie et tu bosses toujours au même endroit (ce qui supprime l'avantage des SSII qui bossent souvent en régie : rencontrer différentes personnes, travailler dans différents milieux, avec différentes méthodes...).
* Régie : le projet se déroule chez le client (en changeant de mission, on change de client, on a donc un panel important en terme de communication, méthode, techno...). La dimension métier est très importante (tu bosses directement avec les personnes qui ont le besoin. Tu es facturé au jour travaillé et non pas au travail réalisé, les projets peuvent donc être plus pèpères.

Les forfaits sont beaucoup plus rares, mais intéressants en terme de conduite de projet, technique... C'est une expérience à faire, mais c'est une erreur de ne faire que cela. Ils te permettront plus facilement d'évoluer vers un poste technique ou un poste de pilotage de projet (mais sans la dimension métier, c'est loin d'être simple).
Les régies sont très courantes (80% des projets infos) et t'apportent une adaptabilité et une connaissance métier très importantes (c'est surement les 2 choses les plus importantes dans notre métier).
__________________

vendredi 6 mai 2011

session Mode SqlServer

la classe ClsNiveauConfidentialite il faut la rendre serializable parce quel est enregistré dans la session

tout objet enregistré dans la session doit être sérializable et peut etré c'est la source du problème de sauvgarde de session

[Serializable]

public class ClsNiveauConfidentialite

{

}

si non c'est marche pas pour la persistance on va utiliser le sauvegarde session coté sql server c'est la session http Persistante.
pour cela dans le webconfig mettre ces lignes

<sessionState

mode="SQLServer"

cookieless="false"

sqlConnectionString="Data Source=TAOUFIK-B1C5832\SQLEXPRESS;INTEGRATED SECURITY=SSPI"

timeout="360"

/>

fichier Global.asax

void Session_End(object sender, EventArgs e)

{

Response.Redirect("~/Default.aspx");

}

aller à ce dossier " C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 "

exécuté le script : InstallSqlState.sql


Application AuthenticateRequest


protected void Application_AuthenticateRequest(Object sender,EventArgs e) {
// Extract the forms authentication cookie
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];
if(null == authCookie) {
// There is no authentication cookie.
return;
}
FormsAuthenticationTicket authTicket = null;
try {
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
} catch(Exception ex) {
// Log exception details (omitted for simplicity)
return;
}
if (null == authTicket) {
// Cookie failed to decrypt.
return;
}
// When the ticket was created, the UserData property wasassigned
// a pipe delimited string of role names.
// Create an Identity object
FormsIdentity id = new FormsIdentity( authTicket );
string[] Roles =new string[2];
Roles[0]="User";
// This principal will flow throughout the request.
System.Security.Principal.GenericPrincipal principal = new System.Security.Principal.GenericPrincipal(id,Roles);
// Attach the new principal object to the current HttpContextobject
System.Web.HttpContext.Current.User = principal;
}

lundi 2 mai 2011

Ajax Help

Css Style

.help {
visibility:hidden;
display:none;
position:absolute;
width:250px;
background-color:#FFFF99;
border-left:2px outset white;
border-top:2px outset white;
border-right:2px outset #ACA899;
border-bottom:2px outset #ACA899;
left:0px;
top:0px;
z-index:100;
padding: 5px;
padding-top:20px;
font-size :xx-small;
float:right ;
min-width:250px;
}


asp.net code




Séparez les critères de recherche par des ';'
>Exemple:Test1;Test2;Test3


vendredi 8 avril 2011

In-browser code editing made bearable

CodeMirror is a JavaScript library that can be used to create a relatively pleasant editor interface for code-like content ― computer programs, HTML markup, and similar. If a mode has been written for the language you are editing, the code will be coloured, and the editor will optionally help you with indentation.

This is the project page for CodeMirror 2, the currently more actively developed, and recommended version. CodeMirror 1 is still available from here.

http://codemirror.net/

mercredi 6 avril 2011

Modal popup









TechDays 2011 :Cloud Compiting

Get Microsoft Silverlight

mardi 5 avril 2011

Suspend/Unsuspend an Account domaine

Suspension of domaine.com

Changing Shell to /bin/false...Changing shell for jasminco. 
Warning: "/bin/false" is not listed in /etc/shells Shell changed. 
Done Locking Password...Locking password for user jasminco. passwd: 
Success Done Suspending email account logins for domaine.com .... Done 
Suspending mysql users Notification => firewall@vipdomaine.net via EMAIL [level => 1] 

vendredi 25 mars 2011

composant Map pour des statistiques

We’ve spent the last few years developing geographic & data systems for big business , but now we’re back. We want to bring our targetmap.com platform (.net was already taken) to the community to share that knowledge... But, enough of that…let’s get back on track.

http://www.targetmap.com/





lundi 21 mars 2011

Xml And Sql Server

XML path methode

SELECT [usr_stateMachineInfo]
FROM [dbo].[Users]
WHERE [dbo].[Users].usr_id='93'
FOR XML path('root')

XML RAW methode

SELECT usr_id,usr_user_name,[usr_stateMachineInfo]
FROM [dbo].[Users]
FOR XML RAW, ELEMENTS
retourne

93
demo_demo
text






détaille
http://www.programmersheaven.com/2/SQL-server-2005-school-lesson-5

Sécurité : XOR Encryption

    
'''
''' this function used to xor function char by char betwine data and key
'''

'''
'''
'''
'''
Private Shared Function XOREncryption(ByVal data As String, ByVal key As String) As String
Dim inSb As New StringBuilder(data)
Dim outSb As New StringBuilder(data.Length)
Dim c As Integer = 0
Dim key_count As Integer = 0
For i As Integer = 0 To data.Length - 1
c = AscW(inSb(i)) Xor AscW(key(key_count))
outSb.Append(ChrW(c))
If (key_count = key.Length) Then
key_count = 0
End If
Next
Return outSb.ToString()
End Function

Encode text data for XML



'''
''' this function used to encode the unicode and special caratere content in string data
'''

'''
'''
'''
Public Shared Function EncodeForXml(ByVal data As String) As String
Dim doc As New XmlDocument()
Dim node As XmlNode = doc.AppendChild(doc.CreateElement("xml"))
node.InnerText = data
Dim writer As New StringWriter()
Dim xml_writer As New XmlTextWriter(writer)
node.WriteContentTo(xml_writer)
Return writer.ToString()
End Function

Sécurité :Microsoft Web Protection Library

The Microsoft Web Protection Library (WPL) is a set of .NET assemblies which will help you protect your web sites, current, future and past. The WPL includes

AntiXSS
AntiXSS provides a myriad of encoding functions for user input, including HTML, HTML attributes, XML, CSS and JavaScript.
White Lists: AntiXSS differs from the standard .NET framework encoding by using a white list approach. All characters not on the white list will be encoded using the correct rules for the encoding type. Whilst this comes at a performance cost AntiXSS has been written with performance in mind.
Secure Globalization: The web is a global market place, and cross-site scripting is a global issue. An attack can be coded anywhere, and Anti-XSS now protects against XSS attacks coded in dozens of languages.

Security Runtime Engine
The Security Runtime Engine (SRE) provides a wrapper around your existing web sites, ensuring that common attack vectors to not make it to your application. Protection is provided as standard for
Cross Site Scripting
SQL Injection

Sécurité :Le chiffrement de Vigenère

Le chiffrement de Vigenère est un cryptosystème symétrique, ce qui signifie qu'il utilise la même clé pour le chiffrement et le déchiffrement. Le chiffrement de Vigenère ressemble beaucoup au chiffrement de César, à la différence près qu'il utilise une clef plus longue afin de pallier le principal problème du chiffrement de César: le fait qu'une lettre puisse être codée d'une seule façon. Pour cela on utilise un mot clef au lieu d'un simple caractère.
On associe dans un premier temps à chaque lettre un chiffre correspondant.


A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Il consiste à coder un texte avec un mot en ajoutant à chacune de ses lettres la lettre d'un autre mot appelé clé. La clé est ajoutée indéfiniment en vis-à-vis avec le texte à chiffrer, puis le code ASCII de chacune des lettres de la clé est ajouté au texte à crypter. Par exemple le texte "rendezvousamidi" avec la clé bonjour sera codé de la manière suivante :

Texte original :

r e n d e z v o u s a m i d i
114 101 110 100 101 122 118 111 117 115 97 109 105 100 105

Clé:

b o n j o u r
98 111 110 106 111 117 114

Texte crypté

r+b e+o n+n d+j e+o z+u v+r o+b u+o s+n a+j m+o i+u d+r i+b
114 + 98 101 + 111 110 + 110 100 + 106 101 + 111 122 + 117 118 + 114 111 + 98 117 + 111 115 + 110 97 + 106 109 + 111 105 + 117 100 + 114 105 + 98

Pour déchiffrer ce message il suffit d'avoir la clé secrète et faire le déchiffrement inverse, à l'aide d'une soustraction.

Bien que ce chiffrement soit beaucoup plus sûr que le chiffrement de César, il peut encore être facilement cassé. En effet, lorsque les messages sont beaucoup plus longs que la clef, il est possible de repérer la longueur de la clef et d'utiliser pour chaque séquence de la longueur de la clef la méthode consistant à calculer la fréquence d'apparition des lettres, permettant de déterminer un à un les caractères de la clef...

Pour éviter ce problème, une solution consiste à utiliser une clef dont la taille est proche de celle du texte afin de rendre impossible une étude statistique du texte crypté. Ce type de système de chiffrement est appelé système à clé jetable. Le problème de ce type de méthode est la longueur de la clé de cryptage (plus le texte à crypter est long, plus la clef doit être volumineuse), qui empêche sa mémorisation et implique une probabilité d'erreur dans la clé beaucoup plus grande (une seule erreur rend le texte indéchiffrable...).

Securité :Le cryptage D.E.S.

Origine :


Le D.E.S. (ou Data Encryption Standard) naît en 1975 suite à une requête d'I.B.M. en 1960 pour son programme de recherche sur le chiffrement informatique. Au début, les spécialistes de la N.S.A. (National Security Agency, le service de sécurité intérieure américain) se cassent les dents dessus donc I.B.M. est contraint de l'utiliser sous une forme plus simple que prévu. L'utilisation du D.E.S. se généralise alors peu à peu dans les administrations américaines. Depuis, le D.E.S. est remis à niveau tous les 5 ans environ pour faire face à la puissance croissante des ordinateurs qui le mettent en péril.



Mécanisme :


Le message, au prélable converti en binaire, est découpé en blocs Bi de 64 bits. La clé K, elle, comporte 56 bits. Pour chaque bloc Bi, on applique l'algorithme* suivant :

1) On effectue une permutation initiale des bits du bloc Bi. On appelle alors G0 et D0 les parties de 32 bits droite et gauche du bloc obtenu.

2) On répète 16 fois la procédure suivante :
Gi = Di-1
Di = Gi-1 XOR f(Di-1 , Ki) (XOR est représenté par + sur le schéma ci-dessous)
où Ki est un bloc de 48 bits de la clé K, et f une fonction composée successivement d'une expansion de bits, d'un XOR, d'une réduction de bits, et d'une permutation de bits.

3) On recompose un bloc B'16 en "recollant" D16 et G16 dans cet ordre.

4) On effectue la permutation inverse de la permutation initiale 1).



Voici un schéma résumant les différentes parties de l'algorithme* :





Le décodage se fait en utilisant la même clé K mais en déroulant l'algorithme dans le sens inverse.



Inconvénients :


Aujourd'hui, le D.E.S. est fortement menacé par les puissances de calcul des ordinateurs. Il n'est en effet pas impossible de balayer la plupart des clés pour casser le code. Un nouveau système, le A.E.S. (Advanced Encryption Standard) est prévu pour le remplacer.

mardi 15 mars 2011

ASP.NET WYSIWYG rich HTML editor

1- asp.net free componet :http://www.freetextbox.com
2-ajaxToolkit componet HtmlEditor :http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/HTMLEditor/HTMLEditor.aspx
3-Javascript componnet WYSIWYG Editor: http://tinymce.moxiecode.com/index.php
4- jhtmlarea   : http://jhtmlarea.codeplex.com/
5- jquery : http://www.webappers.com/2010/09/08/open-source-wysiwyg-html-editor-using-jquery-ui/

  1. avec asp.net n'oublier pas de déactiver la sécurité injection de script par cet tag à la page ValidateRequest="false"

mardi 8 février 2011

progresse panel modal

javascript code

	

var ModalProgress = '<%= ModalProgress.ClientID %>';
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginReq);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endReq);

function beginReq(sender, args) {
// shows the Popup
$find(ModalProgress).show();
}

function endReq(sender, args) {
// shows the Popup
$find(ModalProgress).hide();
}




aspx code




'
ImageUrl="~/App_Themes/Ged_theme/Images/email-send-icon.png" Text="Envoyer mot de passe" />







Processing
Envoie de mail en cours ...






lundi 31 janvier 2011

asp.net validationGroupe

aspx Code










c# code

Page.Validate("Profil");
if (Page.IsValid)
{
//Traitement
}

Popup sur Master Page

code aspx popup:












code c#

#region Profils
private void ClearProfil()
{
TBox_OldPasse.Text = "";
TBox_ConfirmPass.Text = "";
TBox_NewPass.Text = "";
}
private void SaveProfil()
{
Page.Validate("Profil");
if (Page.IsValid)
{
SessionData.CurrentUser.Password = TBox_NewPass.Text.Trim();
ClsLogicUtilisateurs.UpdateUtilisateurs(SessionData.CurrentUser);
mdlProfilPoup.Hide();
}
else
mdlProfilPoup.Show();

}
private void SendPassword()
{
ClsPassword_Demande objPasswordDemande = new ClsPassword_Demande();
objPasswordDemande.Login = SessionData.CurrentUser.NomLogin;
objPasswordDemande.Nom = SessionData.CurrentUser.Nom;
objPasswordDemande.Prenom = SessionData.CurrentUser.Prenom;
objPasswordDemande.Date = DateTime.Now;
ClsLogicPassword_Demande.InsertPassword_Demande(objPasswordDemande);

mdlProfilPoup.Hide();
}
protected void Btn_registerProfil_Click(object sender, EventArgs e)
{
SaveProfil();
}
protected void cv_OldPassword_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = ClsLogicUtilisateurs.GetUtilisateurByID(SessionData.CurrentUser.ID_Utilisateur).Password.Trim().Equals(TBox_OldPasse.Text.Trim());

}
protected void btn_send_pass_Click(object sender, EventArgs e)
{
SendPassword();
}
protected void btnClose_Click(object sender, EventArgs e)
{
mdlProfilPoup.Hide();
}
protected void lblConnectedUser_Click(object sender, EventArgs e)
{
ClearProfil();
mdlProfilPoup.Show();

}
#endregion

mercredi 19 janvier 2011

autocompleteExtender ajaxToolkit

WebService Code :AutoComplete.cs
le code à mettre dans le dossier app_code

using System;
using System.Collections.Generic;
using System.Web.Services;
using DataLayer;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.Web.Script.Services.ScriptService]
public class AutoComplete : WebService
{
public AutoComplete()
{
}

[WebMethod]
public string[] GetCompletionList(string prefixText, int count)
{
List lstPublication =ClsLogicPublication.SelectAllEquipementPublication();
List PublicationArray = new List();
List list = lstPublication .FindAll(
delegate(ClsPublication pub)
{
return pub.IdPublication.ToString().ToLower().StartsWith(prefixText);
});
foreach(ClsPublication publ in list)
{
string item = AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(publ.IdPublication.ToString(), publ.DesignationPublication_FR.ToString());
PublicationArray.Add(item);
}
return PublicationArray.ToArray();

}
}


le code asmx du webservice :AutoComplete.asmx


<%@ WebService
Language="C#"
CodeBehind="~/App_Code/AutoComplete.cs"
Class="AutoComplete" %>


le code Aspx de la page :AutoComplete.aspx

















<%-- Collapse down to 0px and fade out --%>









le code css du panel autocomplete

.autocomplete_completionListElement
{
margin : 0px!important;
background-color : inherit;
color : windowtext;
border : buttonshadow;
border-width : 1px; border-style : solid;
cursor : 'default'; overflow : auto; height : 200px; text-align : left; list-style-type : none;
padding:0px;
}
/* AutoComplete highlighted item */
.autocomplete_highlightedListItem { background-color: #ffff99; color: black; padding: 1px; }

/* AutoComplete item */

.autocomplete_listItem { background-color : window; color : windowtext; padding : 1px; }



pour plus de détails voir ce lien
http://www.highoncoding.com/Articles/595_Implementing_Auto_Suggest_Using_AutoComplete

lundi 10 janvier 2011

Partage Dossier windows 7

aller à :
Control Panel-->Network and Sharing Center-->change Advanced sharing settings

Control Panel/All Control Panel Items/Network and Sharing Center/
sélectionner Home or work
aller 'password protected sharing ' est déactiver là

puis suivre ces étapes pour partager dossier :