Sol@rweb weblog

jeudi 10 mai 2007

Forum pour les développeurs sur mediabox

forum developpeur mediabox

Après plusieurs mois de réflexion, nous sommes heureux, avec l'équipe des animateurs des forums médiabox (les modérateurs des différents forums), de vous présenter le nouveau forum spécialisé pour les développeurs (web).

Il remplace l'ancien forum "dreamweaver" qui souffrait de sa liaison avec le célèbre logiciel notamment par la qualité des questions posées.

Vous devriez trouver les salles vous intéressant dans la plupart des sujets concernants l'administration, les bases de données, la programmation et la conception.

L'adresse du forum : http://developpeur.mediabox.fr/

On pourrait se demander où sont Flex, Flash et Action Script, qui restent de la programmation.

- Pour le flash, il reste le forum spécialisé, qui en a profité pour changer de peau lui aussi : http://flash.mediabox.fr/.

- Pour flex, un autre forum dédié est en préparation et devrait voir le jour sous peu.

Pour finir, si vous n'êtes pas encore au courant, mediabox organise pour la 7ème année son concours créa, qui réunit des flasheurs de tous horizons pour produire en une soirée une "animation" sur un sujet défini.

Si vous êtes "flexeur" cette année vous pouvez parfaitement participer, tout logiciel ayant pour sorti du swf est accepté.

Je ferais par ailleurs parti du jury pour cette édition, en espérant voir des animations de qualité malgré le peu de temps dont disposent les condidats :)

image créa 07 mediabox

http://crea.mediabox.fr/

lundi 9 avril 2007

Flash (et flex) sur la wii avec le projet wiiflash

logo wiiflashUn premier post technologique depuis bien longtemps avec un projet qui me tiens à coeur depuis que je suis au courant de son existance.

Il s'agit du projet "WiiFlash", qui a pour objectif de prendre en charge les contrôles de la wiimote et du nunchuk pour le flash, ce qui offre donc de grandes possibilités pour créer des jeux flash pour la wii.

Voici l'adresse officielle du projet : http://www.wiiflash.org

Le projet a été ouvert en open-source le samedi 7 avril et est donc utilisable par tout un chacun pour une somme correct, voici un calcul rapide :

  • Un adaptateur bluetooth : 15 euros
  • Une wiimote : 40 euros (le plus cher)
  • Un nunchuk : 20 euros (pas obligatoire)

Il faut donc débourser 75 euros environ pour pouvoir faire du flash pour la wii

J'en profite aussi pour vous conseiller le logiciel "BlueSoleil" qui m'a permis de prendre en charge la détection des wiimotes sur mon pc, les drivers génériques de windows n'ayant pas fonctionnés.

Il faut aussi noter que malheureusement, le serveur (qui interprète les signaux des wiimotes) ne semble fonctionner qu'avec des wiimotes connectées au pc pour le moment, donc pas encore de prise en charge sur la wii directement.

J'en viens donc au but du post, qui est une petite vidéo de présentation de mes premiers tests, principalements axés sur l'utilisation du stick du nunchuk, on peut aussi y voir un affichage dans la console lors de la détection de l'appui sur une touche, connexion et déconnexion du nunchuk etc... Ce que vous ne pourrez pas voir dans la vidéo : vibration de la wiimote comme on le souhaite, allumage des leds des wiimote comme on le souhaite...

Il y a par ailleurs une première partie avec une seule wiimote et la suite est avec 2 wiimotes.

Et pour finir, le logiciel de capture que j'ai utilisé limitait à 4 images par secondes, ce n'est donc pas aussi fluide qu'en réalité.

Voici le lien vers la vidéo !

mardi 6 février 2007

Modules web recherche un développeur web

Modules Web, société spécialisée dans le domaine du E-Commerce et la création d'applications web recherche un développeur web pour intégrer son équipe.

Le contrat à pourvoir est à durée indéterminée et est basé à Vannes (56)

Les compétances requises sont :

  • PHP
  • MySQL
  • Javascript
  • XML
  • Expérience en AJAX appréciée

Minimum BAC +2/3, des expériences réussies dans le développement de site web (personnel ou professionnel) sont impératives

Envoyez nous votre CV et quelques exemples de réalisations à l'adresse : emploi at modules-web.com

Site web : http://www.modules-web.com

