Le futur de Microsoft Internet Explorer

Pendant longtemps les créateur de sites internet on été limités par le navigateur utilisé. Cette situation est en parti due aux problèmes qu’a eu Microsoft pour développer le successeur de Windows XP.

A l’heure où je vous écris (2010), Microsoft assure encore le support du navigateur IE6. Le principal problème de navigateur est qu’il ne respecte pas les standards établis par le W3C, au profit de l’adjonction de ses propres fonctionnalitées. La situation s’est à peine améliorée avec l’arrivée d’IE7 puis d’IE8.

Aujourd’hui la béta d’Internet Explorer 9 nous montre dans quelle direction la firme de Bill Gates veut aller.

Nous pouvons citer :

  • Meilleur support des standards du W3C
  • Support du html5
  • Support de CSS3

Autrement dit une révolution pour Microsoft et un bol d’air pour les développeurs Web.

Dans cette vidéo on peut voir la dernière version beta d’IE9 manipuler des objets HTML5.
Get Microsoft Silverlight
Que du bon en perspective…

Grand Maître L

Ce mardi je vous emmène au casino !

C’est avec ce code source que vous allez pouvoir jouer au « Bandit manchot ». Il est séparé en deux parties, le Html et le JavaScript.

Pour voir le résultat, cliquez ici.

Le code Html :

<body>
<br />
<div id="globale">
<br />
<div id="contenu">
<br />
<div id="levier2">

                <input type="image" value=" " onclick="lancer_jeu();" id="levier"/>
            </div>
<p>
<br />
<div id="resultat">
<br />
<p id="affichage_gains">
                ---
                </p>
<p>
            </div>
<p>
<br />
<div id="pot">
<br />
<p class="vert">votre pot <br />est de :
                </p>
<p>

<br />
<p id="affichage_pot">100
                </p>
<p>
<br />
<p class="vert">mise :
                </p>
<p>
<br />
<p id="affichage_mise">0
                </p>
<p>
            </div>
<p>
<br />
<div id="jackpot">
                <img name="s1" src="media/theme/slot-vide.png" alt="slot-vide"/>
                <img name="s2" src="media/theme/slot-vide.png" alt="slot-vide"/>
                <img name="s3" src="media/theme/slot-vide.png" alt="slot-vide"/>
            </div>
<p>

<br />
<div id="boutons">
                <input onclick="miser();" type="image" src="media/theme/mise-plus.png" id="miser1"/>
                <input onclick="tout_miser();" type="image" src="media/theme/mise-tout.png" id="miserall"/>
            </div>
<p>
        </div>
<p>
    </div>
<p>
</body>

Le code JavaScript :

var mise = 0;
var pot = 100;
var gains = 0;
// nombre de slots
var nombre_slots = 3;
// declaration d'un tableau avec "slots" comme valeur
var slots = new Array(nombre_slots);
//dclaration de la valeur des slots
var valeur_des_slots = 0;

function lancer_jeu()
{
    if (mise == 0) return;

    // rinitialisation de la valeur des slots
    valeur_des_slots = 0;

    // creation et remplissage du tableau
    for (var index = 0; index < nombre_slots; index++) { slots[index] = tirer_aleatoirement_image(); } s1.src=slots[0]; s2.src=slots[1]; s3.src=slots[2]; calculer_gains(); } //Cette fontion sert pour augmenter la valeur du pot function garder_gains() { if (valeur_des_slots > 0)
    {
        //alert('Vous avez Gagné !!!'); // Affiche une box avec le message "Vous avez Gagné"
        pot = pot + gains;
    }
}

//fonction pour tirer alatoirement une image

function tirer_aleatoirement_image()
{
    var nombre_images = 4;
    // nom de toutes les images d'un slot
    var images = new Array("./media/slot/slot-euro.png","./media/slot/slot-cerise.png","./media/slot/slot-etoile.png","./media/slot/slot-couronne.png");
    // tirage de l'alea
    var alea = Math.floor(Math.random()*nombre_images);
    // recuperation du nom de l'image dans le tableau
    var slot = images[alea];
    // mise  jour de la valeur des slots
    valeur_des_slots = (Math.pow(10,alea)) + (valeur_des_slots);
    return slot;
}

