Asselin Benoit Développement - Création et conception de sites internet - Amiens Somme Picardie Paris France

O'Reilly France - Fermeture définitive ... ( oreilly.fr éditeurs de livres )
08`05`2008

Aucun commentairePoster un commentaire !
Tags: Actualites Internet

Voici le message que l'on peut lire sur le site http://www.oreilly.fr/


O'Reilly France - www.oreilly.fr

Fermeture définitive

Les éditions O'Reilly ont fermé définitivement.

Nous sommes sincèrement désolés pour le (trop) petit nombre de lecteurs qui appréciait nos ouvrages.

Si vous souhaitez nous contacter, vous pouvez nous écrire à oreilly(at)immateriel(dot)fr


Voici une bien triste nouvelle...

UPDATE : Si vous désirez connaître les suites de cette affaire, je vous invite à consulter le blog http://www.immateriel.fr/


Créer une copie conforme / cloner une table MySQL (Database)
01`05`2008

4 commentairesPoster un commentaire !
Tags: MySQL

L'astuce suivante consiste à copier une table avec ses données, mais surtout en faire une copie conforme. Le but étant de conserver les types et les index :

CREATE TABLE table_destination LIKE table_source ;
INSERT INTO table_destination SELECT * FROM table_source ;


Le contre-exemple le plus connu est la ligne de commande suivante :

CREATE TABLE table_destination SELECT * FROM table_source ;

La ligne ci-dessus fera une copie des données, mais la structure de la table de destination suivera simplement les besoins de la requête SELECT.


Référencement Google : Les dates des prochaines Google Dance 2009 !
20`04`2008

3 commentairesPoster un commentaire !
Tags: Google Referencement