vendredi 26 janvier 2007

Google dance de janvier 2007

logo google

Me revoici avec un petit billet référencement.

Pour ceux qui n'ont pas encore remarqué, ça bouge un peu dans le monde du pagerank google depuis quelques jours, une google danse à bien l'air d'être en cours :)

Pour commencer, 2 points à rappeler :

Vous l'aurez compris c'est donc un indicateur utilisé par google pour définir la popularité d'un site.

Quelques conseils :

  • Pour avoir un bon pagerank il n'y a pas beaucoup de solutions, il faut obtenir des liens d'autres sites vers son site, on conseille généralement l'inscription dans l'annuaire dmoz qui est une preuve qu'un site est viable, l'annuaire étant très contrôlé.
  • On conseil aussi d'obtenir des liens de page ayant elles mêmes de bon pagerank, on peut considérer qu'une partie du pagerank de la page de départ est "transférée" à la page d'arrivée
  • On notera aussi l'importance d'obtenir un lien depuis un site "trusted", même s'il y en a peu, ça veut tout simplement dire qu'un site en qui google à confiance vous porte de l'intérêt :) (voir un article)
  • Voici un petit outil pour surveiller en temps réel l'évolution du pagerank de votre site sur les différents serveurs de google, livepr

Et donc pour finir, cette google danse m'a été assez profitable avec notre service ts-serveur.com qui est passé pagerank 5 directement en seulement trois mois d'existance, ainsi que ce blog media-box, qui profite bien sûr de la popularité du forum.

En espérant que cette google danse vous a été utile ou que ces quelques conseils vous prépareront à la suivante ;)

PS : On notera l'utilisation abusive du mot "google danse", les google danse d'entant mettait à jour aussi bien le pagerank que le positionnement dans le moteur de recherche etc... aujourd'hui c'est plus une simple mise à jour du pagerank, le positionnement évolue constamment.

lundi 18 décembre 2006

Des barres d'avancement en CSS

Bonsoir à tous mes lecteurs.

Un petit billet pour présenter une petite méthode pour faire des barres d'avancement que j'utilise depuis toujours mais que certains ne connaissent peut-être pas encore.

D'habitude je n'utilise pas d'image, je cré un div de la longeur voulue puis un deuxième div à l'intérieur de la longueur qui correspond au pourcentage choisis.

je me demandais ce que ça pouvait donner avec un petit dégradé, histoire de dire "on est dans le vert" ou "attention c'est juste la".

C'est maintenant chose faite donc, avec une méthode à l'inverse de la précédente, le div inclus ne représente pas le pourcentage utilisé mais viens cacher le dégradé à partir de la droite.

J'ai failli oublier le lien vers le labo ou vous pouver trouver l'exemple et les sources.

PS : Désolé pour les commentaires j'ai tout désactivé, marre du spam...

dimanche 1 octobre 2006

Prise en charge du tri sur plusieurs niveaux avec tool-man

Ayant eu besoin récemment de réaliser un tri par drag and drop sur plusieurs niveaux j'ai souhaité utiliser ma librairie habituelle à savoir celle de tool-man.org

Après plusieurs test et quelques recherches je me suis rendu compte que ce n'était pas faisable ou alors j'étais passé à côté (ce qui est possible).

Ce qu'il se passe c'est que la zone de "saisie" pour le drag and drop n'est pas définie et prend donc tout l'élément li. Or pour imbriquer des listes il faut insérer un ul dans un élément li, l'ul imbriqué ne pourra donc pas être trié à cause de la zone de saisie du dessus.

J'ai donc effectué une légère modification au script afin de pouvoir définir une zone clickable en englobant ce que l'on souhaite par un div avec la class "clickable".

Vous pouvez voir le résultat ci-dessous et accéder à la source dans mon labo. J'espère que ça vous sera utile ;)

vendredi 25 août 2006

Fonction php array_push_inside

phpEncore un premier post depuis longtemps, j'aurais pas mal de chose à raconter mais en ce moment je n'ai plus internet chez moi.

C'est donc à l'occasion de mon nouveau travail que j'ai été amené à vouloir insérer un tableau dans un autre tableau à une position donnée.

Il existe pas mal de fonction pour manipuler les tableaux par défaut mais après recherche je n'ai pas trouvé cette fonction.