function calculer_gains()
{
    //je fais un switch case pour savoir quels sont mes gains
    switch(valeur_des_slots)
    {
        case nombre_slots:
            gains = mise*20;
            alert('jackpot');
            garder_gains();
            break;

        case nombre_slots * 1000:
            gains =  mise*15;
            garder_gains();
            break;

        case nombre_slots * 100:
            gains = mise*10;
            garder_gains();
            break;

        case nombre_slots * 10:
            gains = mise*5;
            garder_gains();
            break;

        case 12:
        case 102:
        case 1002:
            gains = mise*2;
            garder_gains();
            break;

        default:
            gains = 0;
            break;
    }
// rechargement automatique de la mis tant que le pot est plein (plus ergonomique)
    mise = 0;
    if (pot > 0)
    {
        pot -= 1;
        mise = 1;
    }
    document.getElementById("affichage_pot").innerHTML = pot;
    document.getElementById("affichage_gains").innerHTML = gains;
    document.getElementById("affichage_mise").innerHTML = mise;
}

function miser()
{
    if (pot > 1)
    {
        pot -= 1;
        mise += 1;
        document.getElementById("affichage_pot").innerHTML = pot;
        document.getElementById("affichage_gains").innerHTML = gains;
        document.getElementById("affichage_mise").innerHTML = mise;
    }
}
function tout_miser()
{
    if (pot > 1)
    {
        mise += pot;
        pot = 0;
        document.getElementById("affichage_pot").innerHTML = pot;
        document.getElementById("affichage_gains").innerHTML = gains;
        document.getElementById("affichage_mise").innerHTML = mise;
    }
}

Le code css :

*
{
    margin: 0;
    padding: 0;
}
p
{
    font-family: Arial;
}
/*------------------divs---------------------*/
#globale
{
    width: auto;
    height: auto;
}
#contenu
{
    position: relative;
    top:25px;
    margin-left:auto;
    margin-right: auto;
    background: url(../theme/fond.png) no-repeat;
    width: 642px;
    height: 426px;
}
#levier
{
        float: right;
        width: 96px;
        background: url(../theme/levier-depart.png) no-repeat;
        width:100px;
        height:300px;
}
#levier2
{
        float: right;
        width: 96px;
}
#levier:hover
{
    background: url(../theme/levier-milieu.png) no-repeat;
}
#levier:active
{
    background: url(../theme/levier-jouer.png) no-repeat;
}
#jackpot
{
    float:right;
    top:30px;
    position:relative;
    right:30px;
}

#resultat
{
    position: relative;
    background:url(../theme/resultat.png) no-repeat;
    width: 532px;
    height: 61px;
    margin-left:6px;
    top:20px;
}
#resultat p

{
    font-size: 30px;
    top:15px;
}

#result-tirage

    {
        position: relative;
        float: right;
        width:auto;
        top:35px;
        right:40px;
    }
#pot
{
    position: relative;
    background:url(../theme/mise.png) no-repeat;
    width: 149px;
    height: 199px;
    float:left;
    top:40px;
    margin-left: 7px;
}

#pot p
{
    font-size: 15px;
    top:35px;
    margin-top: 10px;
}
#boutons
{
    position: relative;
    top:50px;
    float: left;
    left:90px;
    width: auto;
    height: auto;
}
#affichage_gains
{
    position: relative;
    color:green;
    text-align: center;
}
 #affichage_pot
{
        position: relative;
        color:green;
        text-align: center;
}

#affichage_mise
{
        position: relative;
        color:green;
        text-align: center;
}
/*------------------------------classes--------------------*/
.vert
{
        position: relative;
        color:green;
        text-align: center;
}

Grand maître L

Un code source PHP pour sauvegarder votre base de donnée MySQL

Voici un code source fonctionnel pour sauvegarder l’intégralité de votre base de donnée Mysql.