Le référencement est l'action de référencer, c'est à dire mentionner quelque chose. Sur Google et autres moteurs de recherches, c'est faire des liens extérieurs vers votre propre site, c'est y faire référence et référencer votre propre site. ( cette phrase est reprise d'un article de Wikipedia sur le référencement. )

Mais une question subsiste pour être référencé :
Comment référencer son site et surtout être trouvé dans la recherche Google sachant que son propre site a un PageRank insuffisant ou très faible ?

La réponse est très simple et inversement proportionnel à la difficulté de sa mise en place :
Il "suffit" de trouver des combinaisons de mots clés libres dans Google, qui sont ou qui seront susceptible d'être saisis par un chercheur (en référencement ? ;)
J'entends par "mots clés libres" des combinaisons de mots clés où peu de résultats ressorts, et/ou les sites arrivant en première position soient des sites à PageRank très faible.

Voici une exemple de cette théorie sur le référencement avec ce titre fort accrocheur Google Dance 2009... alors que personne ne peut prédire les prochaines Google Dance et encore moins les Google Dance de l'année prochaine ( Google Dance 2009 ).


Proposition d'écriture des Variables CSS - cssvariables (CSS, W3C)
13`04`2008

Aucun commentairePoster un commentaire !
Tags: CSS W3C

Peut-être comme moi, vous trouvez qu'il manque cruellement d'une fonctionnalité dans les feuilles de style CSS : La possibilité de créer des variables CSS.

Voici une proposition d'écriture sur la manière de déclarer les variables CSS selon Apple, Inc. et Disruptive Innovations. :

@variables {
	LogoCouleurDeFond: #ff6600;
}

div.logo {
	background-color: var(LogoCouleurDeFond);
}

@variables { } permet de définir les différentes variables avec leurs valeurs respectives, et var( ) permet d'appeler la variable dans la feuille de style.

 

@variables {
	myMargin1: 2em;
}
@variables print {
	myMargin1: 5em;
}

.class1, div.class2 {
	margin-left: 30px;
	margin-left: var(myMargin1);
}

L'exemple ci-dessus nous montre comment écrire la variable CSS tout en assurant une rétrocompatibilité avec les navigateurs qui ne supporteront pas les variables CSS.
Vous noterez aussi au passage le @variables print { } qui permet de définir les variables CSS selon le type de médias.

Source : http://disruptive-innovations.com/zoo/cssvariables/

Je rappelle que cet article est une présentation de proposition d'écriture pour les variables CSS. Cette écriture n'est donc supportée par aucun navigateur web. Toutefois, cette proposition ayant notamment été faite par Apple Inc., mon petit doigt me dit que l'on risque sûrement de retrouver cette écriture dans une prochaine version de Webkit ;-)


Astuce avec Math.max() et Math.min() en Javascript sous Internet Explorer
06`04`2008

Aucun commentairePoster un commentaire !
Tags: Javascript Internet Explorer

Math.max() et Math.min() attendent deux nombres comme paramètres. Math.max() retourne le plus grand des deux nombres, et Math.min() retourne le plus petits des deux nombres.

Depuis Microsoft Internet Explorer 5.5, vous pouvez ajouter plus de paramètres, et de manière générale les navigateurs dernières générations supportent cette écriture (Microsoft Internet Explorer, Mozilla Firefox, Safari, Opera Browser...)

<script type="text/javascript">

document.writeln(Math.max(5, 4, 3, -1, 9));	// retourne 9

document.writeln(Math.min(5, 4, 3, -1, 9));	// retourne -1

</script>

The Acid3 Test 100% ! avec Webkit ( et Opera Browser )
28`03`2008

Aucun commentairePoster un commentaire !
Tags: Actualites Internet Safari Webkit

Le Webkit, version de développement de Safari, est, dans sa toute dernière version, 100 % compatible avec le test Acid3, censé vérifier la conformité d'un navigateur par rapport aux "standards" du web.

Opera se prévaut également d'un tel taux de succès au test Acid3, toutefois Webkit est le seul navigateur téléchargeable sur lequel vous pourrez vérifier la compatibilité du test Acid3. La version publique téléchargeable de Opera ne devrait sortir que d'ici une semaine...

Chose amusante, les développeurs du Webkit ont annoncé avoir trouver un bug dans le test Acid3 qui conduirait à un non respect de la norme SVG 1.1 pour ceux qui auraient passé le test à 100/100 jusque là.


Créer / convertir des adresses de sites internet HTTP en liens cliquables
23`03`2008

2 commentairesPoster un commentaire !
Tags: PHP Regex XHTML

La fonction ci-dessous vous permet par l'intérmédiaire des expressions régulières de convertir automatiquement les adresses de sites internet http://www.ab-d.fr/ en lien actif avec la balise <a href="http://www.ab-d.fr/" onclick="window.open(this.href); return false;">http://www.ab-d.fr/</a>.

Accessoirement, la fonction convertit aussi les adresses emails... libre à vous de rajouter d'autres fonctionnalités de remplacement grâce à la fonction preg_replace().

function texte2url($texte) {
	$patterns[0] = '/(https?:\/\/\S+)/i';
	$replacements[0] = '<a href="$1" onclick="window.open(this.href); return false;">$1</a>';
	
	$patterns[1] = '/(\S+@\S+\.\S+)/i';
	$replacements[1] = '<a href="mailto:$1">$1</a>';
	
	return preg_replace($patterns, $replacements, $texte);
}


Equivalent de parseInt en PHP avec preg_match (PHP, Regex, Javascript)
15`03`2008

5 commentairesPoster un commentaire !
Tags: PHP Regex

La fonction parseInt() en Javascript tansforme une chaîne de caractères en nombre entier et renvoie la valeur numérique de celle-ci comme résultat. Le plus proche équivalent en PHP est la fonction intval(). Toutefois, le résultat retourné me semble trop restrictif avec des chaînes de caractères ne débutant pas par un nombre. Les expressions rationnelles (ou expressions régulières) permettent de outre passer cette limitation. Pour ce faire, on utilise la fonction preg_match() :

function parseInt($string) {
//	return intval($string);
	if(preg_match('/(\d+)/', $string, $array)) {
		return $array[1];
	} else {
		return 0;
	}
}

echo parseInt("2008");
echo parseInt("soit 99.90 francs");
echo parseInt("www.w3.org");
echo parseInt("300 soldats spartiates");
echo parseInt("du texte brut...");

Ce script affichera comme résultat :
- 2008
- 99
- 3
- 300
- 0


Gérer window.orientation avec un iPhone / iPod Touch dans Safari (Webkit)
08`03`2008

6 commentairesPoster un commentaire !
Tags: iPhone Javascript Webkit

Ce script vous permet de déterminer et de gérer l'orientation d'un iPhone ou d'un iPod Touch grâce à la variable window.orientation et à l'évènement window.onorientationchange.

Exemple page-iphone-orientation.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title> window.onorientationchange & window.orientation </title>
	
	<script type="text/javascript">
	
	window.onorientationchange = function() {
		if(window.orientation !== undefined) {
			document.getElementById('value-1').innerHTML = window.orientation;
			switch(window.orientation) {
				case 0 :
					document.getElementById('value-2').innerHTML = 'Portrait - Normal';
					break;
				case 90 :
					document.getElementById('value-2').innerHTML = 'Paysage - Dans le sens <strong>contraire<\/strong> des aiguilles d\'une montre.';
					break;
				case -90 :
					document.getElementById('value-2').innerHTML = 'Paysage - Dans le sens des aiguilles d\'une montre.';
					break;
				case 180 :
					document.getElementById('value-2').innerHTML = 'Portrait - Renversé';
					break;
			}
		} else {
			/* Vous n'utilisez ni un iPhone, ni un iPod Touch... */
			alert('Votre navigateur web ne supporte pas window.orientation');
		}
	}
	window.onload = window.onorientationchange;
	
	</script>
</head>

<body>
	
	<h1>window.onorientationchange & window.orientation</h1>
	
	<p>window.orientation = <span id="value-1"></span> // <span id="value-2"></span></p>
	
	<p>Cette page ne fonction qu'avec les iPhone et les iPod Touch.</p>
	
</body>
</html>

Ce script pourrait aussi servir à détecter si le navigateur utilisé est bien un navigateur Safari iPhone / iPod Touch.


$_SERVER['PHP_SELF'] et injection de code HTML (création site internet)
02`03`2008

Aucun commentairePoster un commentaire !
Tags: PHP XHTML Securite

Cette faille de sécurité n'est pas nouvelle en soit, mais il est parfois bon de faire un petit rappel. De manière générale, ne faites jamais confiance aux variables $_SERVER, $_COOKIE, mais aussi, $_GET, $_POST, $_REQUEST, $_FILES...

Exemple de faille avec <?php echo $_SERVER['PHP_SELF']; ?> dans la page php suivante :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<html lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title>$_SERVER['PHP_SELF']</title>
</head>
<body>
	<form action="<?php echo $_SERVER['PHP_SELF']; ?>" action="post">
		<fieldset>
			<legend>Ma FORM</legend>
			<p><input type="submit"></p>
		</fieldset>
	</form>
</body>
</html>

Si vous appelez la page ci-dessus avec le lien suivant :

http://www.monsite.com/page.php/"><script>alert('Injection!');</script>

vous verrez une belle fenêtre de dialogue Javascript "Injection!" ...

Pour remédier à cette faille de sécurité, pensez à toujours sécuriser vos variables avec une fonction du type htmlentities().


insertAfter() avec insertBefore() et node.nextSibling (DOM Core Level 1)
23`02`2008

Aucun commentairePoster un commentaire !
Tags: Javascript DOM

La méthode element.insertBefore() permet d'insérer un nœud (node) enfant juste avant le nœud enfant de référence parmi un nœud parent.

noeudParent.insertBefore(noeudAInserer, noeudDeReference);


Il n'existe pas de méthode element.insertAfter() pour insérer un nœud après le nœud de reference. Pour contourner cette limitation, vous pouvez utiliser element.nextSibling, qui renverra le nœud suivant au nœud spécifié.

noeudParent.insertBefore(noeudAInserer, noeudDeReference.nextSibling);


Grâce au code source ci-dessous, vous pouvez ajouter la méthode element.insertAfter() et ainsi l'utiliser aussi simplement que element.insertBefore().

Node.prototype.insertAfter = function(noeudAInserer, noeudDeReference) {
	if(noeudDeReference.nextSibling) {
		return this.insertBefore(noeudAInserer, noeudDeReference.nextSibling);
	} else {
		return this.appendChild(noeudAInserer);
	}
}

Attention: le code ci-dessus ne fonctionne pas sous Internet Explorer... pour ce faire, vous devez utiliser une simple fonction Javascript.


La peuso-classe :target en CSS3 Sélecteur W3C (World Wide Web Consortium)
18`02`2008

Aucun commentairePoster un commentaire !
Tags: CSS Webkit

Certains URIs se réfèrent à un point déterminé dans la page HTML par un identificateur d'ancre www.ab-d.fr/page.html#ancre.

L'élément cible peut être représenté par la pseudo-classe :target en CSS level 3 (Cascading Style Sheets).


Exemple page-css3-target.html

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
	"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
	<title>CSS3 *:target</title>
	
	<style type="text/css" media="screen">
	
	h1:hover { text-decoration: underline; } /* CSS 1 et 2 */
	h1:target { background-color: #ff6600; } /* CSS 3 */
	
	</style>
</head>

<body>
	
	<h1 id="title-1">Titre n°1</h1>
	<p>CSS 3...</p>
	<p>CSS 3...</p>
	<p>CSS 3...</p>
	<hr />
	
	<h1 id="title-2">Titre n°2</h1>
	<p>CSS 3...</p>
	<p>CSS 3...</p>
	<p>CSS 3...</p>
	<hr />
	
	<p><a href="#title-1">Titre n°1</a> | <a href="#title-2">Titre n°2</a></p>
	
</body>
</html>

Le sélecteur :target fonctionne pour le moment sur Mozilla Firefox 2, Safari 3, et Opera Browser 9.50


Rendre ''position: fixed'' compatible Internet Explorer 6 (CSS, expression)
11`02`2008

5 commentairesPoster un commentaire !
Tags: CSS Internet Explorer XHTML

Ce code a pour but de rendre compatible le fameux position : fixed sur Internet Explorer 6 à l'aide de la propriété expression() propre à ce dernier. Cette propriété permet de recalculer dynamiquement le contenu de l'expression expression(...) durant la manipulation de la page, en l'occurrence lors d'un évènement window.onscroll, sans code Javascript additionnel.


Page page-position.html

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
	"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
	<title>Rendre "position: fixed" compatible Microsoft Internet Explorer 6</title>
	
	
	<!-- Code CSS pour Firefox, Safari, Opera, Internet Explorer 7... -->
	
	<style type="text/css" media="screen">
		
	#fixed {
		position: fixed;
		left: 0; top: 0; right: 0;
		width: 100%;
		padding: 10px; background: gray;
	}
	
	</style>
	
	
	<!-- Code CSS pour Internet Explorer 6 -->
	
	<!--[if lte IE 6]>
	<style type="text/css" media="screen">
	
	#fixed {
		position: absolute;
		top: expression((document.documentElement.scrollTop || document.body.scrollTop) + this.offsetHeight - this.offsetHeight);
	}
	
	</style>
	<![endif]-->
	
	