Je l'ai donc créée, et je la met ici, ça peut toujours être utile !

// Permet d'insérer un tableau à l'intérieur d'un autre tableau a une position donnée
function array_push_inside($array_principal, $array_insert, $position)
{
	// On commence par diviser le tableau envoyé a la position demandée
	$array1 = array_slice($array_principal, 0, $position);
	$array2 = array_slice($array_principal, $position);
	
	// On fusionne les 3 tableaux
	$array = array_merge($array1, $array_insert, $array2);
	
	// Retour du tableau final
	return $array;	
}

Moi je stop, sur mon flex 2...

logo flexEt voici un premier billet depuis bien longtemps avec la découverte d'une application récente de chez Adobe nommée "Flex".

C'est en écoutant les commentaires élogieux de mes collègue du côté flash de la communauté mediabox que j'ai compris que c'était une technologie importante, utilisant le langage Actionscript troisième du nom, plus strict, plus beau, plus puissant et mieux structuré il fallait absolument le tester !

Qu'est-ce que flex ?

Flex est une technologie alliant un format XML propriétaire nommé le MXML pour décrire les éléments, les composants, etc. Mais aussi l'actionscript afin de pouvoir développer des évenements à côté.

C'est donc assez proche du XUL de ce côté-ci qui utilise lui aussi un format XML propriétaire et du javascript pour la gestion des évenements.

Le framework de Flex est 2 est complètement gratuit et l'on peut donc utiliser cette technologie "à la main" mais Adobe a sorti avec cette nouvelle version un outil nommé "Flex Builder" basé sur eclipse et qui offre un très grand confort d'utilisation de la même manière qu'un visual studio du côté de Microsoft.

On pourra dire malheureusement, mais c'est assez compréhensible, Flex Builder n'est pas gratuit et il faudra débourser minimum 537 euros pour acquérir cette première version en anglais.

Un dernier point assez important à noter tout de même est que pour lire les application développée en flex 2 il faut disposer du flash player 9.

capture flex builder
Cliquez sur l'image pour voir une capture

Découverte du langage

Application sans actionscript

Pour bien commencer j'ai suivi une première leçon qui consiste à réaliser une petite interface pour lire un flux RSS.

Extremement simple, il y a juste une utilisation de quelques composants et même pas d'actionscript puisqu'un objet défini dans le MXML permet d'automatiser cette requete.

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="feedRequest.send();">
	<mx:HTTPService 
	    id="feedRequest" 
	    url="http://www.wtg-fansubs.com/flux-20-dernieres-sorties.rss"
	    useProxy="false"/>
	<mx:Panel x="10" y="10" width="400" height="400" layout="absolute" title="{feedRequest.lastResult.rss.channel.title}" id="pnl_main">
		<mx:DataGrid x="39" y="50" id="dgr_rss" dataProvider="{feedRequest.lastResult.rss.channel.item}" width="302">
			<mx:columns>
				<mx:DataGridColumn headerText="Posts" dataField="title"/>
				<mx:DataGridColumn headerText="Date" dataField="pubDate"/>
			</mx:columns>
		</mx:DataGrid>
		<mx:TextArea x="39" y="209" width="302" height="45" id="txt_desc" editable="false" htmlText="{dgr_rss.selectedItem.description}" />
		<mx:LinkButton x="39" y="258" label="Lecture !" id="btn_read" click="navigateToURL(new URLRequest(dgr_rss.selectedItem.link));" />
	</mx:Panel>
</mx:Application>

Ci-dessus on remarque l'utilisation du HTTPService qui va récupérer les données du flux sur l'évenement : creationComplete="feedRequest.send();"

L'affichage est ensuite simplifié en utilisant seulement ce type de données : {feedRequest.lastResult.rss.channel.title}

Utilisation de l'actionscript

Après ce tutoriel je me suis même demandé comment utiliser l'actionscript, heureusement la suite s'avérait plus intéressante, me basant sur une idée donnée dans les leçons je me suis donc lancé à tatons dans la création d'un convertisseur monétaire qui nécessite un évenement développé à la main.

La première chose à faire est donc de lier un fichier actionscript à notre application et pas à écrire le code dans le XML comme ils le font dans les leçons...

On utilise alors :

<mx:Script source="monfichier.as" />