<?php
################################################################################
# L'auteur a autorisé la redistribution gratuite et l'inclusion de ce code dans
# les programmes à condition que cette notice de copyright soit dûment incluse.
# BackySQL (c)  2010 Brice Sanchez
# 10/03/2010 Brice SANCHEZ - www.brice-sanchez.com
#
# LE CODE COUVERT PAR CETTE LICENCE EST FOURNI « EN L'ÉTAT »,
# SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, INCLUANT,
# SANS S'Y LIMITER, LES GARANTIES D'ABSENCE DE DÉFAUT, DE QUALITÉ MARCHANDE,
# D'ADÉQUATION À UN USAGE PARTICULIER OU DE NON-VIOLATION DE DROITS DE TIERCES
# PARTIES. VOUS ASSUMEZ TOUS LES RISQUES LIÉS À LA QUALITÉ ET AUX PERFORMANCES
# DU CODE COUVERT PAR CETTE LICENCE. SI UN DÉFAUT, QUEL QU'IL SOIT, EST DÉTECTÉ
# DANS LE CODE COUVERT PAR CETTE LICENCE, VOUS (ET NON LE DÉVELOPPEUR INITIAL
# OU UN CONTRIBUTEUR) ASSUMEZ LE COÛT DES SERVICES D'ASSISTANCE, DES RÉPARATIONS
# OU DES CORRECTIONS NÉCESSAIRES. CETTE LIMITATION DE GARANTIE CONSTITUE UNE
# PARTIE ESSENTIELLE DE CETTE LICENCE. LE CODE COUVERT PAR CETTE LICENCE NE PEUT
# ÊTRE UTILISÉ QUE DANS LE CADRE DE CETTE LIMITATION DE GARANTIE.
# Vous utilisez ce code à vos propres risques.
################################################################################
////////////////////////////////////////////////////////////////////////////////
// @Description
//  Sauvegarde de base de donnée
// @Version				0.6
// @Licence				GNU/GPL3
//  http://www.gnu.org/licenses/gpl-3.0.html
// @Publication				Vendredi 12 Mars 2010
// @Revision				Samedi 13 Mars 2010
// @Catgorie				Administration
// @Compatibilite			PHP 4 >= 4.0.1, PHP 5
// @Auteur				Brice Sanchez
//  http://www.brice-sanchez.com/
// @Contributeur			Flashx
// @Contact
// @Télechargement
//  http://www.siteduzero.com/forum-83-498153-p1-sauvegarde-automatique-de-la-base-de-donnee-mysql.html#r4753068
// @Note
//  Utiliser un cron job toute les 24 h vers 3heure du matin
//
// @changement
//  Support la sauvegarde de DB differente
//  Windows compatibility
//  check config
//
// Remerciement
//  * à M@teo pour héberger gracieusement nos sources,
//  * à Brice pour l'élan communautaire qu'il a su ranimer,
//  * aux développeurs de siteduzero.com pour leurs conseils( notamment Sebi57)
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Configuration
////////////////////////////////////////////////////////////////////////////////
//TODO : céer un object de configuration( ajouter un nom a cette config, donner plus d'option)
// inclure la configuration : pas de C/C

// Nom de la base de donnée à enregistrer
$nom_bdd = 'test' ;

// Hôte de la base de donnée ciblé
$hote = 'localhost' ;

// Port de la base de donnée
$port = '3306' ;

// Nom d'utilisateur de la base de donnée à enregistrer
$utilisateur = 'root' ;

// Mot de passe de la base de donnée à enregistrer
$mot2passe = '' ;

// Exemple : latin1 ou utf8
$encodage_caracteres_mysql = 'latin1' ;

// Remplir le tableau si on veut sauvegarder uniquement certaines tables
// Exemple : array('table1','table2','table5')
$selection_tables_mysql = array();

// Chemin absolu de l'emplacement du site
$chemin_absolu_site = dirname( __FILE__) . DIRECTORY_SEPARATOR;

// Emplacement sur le FTP du répertoire des sauvegardes
$repertoire = 'sauvegarde_mysql';

// Nom du fichier ( ex : nomdelabasededonnee_2010-03-01_01-01-01.sql)
$ext_fichier = 'sql' ;

// Nombre de sauvegardes à garder sur le FTP
$nbre_sauvegardes_a_garder = 7 ;

define( "CHECK", true);
define( "FIRST_RUN", true);

////////////////////////////////////////////////////////////////////////////////
// Initialisation
////////////////////////////////////////////////////////////////////////////////
$repertoire_sauvegardes = $chemin_absolu_site . $repertoire.DIRECTORY_SEPARATOR;

$nom_fichier = $nom_bdd.'_'.date('Y-m-d_H-i-s').'.'.$ext_fichier ;