</head>

<body>
	
	<div id="fixed">DIV en position: fixed;</div>
	
	<p>Contenu du site internet ...</p>
	<p>Contenu du site internet ...</p>
	<p>Contenu du site internet ...</p>
	<p>Contenu du site internet ...</p>
	<p>Contenu du site internet ...</p>
	<p>Contenu du site internet ...</p>
	<p>Contenu du site internet ...</p>
	<p>Contenu du site internet ...</p>
	<p>Contenu du site internet ...</p>
	<p>Contenu du site internet ...</p>
	<p>Contenu du site internet ...</p>
	<p>Contenu du site internet ...</p>
	<p>Contenu du site internet ...</p>
	<p>Contenu du site internet ...</p>
	
</body>

</html>

UPDATE : Il est important de copier l'intégralité du code avec les balises commentaires propres à Internet Explorer, sinon le fix ne fonctionnera pas !


Comment créer une variable CSS - Cascading Style Sheets ?
06`02`2008

4 commentairesPoster un commentaire !
Tags: CSS PHP XHTML

La solution consiste n'ont pas à créer une variable CSS, mais à utiliser PHP pour créer des variables dans le code CSS. Pour ce faire, nous allons utiliser l'écriture simplifiée de
<?php echo $variable_css; ?>   en   <?= $variable_css ?> .