La solution la plus adaptée pour joindre un évenement a un bouton est d'utiliser un ecouteur grâce à une partie MXML : creationComplete="createListener();"

On défini alors l'évenement sur notre bouton :

<mx:Button x="205" y="20" label="Convertir" width="68" id="btn_convert" />

public function createListener():void
{
    btn_convert.addEventListener(MouseEvent.CLICK, convert);
}

On peut finir par la création de notre petite fonction de convertion :

public function convert(e:Event):void
{
	var val:Number;
	var euro:Number = 6.55957;
	
	if (txt_toConvert.text == "")
	{
		Alert.show("Vous devez entrer une valeur");
	} else {
		val = parseInt(txt_toConvert.text);
		if (cmb_devises.selectedItem.data == "F")
		{
			txt_res.text = Math.round(val/euro).toString()+" €";
		} else if (cmb_devises.selectedItem.data == "E") {
			txt_res.text = Math.round(val*euro).toString()+" FF";
		}
	}
}

Conclusion

Flex semble offrir un outil très puissant pour le développement d'application avec une interface web. Au même niveau que le XUL on pourra imaginer de nombreuses utilisations mais flex builder parait être un atout important pour cette technologie.

Vous pouvez consulter mon test dans mon labo et regarder un exemple d'utilisation chez adobe sans oublier qu'il vous faut absolument le flash player 9 !

Installer et contrôler un service windows en vb.net

Voici un petit tutoriel en .net lié à une problématique rencontrée en stage par rapport aux Service Windows.

Le problème

Mon but était de créer un service windows pour une partie d'une application qui est un serveur en attente de réception ou d'envoi de fichier.

La création d'un service windows dans vb.net est simplissime, toutefois son installation semble nettement plus laborieuse lorsque l'on voit les différents tutoriaux sur le sujet.

ajouter un installeurEn effet une fois notre service prêt, on doit ajouter un installeur, en cliquant droit sur la partie "design" de notre service et en sélectionnant "ajouter un installeur". Une fois la configuration effectuée, on peut reconstruire la solution.

Et c'est à partir de ce point la que l'on nous propose seulement une solution en ligne de commande pour installer et désinstaller notre service.

On doit tout d'abord trouver le fichier installUtil.exe, qui est dans c:\windows\Microsoft.net\Framework\"numero de version" puis appeler notre service avec ce programme : installUtil.exe c:\.....\monService.exe.

Pour le désintaller c'est la même commande mais avec installUtil.exe /U

La solution

Et voici venu le temps de la solution cachée, que l'on ne retrouve dans aucun tutoriel mais sur le support de Microsoft (et pas dans le msdn).

Voici l'adresse du lien :
http://support.microsoft.com/default.aspx?scid=kb%3Bfr%3B317421 qui nous détail la procédure permettant la création d'un installeur pour notre service !

Utilisation d'un projet de configuration compilé pour installer le service Windows

Une fois terminées les étapes de la section précédente relative à la configuration du projet de service Windows, procédez comme suit pour ajouter un projet de déploiement qui assemble l'application du service en vue de son installation :
1.Pour ajouter un nouveau projet à votre projet LogWriterService, procédez comme suit :
a. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Solution 'LogWriterService', pointez sur Ajouter, puis cliquez sur Nouveau projet.
b. Sous Types de projets, cliquez sur Projets de configuration et de déploiement.
c. Sous Modèles, cliquez sur Projet de configuration.
d. Dans la zone de texte Nom, tapez ServiceSetup.
e. Dans la zone de texte Emplacement, tapez C:\, puis cliquez sur OK.
2.Pour indiquer au projet de déploiement ce qu'il doit assembler, procédez comme suit :
a. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur ServiceSetup, pointez sur Ajouter, puis cliquez sur Sortie de projet.
b. Dans la boîte de dialogue Ajouter le groupe de sorties du projet, cliquez sur LogWriterService dans la zone Projet.
c. Cliquez sur Sortie principale, puis sur OK.
3.Pour que votre installation soit correcte, il vous suffit d'ajouter une sortie principale. Pour ajouter les actions personnalisées, procédez comme suit :
a. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur ServiceSetup, pointez sur Affichage, puis cliquez sur Actions personnalisées.
b. Cliquez avec le bouton droit sur Actions personnalisées, puis cliquez sur Ajouter une action personnalisée.
c. Cliquez sur Dossier d'application, puis sur OK.
d. Cliquez sur Sortie principale de LogWriterService (Active), puis sur OK. Notez que Sortie principale apparaît sous Installer, Valider, Restaurer et Désinstaller.
4.Les projets de configuration ne sont pas inclus dans la configuration de génération par défaut. Pour générer la solution, procédez comme suit :
a. Cliquez avec le bouton droit sur LogWriterService, puis cliquez sur Générer. Ensuite, cliquez avec le bouton droit sur ServiceSetup, puis cliquez sur Générer.