////////////////////////////////////////////////////////////////////////////////
// Vérification de l'environnement
////////////////////////////////////////////////////////////////////////////////
if( true == CHECK)
{
$sapi_type = php_sapi_name();// Context d'execution

if (substr($sapi_type, 0, 3) != 'cli') {
if( true == FIRST_RUN)
{
?><html><body>
<p>Il semblerai que vous souhaitez utiliser ce fichier a travers le reseaux.<br/>
<p>Si tel est votre souhais, Pensez à :
<ul>
<li>Autentifier l'attaquant;</li>
<li>Identifier l'attaquant;</li>
<li>Modifier périodiquement vos codes d'acces.</li>
</ul></p>
</body></html><?php
}
exit( );
}
if( is_dir ($repertoire_sauvegardes) === FALSE ) {
if(mkdir ($repertoire_sauvegardes, 0700) === FALSE ) {
exit('Impossible de créer le répertoire de sauvegarde'.PHP_EOL);
// TODO : Indiquer une solution
}
} else if( is_writable( $repertoire_sauvegardes)===FALSE) {
exit('Impossible d\'écrire dans le répertoire de sauvegarde'.PHP_EOL);
// TODO : Indiquer une solution
}

// tester la connexion Mysql;
// Que ce passe t-il si MySQL n'est pas en TCP mais en socket file ?
// Optimiser le mode de compatibilité mysql( interoger mysql)
// Que ce pass t'il si on se plante dans le nom des table $selection_tables_mysql( interoger mysql)
}

////////////////////////////////////////////////////////////////////////////////
// Sauvegarde de la base de donnée
////////////////////////////////////////////////////////////////////////////////

$commande  = 'mysqldump';
$commande .= ' --host='.$hote;
$commande .= ' --port='.$port;
$commande .= ' --user='.$utilisateur;
$commande .= ' --password='.$mot2passe ;
$commande .= ' --skip-opt';
$commande .= ' --compress';
$commande .= ' --add-locks';
$commande .= ' --create-options';
$commande .= ' --disable-keys';
$commande .= ' --quote-names';
$commande .= ' --quick';
$commande .= ' --extended-insert';
$commande .= ' --complete-insert';
$commande .= ' --default-character-set='.$encodage_caracteres_mysql;
$commande .= ' --compatible=mysql40';
$commande .= ' --result-file='.$repertoire_sauvegardes.$nom_fichier ;
$commande .= ' '.$nom_bdd ;

if( !empty($selection_tables_mysql) ) {
$commande .= ' '.implode(' ',$selection_tables_mysql) ;
}

// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// WARNING
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// a REVOIR, exec() serrai plus mieux ????????????????
// Execution de la commande de sauvegarde
system($commande) ;

// Compression au format GZIP du fichier sauvegardé
system('cd '.$repertoire_sauvegardes.'; gzip '.$nom_fichier) ;
// $] gzip: test_2010-03-13_02-31-16.sql.gz already exists; do you wish to overwrite (y or n)?
// et il me crée *.sql sans le gziper
// donc verifier les erreur retourner par systeme
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// WARNING
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

//TODO choix de la destination de la sauvegarde sur FTP

// Initialisation des variables
$tableau_sauvegardes = array();

// Ouverture du dossier, Attention au cache du filesysteme???
if ($repertoire_ouvert = opendir($repertoire_sauvegardes)) {
// Lecture des entrées
while( ($fichier_en_cours = readdir($repertoire_ouvert)) !== false) {
if(is_file($repertoire_sauvegardes.$fichier_en_cours)) {
if( substr( $fichier_en_cours, 0, strlen( $nom_bdd))!=$nom_bdd ) {
continue;//
}
// Mise en tableau des résultats
$tableau_sauvegardes[] = $fichier_en_cours;
}
}
// fermeture du dossier
closedir($repertoire_ouvert) ;
}

sort($tableau_sauvegardes, SORT_STRING);

// Supprime les fichiers en trop
$ln = sizeof( $tableau_sauvegardes)-( $nbre_sauvegardes_a_garder-1);
for($i=0; $i<$ln; $i++) {
unlink($repertoire_sauvegardes.$tableau_sauvegardes[$i]);
}

////////////////////////////////////////////////////////////////////////////////
// Loger nos actions
////////////////////////////////////////////////////////////////////////////////
//TODO, envoyer un mail : c'est rassurant

Grand maître L