Page page.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	
	<title>Variable CSS - Cascading Style Sheets</title>
	<link rel="stylesheet" type="text/css" href="style.php" />
</head>

<body>


<h1>Variable CSS - Cascading Style Sheets</h1>

<p class="color-1">Bloc de couleur n°1 - Variable CSS Cascading Style Sheets</p>

<p class="color-2">Bloc de couleur n°2 - Variable CSS Cascading Style Sheets</p>

<p class="color-3">Bloc de couleur n°3 - Variable CSS Cascading Style Sheets</p>


</body>

</html>


Page style.php et non style.css

<?php
header('Content-Type: text/css');

$color_0 = '#000000';
$color_1 = '#ff0000';
$color_2 = '#ff3300';
$color_3 = '#ff6600';

?>

* { font-family: sans-serif; }

h1 {
	padding: 5px;
	color: <?= $color_0 ?>;
	border: 5px solid <?= $color_2 ?>;
	background-color: <?= $color_3 ?>;
}

p.color-1 { color: <?= $color_1 ?>; }
p.color-2 { color: <?= $color_2 ?>; font-weight: bold; }
p.color-3 { color: <?= $color_3 ?>; font-style: italic; }


MySQL racheté... mais PostgreSQL dans tout ça ? (SGDB Open Source)
31`01`2008