-ou-

Dans le menu Génération, cliquez sur Gestionnaire de configuration pour générer la solution entière en une fois. Activez la case à cocherGénérer pour ServiceSetup.
b. Appuyez sur la combinaison de touches CTRL+MAJ+B pour générer la solution entière. Une fois la solution générée, vous disposez d'un package d'installation complet pour le service.
5.Pour installer le service nouvellement créé, cliquez avec le bouton droit sur ServiceSetup, puis cliquez sur Installer.
6.Dans la boîte de dialogue ServiceSetup, cliquez trois fois sur Suivant. Remarquez l'apparition d'une barre de progression pendant que le service s'installe.
7.Une fois le service installé, cliquez sur Fermer.

Contrôler le service à partir d'un programme externe

C'est le deuxième problème que j'ai rencontré, n'ayant rien trouvé là-dessus non plus, je souhaitais pouvoir démarrer et arrêter mon service à partir de mon application principale.

Il faut ouvrir la fenêtre "exploration de serveurs", puis en déployant notre pc, on peut avoir la liste des services, et en glissant le service dans la zone de "design" de notre application on option alors un "ServiceController", qui est extremement simple à utiliser : ServiceController1.Start()...

ajouter un serviceController

Voilà j'espère que ce tutoriel sera utile à de nombreuses personnes qui rencontreront le même problème que moi.

Bien intégrer une maquette en xHTML

Il y a des règles fondamentales pour bien intégrer une maquette graphique en xHTML, afin qu'il soit bien accessible à tous et aux moteurs de recherche notamment, mais aussi qu'il fonctionne sur la majorité des navigateurs.

Une première chose fondamentale concerne les liens en image, une image avec son texte intégré ne doit être créée que dans le cas ou l'on ne peut pas écrire avec la police utilisée en xHTML.

