Issue dune formation informatique spécialisée WEB, vous justifiez dau moins 2 ans dexpériences en entreprise à un poste similaire.Passionné par votre métier, vous vous définissez comme quelquun de motivé et rigoureux , avez la culture Open Source et vous maîtrisez la programmation orientée objet. Compétences Requises:Langages : . PHP, XHTML, CSS, JavascriptBases de données : MySQLOpen Source : CMS eZ Publish, JoomlaCompétences complémentaires:Langages: AS3Framework : JelixOpen Source : Zimbra, OpenERP, DrupalDes connaissances d'administration de serveurs Linux est un plus.Mission :Sous la responsabilité du directeur de production, vous intégrez léquipe de production pour participer activement à la conception et à la réalisation de nos projets.
Poste basé à Marseille.
Envoi de votre CV :
Et loin de là même ... A l'heure où Adobe Air se traine encore en version beta 3 sur le site Labs de l'éditeur, Multidmedia sort sa nouvelle version majeure 3 du compilateur multi-plates-formes ZINC, avec une exclusivité :
C'est à ce jour le seul logiciel disponible à la fois sur Mac et PC, et capable de compiler des applications riches à base de Flash CS3 et Flex 3 pour Windows, Mac OS X ... et Linux !
=> A évaluer d'urgence donc, car si les supports optiques sont morts, le développement logiciel "cross-systems" a de beaux jours devant lui.
A l'heure où vous mettez peut-être en oeuvre des applications Flash/Flex connectées à des bases de données en ligne, la sécurisation des flux de données est cruciale !
Le recours aux échanges binaires en AMF, via des services RPC tels que AMFPHP, est certes intéressant mais bien loin d'être satisfaisant : N'importe quel proxy moderne sera en mesure d'examiner dans le détail les paquets de données qui transitent entre l'interface utilisateur et le service web.
Naturellement, vous franchirez un cap significatif en utilisant le protocole HTTPS, sécurisé avec un certificat SSL adéquat. Mais pour les plus paranos ou les moins fortunés, le recours ultime est de procéder vous-même à l'encodage et au décodage de vos données, à chaque bout de la chaîne.
Côté serveur pas de soucis, vous devriez disposer des librairies adéquates dans votre langage de scripting favori. En PHP, on utilise l'excellent librairie de chiffrement mcrypt.
Mais côté actionscript, il n'existe aucune classe ou fonction native dans Flash ou Flex à l'heure actuelle. Que faire ? Je m'étais déjà posé le problème en 2004, alors que je développais un jeu Flash primé pour le compte d'adidas. J'avais alors identifié une librairie publiée par un certain MEYCHI. La librairie s'appelle AScrypt, et j'ai constaté avec plaisir qu'elle est toujours maintenue par ce contributeur finlandais.
=> A découvrir ici, sur le blog de MEYCHI : http://www.meychi.com/archive/000031.phpAu programme, les algorithmes suivants : MD5, SHA-1, Base8, Base64, TEA, AES, RSA, ROT13, RC4 + la compression LZW.=> Pour compléter votre collection avec un bon vieux Blowfish, qui est toujours dissuasif : Actioncrypt ( http://sourceforge.net/projects/actioncrypt/ )
Rappelons les algorithmes les plus performants et donc recommandés : SHA-1 et AES
Une petite perle bien aboutie bien qu'encore en version béta: picnik. Cette application Flex va vous permettre d'éditer vos photos en ligne et n'a rien à envier à nos logiciels de traitement d'images spécialisés !!(pour ce qui est de la retouche de photos perso)
A Infostrates, nous avons adopté SWFObject pour traiter nos inclusions Flash.
Mais il existe une alternative sérieuse, qui a déjà fait ses preuves et a ses amateurs : Unobstrusive Flash Object, ou UFO pour les intimes.
Loin d'être des concurrents, les deux projets sont en passe de fusionner, à l'initiative de leurs auteurs respectifs.
Ce sera à suivre sous le label "SWFFix" : http://www.swffix.org/devblog/
Pour l'avènement de l'intégrateur SWF ultime ?
A l'heure des applications riches (RIA) et de la publication de Actionscript 3 (Flex 2, Flash 9), il devient urgent de bien s'armer, pour alimenter la productivité d'un petit studio de développement multimédia tel qu'Infostrates.
Une des clés de la réussite sera sans doute la mobilisation de frameworks (librairies) actionscript les mieux adaptés aux projets.
A ce titre, je fais mention ici de 2 candidats sérieux, qui ont déjà été mis en oeuvre avec succès dans le domaine commercial :=> ARP v2 : Conçu et promu par Aral Balkan, un des "FlashGuru" les plus connus sur la place de Londres. Une v3 est en route.- Site Officiel- Documentation=> PixLib rev43 : Concu et promu par le français Francis Bourre- Site Officiel- Téléchargement- Documentation- Les slides PPS de la session FOTB (Flash On The Beach)
2 projets à suivre de très près !
Une vue globale des fondamentaux de ARP2 (cliquez sur l'image) :
D'autres frameworks ICI.
J'administre un portail qui date de 2002, et qui avait ete developpe exclusivement en scripting PHP pur, en dehors de tout CMS pre-existant.
Il se connecte a des sources de donnees MySQL a travers une simpe classe AdoDB, legerement remaniee, que j'avais a l'epoque piochee dans le package PHPLib 7. Au passage, je constate avec plaisir que cette superbe librairie est toujours referencee sur Sourceforge, et a meme fait l'objet d'une releae 7.4a en fevrier 2006.
Mon portail comporte sa propre gestion de droits, relativement rudimentaire, basee sur une matrice croisant des groupes (ou roles) avec des droits fonctionnels elementaires, une simple fonction du tive "verifieDroit($groupe,$droit)" assure les controles logiques.
La pluparts de mes fonctionnalites sont codees a travers une page dediee, du type adm_func.php ou usr_func.php, suivant que je traite du backoffice ou du frontoffice du portail. Naturellement, chaque fonctinnalite fait appel a un certain nombre d'inclusions locales, ou de fonctions globales.
Voici les problemes que je rencontre :=> Mes utilisateurs souhaitent des interfaces plus ergnomiques,=> Avec le temps, mon code est devenu plethorique, confus, et intrique,=> La fiabilisation des processus et de l'integrite des donnees devient un vrai casse-tete
Fort de ces constats, mon but est de moderniser les fontionnalites offertes a mes utilisateurs, en mettant en oeuvre des interfaces enrichies avec Flash ou Flex. Toutefsoi, j'ai de nouveaux enjeux a prendre en compte :=> Je ne veux pas refondre tout mon portail d'un seul coup : Il y a trop de dependances liees, et ce serait un travail de romain. J'ai besoin d'une methodologie qui me permette de mettre a niveau mes fonctionnalites progressivement.=> Nous sommes plusieurs developpeurs a intervenir sur le site, et j'ai donc besoin d'une organisation collaborative.=> Les mises a niveau doivent etre validees par mon client sans perturber le site en exploitation : J'ai donc besoin d'une gestion des versions.
Le challenge est piquant, n'est-ce pas ?
Je vous livre ici la demarche que j'ai adoptee, en 4 actes, et en demontre les benefices : Avis bienvenus !
=> ACTE 1 : Mise en place d'un processeur PHP global. Cette simple mesure permet de faire d'une pierre 3 coups :- Je peux mettre en oeuvre un environnement multi-developpeurs- Je peux mettre en oeuvre un versionning de fichiers- Je peux mettre a la disposition de mon client des versions beta de fonctionnalites, sans perturber l'environnement de production.Pas mal non ? La technique est d'une simplicite deconcertante. En outre, elle me permet d'economiser un rigoureux et fastidieux service CVS ou SVN.AVANT : J'invoquais ma fonctionnalite directement par "adm_func.php"APRES : J'ai mis en place un processeur PHP global qui suit la syntaxe suivante :processeur.php?f=adm_func[&d=xxx&v=nnn]ou "f" est le nom de mon fichier "d" est le nom du developpeur (optionnel) "v" est la version (optionnel)Le contenu de mon fichier processeur est le suivant :switch ($d) {case "quad": switch ($f) { case "adm_func": // mes regles de redirection ici, en fonction des numeros de version break; default: if ($v) { $le_fichier=$f."_v".$v.".php"; } else { $le_fichier=$f.".php"; } break; default: if ($v) { $le_fichier=$f."_v".$v.".php"; } else { $le_fichier=$f.".php"; } break;}// In fine, je charge le bon fichier s'il existeif file_exists($le_fichier) { require($le_fichier);} else { echo "Ce fichier n'existe pas."}
En production mon URL est "processeur.php?f=adm_func"En test et beta, mon URL :"processeur.php?f=adm_func&d=quad&v=2"renverra naturellement la nouvelle version de la fonctionnalite, telle qu'elle est developpee par le programmeur "quad", ou dans l'environnement de developpement "quad". Pour les plus malins d'entre vous, vous aurez compris qu'on gagnera du temps et du confort d'utilisation en fixant les variables $d et $v en session cote serveur !
=> ACTE 2 : Mise en place d'une nouvelle interface Flash/FlexJe met au feu mes vieilles pages HTML, et je met en oeuvre une nouvelle interface moderne et attractive avec Flash ou Flex. Avec l'un ou l'autre de ces outils, il en resulte un fichier SWF que j'encapsule proprement dans une nouvelle page fonctionnelle a l'aide du cultissime " swfObject". Le contenu type de ma page adm_func_v2.php sera reduit a cela :<code><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><title>Mon BO PORTAIL - Ma fonctionnalite v2</title></head><body><script type="text/javascript" src="js/swfobject.js"></script> <div id="flashcontent"> Mon portail - Pour visualiser ce contenu, vous devez activer Javascript, et disposer du lecteur Flash version 7 ou plus.</div><script type="text/javascript"> var so = new SWFObject("swf/adm_func.swf", "mon_swf", "800", "600", "7", "#FFFFFF"); so.write("flashcontent");</script></body></html></code>
=> ACTE 3 : Securisation des sessionsNous sommes dans une page qui est securisee, avec 2 niveaux d'accreditation :- Un login utilisateur global- Une verification des droits de cet utilisateurCes informations peuvent tres facilement etre stockees en variable de session tres en amont, et il suffit donc de retransmettre au composant SWF ces donnes de session, stockees dans le tableau unique PHP $_SESSION.-Cote client, on amenage notre fichier HTML comme suit :<?// Je recupere mes en tetes PHP indispensables au seul fonctionnement de mon template HTML $SID=session_id(); // Je recupere l'id de session?><!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>Mon BO PORTAIL - Ma fonctionnalite v2</title></head><body><script type="text/javascript" src="js/swfobject.js"></script> <div id="flashcontent"> Mon portail - Pour visualiser ce contenu, vous devez activer Javascript, et disposer du lecteur Flash version 7 ou plus.</div><script type="text/javascript"> var so = new SWFObject("swf/adm_func.swf", "mon_swf", "800", "600", "7", "#FFFFFF"); so.addVariable("SID", "<? echo $SID; // Et je la transmet a Flash ?>"); so.write("flashcontent");</script></body></html>
=> ACTE 4 : Extraction de la couche "business" avec AMFPHPCote serveur, on prepare tout d'abord un service AMFPHP (type svc_verifieSession.php) pour verifier la session : Si le SID renvoye par Flash correspond au session_id courant on renvoie a Flash tout ou partie du tableau $_SESSION. Je suggere pour ma part de renvoyer 2 tableaux filtres, l'un du type userData pour collecter les donnees utiles sur l'utilisateur courant, et un autre du type userDroits pour collecter la matrice de droits. Mais a chacun sa sauce, et tout depend de votre architecture !
Une fois ce cap passe, les grands espaces couverts d'herbe verte et jonches de petales de roses s'ouvrent devant vous : - Preparez un service AMFPHP global intitule svc_adm_func.php,- Remobilisez a ce niveau votre connecteur SQL (dans mon cas, ma connexion MySQL via adoDB ),- Declarez toutes les methodes dont vous aurez besoin pour gerer les transactions entre l'interface utilisateur et la base de donnes.- Codez vos requetes SQL, et verifiez vos echanges de donnees in/out avec votre fidele Charles.
=> CONCLUSION : Les benefices degages- Je n'ai pas perturbe mon environnement existant, et mes nouveaux developpements s'integrent naturellement au fil des jours,- J'ai desormais une architecture multi-utilisateurs avec une gestion de versions de fichiers, certes sommaire mais efficace,- Je mets en oeuvre des interfaces plus riches et conviviales avec Flex et Flash, pour le plus grand bonheur des utilisateurs finaux,- j'ai tres explicitement dissocie ma couche applicative et ma couche data, grace aux services AMFPHP,- J'ai clarifie mon architecture de fichiers et de dependances : Pour une fonctionnalite donnee, j'ai un conteneur HTML ultra leger (adm_func_v2.php), un element SWF qui contient tous les elements d'interface graphique (swf/adm_func.swf), et un service AMFPHP (svc_adm_func.php) qui fournit toutes les methodes necessaires aux transactions de donnees.
Le bonheur c'est simple, non ? Bon courage a tous !
Le composant datagrid fait encore parler de lui. Bien pratique pour monter des interfaces d'administration et de data mining, il pose néanmoins pas mal de problèmes de formatage aux utilisateurs occasionnels.
=> Le grand classique des problèmes évoqués est de pouvoir afficher des conten us multi-lignes dans les cellules. Heureusement, vous avez déjà du localier la note technique qui y répond chez Adobe : http://www.adobe.com/support/documentation/en/flash/fl8/samples.html . le principe est d'utiliser l'API "CellRenderer", et cela fonctionne plutôt pas mal.
=> Mais la deuxième question corollaire est un peu plus ardue : Comment mettre en oeuvre des têtes de colonnes multi-lignes cette fois-ci ? Pas pareil ...
Nous avons été amenés, Lily et moi, à chercher une solution à l'occasion d'un projet de catalogue produits compilé sous Zinc. Cette solution, la voici :=> On verrouille le redimensionnement des colonnes du datagrid,=> Sur un calque situé au-dessus du datagrid, on dessine des têtes de colonnes sur mesure, avec aucune difficulté pour placer les titres sur plusieurs lignes.=> Dans ce clip, et sur chaque cellule de tête de colonne, on place un bouton transparent : Ils vont permettre de récupérer l'affichage du curseur doigt au survol, et de reprogrammer les comportements de tri de colonne.=> Pour trier les colonnes dynamiquement, il suffit d'agir sur le tableau qui sert de dataProvider au datagrid : Flash propose une méthode rès pratique, "Array.sortOn()". Imaginons ainsi que mon dataset comporte 3 champs comme suit :
ma_liste = [{nom:"quad", prenom:"damage", ville:"marseille"}, {nom:"lily", prenom:"virus", ville:"lyon"} ];
Si l'on souhaite trier suivant le nom, il suffit d'exécuter la commande
ma_liste.sortOn("nom");
Par défaut le tri est ascendant, et pour préciser l'ordre inverse, il suffit d'indiquer
ma_liste.sortOn("nom", Array.DESCENDING);
Simple, non ?
La dernière étape consiste alors à raffraichir explicitement l'affichage du datagrid en indiquant :
mon_datagrid.dataProvider=ma_liste;
La cerise sur le gâteau est ensuite d'ajouter les petites flèches visuelles indiquant le sens de tri, mais çà, vous savez faire ...
[swf src=http://web.infostrates.fr/infolabs/media/blogs/quad/datagrid_multiline_header.swf width=300 height=300 id=test version=7]
Les sources de l'exemple sont ici : datagrid_multiline_header.zip
J'explique le problème, nous sommes dans ce cas de figure :
=> Vous développez une application avec Flash ou Flex, que vous allez compiler avec Director ou Zinc.=> Votre logiciel comporte des fonctionnalités pour lesquelles vous utilisez le composant datagrid de Flash.=>Vous utilisez un EXE principal, a partir duquel vouc chargez dynamiquement en "loadMovie" des contenus SWF.
Alors vous allez inmanquablement rencontrer sous Windows des artefacts visuels lorsque vous allez successivement afficher et faire disparaitre des composants datagrid de la scene, apres avoir interagi avec lui : Un leger contour bleu rectangulaire se materialise alors, et ne partira plus de l'ecran, malgre tous vos efforts sur la feuille de style. Il s'agit d'un bug du flah player de Windows, qui est extremement genant.
Une parade radicale consiste a systematiquement decharger ("unloadMovie") le clip complet de la scene, mais ce n'est franchement pas tres pratique de fonctionner comme cela.
Alors, je vous livre la feinte qui resoud le probleme : Ne placez plus les composants datagrid directement sur la scene de vos clips, mais encapsulez-les toujours dans un clip hote, c'est tout et ca fonctionne !
A noter que cette petite plaisanterie de feu Macromedia s'observe egalement dans la categorie UI, comme l'accordeon, la checkbox, etc ...
Post scriptum : Concernant l'utilisation des composants datagrid, je vous conseille un excellent site francophone : http://philflash.inway.fr=> A stocker d'urgence dans vos signets developpeurs.
Si comme nous ce sujet vous interesse, voici un site a mettre sur ecoute ...
http://www.brightworks.com/technology/adobe_flex/with_php.html
3D AJAX Apple - Mac OS X Benchmark Sites Web Bureautique CD-DVD CMS Cryptographie Développement Divers Flash Flex Flex - RIA FLV et streaming Groupware Internet Javascript Joomla Lectures Logiciel Materiel News Perso PHP Ressources Sécurité Systèmes et matériels Utilitaires Veille & Intelligence Vidéo
Derniers articles
- 7 NOUVELLES FONCTIONNALITÉS POUR VOTRE COMPTE GOOGLE ANALYTICS
- HOW TO SEND HTML EMAIL USING OUTLOOK
- UN EDITEUR MYSQL ULTRA LITE
- CHANGER LA LANGUE EN COURS DE SCRIPT EZ PUBLISH
- GESTION DE LA PAGE PRÉCÉDENTE DANS EZ PUBLISH
- GOOGLE WAVE
- MANIPULER LES FLV SOUS MAC
- PROBLÈME DE COMPATIBILITÉ ENTRE SUITCASE FUSION ET 10.5.6
- UN OURS BLANC A BLOQUÉ LE VIEUX PORT ...
- INSTALLATION EZPUBLISH 4.01
- REJOIGNEZ-NOUS : DÉVELOPPEUR WEB CONFIRMÉ
- PASSER D'UNE FENÊTRE À L 'AUTRE SOUS MAC OS X

Ajouter des commentaires