Aucun commentairePoster un commentaire !
Tags: MySQL PostgreSQL Actualites

PostgreSQL n'est pas à vendre

À la lumière du récent rachat de MySQL, j'aimerais une fois de plus répondre à une question qui nous est posée de temps en temps: «Qui rachètera PostgreSQL?». Bien sûr, cela fait sourire ceux qui sont immergés dans le monde de l'Open Source, mais nous y répondons invariablement «PostgreSQL ne peut pas être acheté». Bien que de loin MySQL et PostgreSQL se ressemblent (ce sont des "bases de données Open Source"), il s'agit de deux choses très différentes, aussi bien sur le plan technique que sur le reste. On pourrait résumer leurs différences comme cela:

MySQL est un PRODUIT Open-Source
PostgreSQL est un PROJET Open-Source

Bien que 'produit' et 'projet' soient des mots proches, la distinction est énorme. MySQL est dirigé par une organisation à but lucratif (MySQL AB), à qui appartient le code, qui a embauché pratiquement tous les développeurs, qui dirige de manière autoritaire dans quelle direction doit aller le produit, et qui a le droit de changer (et ne s'en est pas privé) la licence d'utilisation du logiciel (ainsi que de sa documentation).

À l'opposé, PostgreSQL n'est pas dirigé par une société, le projet est contrôlé par la communauté, il n'y a aucun problème sur la licence, les développeurs principaux sont répartis sur un large spectre d'organisations publiques ou privées. Comment un logiciel peut profiter d'un tel système ? Bien, la signification originale de LAMP a évolué (selon: Linux, Apache, MySQL, Middleware, PHP, Perl...) en des modèles similaires, et tous fonctionnent. Tout comme PostgreSQL, il n'y a aucun moyen "d'acheter" ces projets.

Je ne sais pas trop quoi penser du rachat à ce jour. Il m'est difficile de savoir si cela sera bon ou mauvais pour PostgreSQL (le produit du projet), ou bon ou mauvais pour MySQL (le produit). C'est probablement mauvais pour le projet MySQL, je pense en effet que les employés de MySQL AB et la communauté auraient préférés l'option IPO jadis promise. Cela leur aurait probablement rapporté plus de publicité et de visibilité sur le long terme. Pour faire court, le produit (MySQL) sera inévitablement ralenti, le temps que la société (MySQL AB) soit absorbée par Sun (ce n'est pas la peine de mentionner que Falcon ne sera peut-être jamais terminé). Sur le long terme, cela sera peut-être un "plus" pour le produit. Pour l'instant, les plus gros gagnants sont les investisseurs et les directeurs, qui n'ont probablement pas réfléchi trop longtemps pour accepter une offre de 800 millions de dollars.

Est-ce que Sun continuera de supporter PostgreSQL? Ils disent que oui, bien que de toute façon ils ne contribuent pas énormément à PostgreSQL, en termes d'effort de développement ou de contributions en argent. Les sociétés qui voudraient contribuer à PostgreSQL peuvent non seulement embaucher les développeurs du projet, mais peuvent aussi donner au SPI (Software in the Public Interest, une organisation à but non lucratif, loi américaine 501(c)(3). Ainsi, si Sun ne veut pas démontrer son support continu à PostgreSQL en payant 1 million de dollar pour écrire du code résolument génial, ils peuvent toujours participer en donnant de l'argent via le SPI...

Article : Greg Sabino Mulane « Postgres is not for sale » - Traduction: Jean-Paul Argudo
Source: PostgreSQLFr.org