Un exemple avec un menu en image, 2 manières possible, mais une seule réellement intéressante :

  • La première méthode consiste à mettre les images dans le document xHTML et leur mettre l'attribut alt pour définir le contenu de l'image
    <a href="#" title="Mon menu 1">
       <img src="#" alt="Mon menu 1" />
    </a>
    Cette méthode est utilisable, si l'on désactive les feuilles de styles on aura toujours l'image, mais ce n'est pas la meilleure méthode sémantiquement parlant.
  • La meilleure méthode consiste à mettre un style sur le lien pour rendre le texte invisible, et appliquer l'image. Ainsi si la feuille de style est désactivée on se retrouvera bien avec un menu en texte avec lequel tout le monde peut naviguer facilement.

    Je vois 2 solutions pour cacher le texte (il en existe peut-être d'autres), la première consiste à bidouiller en mettant le texte en font-size:1px;
    <a href="#" title="Mon menu 1" class="menu1">Mon menu 1</a>
    Le css ressemblera à cela :
    .menu1 {
    background-image....
    font-size:1px;
    color...
    }
    Mais la meilleure solution consiste a ajouter un élément inline dans le lien pour le rendre invisible en CSS (si on définissait le display directement sur le lien on ne verrait pas l'image) :
    <a href="#" title="Mon menu 1" class="menu1"><span>Mon menu 1</span></a>
    Et le css :
    .menu1 {
    background-image....
    }
    .menu1 span {
    display:none;
    }

Maintenant une technique plus visuelle, avec la question des png transparent et ce fameux bug sous IE <= 6.0 qui ne les accepte pas, on pourra espérer que à la sortie de IE 7 tout le monde migrera vers la nouvelle version (ou encore mieux sous firefox) mais cela ne se fera pas en un jour...

Il y a un script javascript que tout le monde connait et qui permet d'appliquer un filtre sur les images png pour les rendre transparentes (qu'elles en aient besoin ou pas) mais l'on peut rencontrer des problèmes et notamment :

  1. Des liens qui ne fonctionnent plus si ils sont au dessus d'une image transparente, une solution possible est de mettre la position du lien en relatif.
  2. Des images non transparente qui sont déformées par le filtre.

Ce qu'il faut faire :

  • Si le site n'a pas besoin d'images transparentes, vous pouvez tout mettre en png, c'est le meilleur format pour le web (il serait toujours utilisé sans ce problème de transparence).
  • Vous avez besoin d'images transparentes, mettez tout votre sites en jpg ou en gif et ne mettez que les images qui en ont besoin en transparence, vous éviterez ainsi de nombreux bugs.

Pour finir je vous met un lien vers la source du script javascript de correction qui ne s'activera que sous IE

Activation du flash sous Internet Explorer

Il y a peu, Microsoft à publié un patch correctif qui a ajouté un nouveau problème pour les développeur vis à vis de Internet Explorer.

En effet, lors de la visualisation de flash, on nous oblige maintenant à cliquer une première fois sur l'animation pour l'activer. Cela a été mis en place pour éviter l'utilisation d'un swf sur un autre domaine que celui d'origine mais cette modification a surtout posé des problèmes à tout le monde...

Voici donc 2 méthodes au choix qui permettent de régler ce problème grâce au javascript, vous pouvez suivre cela dans le labo et bien évidemment sous Internet Explorer 6 avec le patch.

  1. La première méthode est artisanale, je l'ai découverte dans cet article mais je l'ai optimisée car celle-ci ne respectait pas les standards, afin d'utiliser la méthode flash satay que vous pouvez voir dans cet article-ci..
    Elle consiste à appeler une fonction javascript en html pour afficher le flash :
    <script type="text/javascript">
    displayFlash("bouton.swf", 200, 50, "Contenu alternatif");
    </script>
    Et en javascript, à ajouter un paramètre et a simplement afficher le flash :
    function displayFlash(swf, hauteur, largeur, alternatif)
    {
    	document.write('<object type="application/x-shockwave-flash" data="'+swf+'" width="'+hauteur+'" height="'+largeur+'">');
    	document.write('<param name="allowScriptAccess" value="sameDomain" />');
    	document.write('<param name="movie" value="'+swf+'" />');
    	document.write(alternatif);
    	document.write('</object>');
    }
  2. La deuxième méthode consiste à utiliser un objet qui est fourni par adobe et que vous pouvez trouver sur cette page Cette méthode est plus complète, permet d'ajouter des paramètres, etc... mais on remarquera notamment un retard lors de l'affichage.
  3. EDIT : Une troisième méthode que j'ai trouvé sur le site de mon ami Nosegrind, assez simple, toujours en javascript, mais qui fera quand même fonctionner le flash si le javascript est désactivé, donc a priori une bonne méthode. Elle est a activer a la fin du chargement de tous les flash de la page :
    theObjects = document.getElementsByTagName("object");
    for (var i = 0; i < theObjects.length; i++)
    {
    	theObjects[i].outerHTML = theObjects[i].outerHTML;
    }

Au final, ces deux méthodes fonctionnent parfaitement, c'est à vous de choisir, personnellement, j'opterais pour la méthode artisanale (comme toujours ^^).

Script linux et Solarweb Hébergement

Hier je me suis amusé un peu à scripter en bash et en perl pour améliorer certaines petites choses pour l'hébergement. C'est pour moi la plus grande force des systèmes unix, on peut faire tellement de choses avec.

J'ai commencé par améliorer mon script de backup mysql, qui se contentait de faire une copie sur le disque local, donc si le disque crashait et bien ça ne servait pas à grand chose. Avec OVH j'ai un FTP de backup de 40Go et je comptais bien l'utiliser.

J'ai donc modifié mon script bash afin de créer un fichier tar à partir des bases de données et de l'uploader sur le serveur FTP ensuite. Voici le script en question commenté pour ceux que ça intéresserait :

#!/bin/bash
# On rentre dans le répertoire qui contient les bdd
cd /home/backup/mysql
 
# Compression en tar avec un nom en Ymd
tar -cf `date +%Y%m%d`.tar /home/mysql
 
# On déplace sur le ftp
ftp -n X.X.X.X <<EOF
user login pass
cd mysql
put `date +%Y%m%d`.tar
bye
EOF
 
# On supprime les fichier
rm -r `date +%Y%m%d`.tar

C'est assez simple finallement :) Bien sur une tâche cron permet de l'exécuter à intervales réguliers.

Ma deuxième bidouille à concerné le fameux OVHm, module pour webmin développé par OVH pour automatiser la création des domaines, sous domaines, etc...

Ce qui me dérangeait était principalement la création d'un répertoire www pour mettre le répertoire stats complètement inutile, je ne comprend pas pourquoi il font cela... J'en ai profité pour ajouter automatiquement, lors de la création d'un domaine ou d'un sous-domaine, les statistiques awstats dans un repertoire /awstats.

Vous pourrez trouver prochainement les sources des fichiers modifiés dans OVHm 0.4.4k dans mon labo qui sera bientôt skinné (et développé), et bien sur si vous voulez profiter de tout cela il y a Sol@rweb Hébergement, l'offre de l'association Just Plug & Play.

Externalisation totale du javascript

Une petite astuce que j'ai découverte récemment et testée pour trouver la meilleure utilisation. Le but est donc de ne plus avoir de gestion d'événements (onload, onlick...) dans le code xHTML mais que tout soit géré dans le javascript.

On va d'abord définir une fonction quelconque en javascript que l'on va essayer d'appeler avec l'événement interne, puis en externe :

function tell(personne, objet_creux_feminin_singulier)
{
	alert(personne+" rentre dans sa "+objet_creux_feminin_singulier);	
}

Voici la manière classique d'appeler cette fonction avec l'événement onclick dans un document xHTML :

<a href="#" onclick="tell('toto', 'maison')">Interne</a>

Maintenant le but est d'appeler cette fonction sans l'événement, on va donc ajouter un id à l'élément "a" mais on aurait pu essayer de le retrouver avec getElementsByTagName() (ce qui serait plus difficile dans une page avec x liens).

<a href="#" id="toto_maison">Externe</a>

La méthode pour lier un événement est tout simplement "element.evenement" lorsque il n'y a pas de paramètres et "element.evenement = function() {}" lorsqu'il y a un ou plusieurs paramètres.

Ce qui donne dans notre cas :

document.getElementById('toto_maison').onclick = function()
{
	tell('toto', 'maison');	
}

Seulement si vous insérez directement ce code dans votre fichier javascript, il ne va pas fonctionner car il va vouloir lier l'événement alors que la page n'est pas terminée de charger et que cet élément n'existe pas encore !

La solution est alors de faire une fonction pour englober les liaisons :

function loadEvents()
{
	// Evenement pour le lien toto
	document.getElementById('toto').onclick = function()
	{
		tell('toto', 'maison');	
	}
}

Une fois cette fonction créée il faut encore la charger elle aussi, on pourrait le faire avec un onload() sur le body mais on a décidé de tout externaliser.

La solution consiste alors à définir l'exécution de cette fonction une fois que la fenetre est chargée :

window.onload = loadEvents;

Et voila, nous avons notre code final qui externalise totalement le javascript. Exemple complet ci-dessous :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Externalisation</title>
<script type="text/javascript" src="externalisation.js"></script>
</head>
<body>
	<a href="#" onclick="tell('toto', 'maison')">Interne</a>
	<br/>
	<a href="#" id="toto_maison">Externe</a>
</body>
</html>
// JavaScript Document
window.onload = loadEvents;
 
function loadEvents()
{
	// Evenement pour le lien toto
	document.getElementById('toto_maison').onclick = function()
	{
		tell('toto', 'maison');	
	}
}
 
function tell(personne, objet_creux_feminin_singulier)
{
	alert(personne+" rentre dans sa "+objet_creux_feminin_singulier);	
}

EDIT : Ce script est maintenant disponible dans mon labo

Blog media-box

Voici venue l'inauguration d'une partie de mon blog sur la communauté media-box, à savoir tout ce qui concerne le développement dans beaucoup de langage Internet & Multimédia.

La prédominance sera plutôt développement PHP, Javascript et XHTML/CSS donc lié au côté dreamweaver.

Mais je n'exclue pas la possibilité d'avoir des articles sur flash et flex qui sont aussi des technologies très intéressantes.

En espérant que les articles vous plairont.