Flex Apache la renaissance !

flex_apache_logo_blancAdobe cède Flex SDK à la fondation Apache

Voila déjà un an qu’ Adobe à cédé le Flex SDK à apache. Durant une année j’ai calmé les développements Flex ( en maintenant seulement quelques projets pour des clients ) et complètement abandonné la R & D sur cette technologie, suite aux annonces massacrantes d’Adobe pour le player Flash et l’avenir si incertain de Flex. J’ai donc suivi le troupeau vers la technologie HTML5 / Javascript !
Vous n’imaginez même pas à quel point j’étais rempli de bonheur ( ironie ), de délaisser des années de savoir pour tout recommencer vers des technologies qui ne me semblaient pas vraiment à la hauteur, ce qui fut très rapidement confirmé.
Je n’ai plus aucun doute sur ce qui est faisable ou non en HTML5 et je vous assure que sur cette techno on est à des années lumière de ce que l’on faisait à l’époque avec Flex :).

Qu’est devenu Flex SDK ?

Aujourd’hui j’ai décidé de retourner voir ce qu’est devenu ce bijou de technologie, comment a t’il évolué ? est-ce que le SDK a changé de version ? La dernière fois ou j’ai jeté un oeil sur le projet de reprise, la fondation Apache était en train de définir le futur nouveau logo Flex, on était encore loin de connaître les futures évolutions du Framework Flex.
Qu’elle bonne surprise lorsque je découvris ce nouveau site dédié au Flex SDK, d’autant plus que la fondation Apache n’a apparemment pas chômé sur le projet, à l’ époque j’avais fait ma pause en recherche et développement sur la version 4.6 du SDK, aujourd’hui je suis comme un enfant devant ses cadeaux de noël avec cette nouvelle version Flex SDK 4.9 .

Une nouvelle jeunesse pour Flex SDK ?

Désormais je n’ai plus aucun doute quant aux besoins des entreprises pour les développements d’applications riches, actuellement aucune technologie ne peut rivaliser avec Flex, HTML5 et javascript ne sont pas l’avenir mais seulement des embryons d’une future technologie beaucoup plus avancée pour le web ( HTML6 ou HTML 7 ) mais tout ceci est un avenir très très lointain ! et d’ici là, Flex n’aura aucun mal à s’adapter aux nouvelles demandes du marché car désormais il est entre de très bonnes mains (Fondation Apache) .

Reprise des projets et de la partie recherche et développement en Flex Apache !

desktop-sm mobile-sm

Je ne doute plus de l’importance pour ma société et moi même à continuer mes recherches et me spécialiser dans la technologie Flex / Flash, pour plusieurs bonnes raisons, déja plus ou moins abordées précédemment mais également parce que je pense qu’un développeur Flex/AS aura plus de facilité à apprendre les futures nouvelles techno web (qui seront sûrement compilées ) qu’un développeur JS ou HTML5. L’autre raison c’est que je n’ai jamais aimé suivre les masses et que je pense qu’il y a plus d’avenir dans une technologie importante mais maîtrisée par peu de personne, plutôt qu’une techno qui fait le buzz et ou tout et n’importe quel développeur va s’engouffrer !

Coté HTML5 / javascript je pense avoir fait le tour en un an, car au final il n’y a pas grand chose de novateur dans ces technos. je continuerai les dev. HTML5 / javascript dans certain cas.
Je pense me pencher de nouveau sur les développements et la recherche en Flex, je vais ouvrir une section tutoriaux sur l’utilisation de ce superbe langage de programmation. Mes deux prochains projets seront la refonte de l’application en AIR qui permet de gagner des Like Facebook et plus sérieusement la partie administrateur de la gestion d’apparence graphique ainsi que de l’interface statistiques du module e-commerce WordPress récemment développé.

Voici un très bon article qui est le résumé d’un échange entre deux personnes sur les avantages et problématiques du framework Flex. : http://flexblog.faratasystems.com/2013/01/22/html5-or-flex-framework

Comment trouver les identifiants et signature API Paypal pour son e-commerce ?

Voici une vidéo qui vous expliquera en détail chaque étape, pour activer l’api et générer les identifiants et signature pour l’API Paypal.

Vidéo pour générer les identifiants et signature Paypal API

Voici les étapes sur le site Paypal pour récupérer la signature et les identifiants API :

  1. Connectez vous au site www.paypal.fr, renseignez vos identifiants de compte paypal et cliquez sur connexion.
  2. Cliquez sur « préférences  » dans le menu principal, puis sur le sous menu « Plus d’options ».
  3. Cliquez dans la partie gauche sur « Mes ventes ».
  4. Cliquez sur le lien « Mettre à jour » de la ligne « Accès à l’API ».
  5. Choisissez « Option 2″ et cliquez sur  » demandez des informations d’authentification API ».
  6. Sélectionnez : « Demandez une signature API » puis cliquez sur le bouton orange « Valider et envoyer ».
  7. Il ne vous reste plus qu’à copier / coller les identifiants et signature qui ont été générés dans votre e-commerce.

Installer un e-commerce sous WordPress

Voici deux vidéos qui détaillent les étapes pour installer une boutique en ligne sous WordPress

1. Le téléchargement de l’ e-commerce WordPress

Dans cette première vidéo vous allez découvrir comment télécharger notre plugin e-commerce ( ecomIdeva ).

2. Installation de votre e-commerce WordPress

Voici la seconde vidéo dans laquelle vous apprendrez à installer notre boutique en ligne WordPress.

Dans cette dernière partie il est expliqué comment activer son module e-commerce avec la clé reçu par mail lors de l’achat.

Plugin e-commerce pour WordPress

ico_ecomIdeva_512x512EcomIdeva est né ! Après quelques mois de développement acharné, notre plugin e-commerce est enfin prêt dans sa première version !
Nous l’utilisons tout d’abord sur notre propre site internet dans la partie « Nos prestations  » du menu supérieur.

Votre WordPress devient un e-commerce

Transformez votre simple site vitrine wordpress ou votre blog en un magnifique e-commerce. Ce plugin étend les fonctionnalités de votre site WordPress pour lui permettre de devenir une véritable plateforme de vente en ligne.
Ce plugin ajoutera toutes les fonctionnalités  que vous pouvez trouver sur des e-commerce tels que oscommerce, Magento ou encore Prestashop.

Parmi ses nombreux avantages

Simplifiez vous la vie ! vous n’aurez plus qu’une seule interface pour gérer à la fois votre e-commerce et votre site ou blog. Son interface d’administration est calquée sur celle de WordPress ce qui vous permet de vous familiariser très rapidement avec son utilisation.
Une installation simple et rapide. Installez votre e-commerce en quelques clics seulement.
Un accompagnement sur mesure mais également des vidéos d’explications sont mises à votre disposition.
Une aide à la vente avec différents outils tels que des composants pour vos ventes flash, la vente de produit en téléchargement.
Des évolutions permanentes, chaque jour nous ajoutons de nouvelles fonctionnalités pour vous faciliter l’administration mais également pour accompagner vos clients dans leurs achats, toutes les fonctionnalités sont ajoutées sans aucun surcoût sur le prix du module.
Un grand nombre de fonctions déja présentes dans la version 1.0 avec par exemple vos statistiques analytics dans un tableau de bord qui vous résumera les KPIs ( indicateurs clés ) importants de votre e-commerce.
Ne perdez plus vos clients entre vos articles de blog et votre e-commerce de produit ! Grace à ce plugin e-commerce, vous n’aurez plus qu’un seul site donc vous bénéficierez du trafic de votre blog, directement dans votre e-commerce, le résultat sera des plus spectaculaire avec un taux de transformation à toute épreuve ! le visiteur qui lit votre blog pourra alors directement passer commande et tout ceci avec le même compte utilisateur, vos clients ne sont plus obligés de se réinscrire sur chaque site  ( (e- commerce et site ).

Un référencement de qualité pour son e-commerce

L’un des autres avantages est qu’il bénéficie de toutes les fonctionnalités de WordPress à commencer par un très bon référencement de base. Vous pourrez également le coupler avec des milliers d’autres plugins disponibles sur la plateforme WordPress.

Retrouvez notre plugin e-commerce wordpress en vente directement sur notre site : http://ideva.fr/product/mod-e-commerce-wordpress/

Vous trouverez des vidéos d’aide à son utilisation également ici : Vidéo de formation pour l’utilisation du plugin e-commerce WordPress ecomIdeva

Exemple d’affichage des catégories produits : http://ideva.fr/cat/creation-e-commerce/

Les textures dans Alternativa3D 8

alternativa3d-logoAujourd’hui nous allons voir comment ajouter des textures à notre modèle de boîte primitive. Pour les bases concernant l’utilisation du moteur Alternativa3D vous pouvez vous référer au premier tutorial Alternativa3D premier pas …

Pour commencer nous allons créer un dossier « assets » dans notre projet, dans lequel nous allons placer une image qui nous servira de texture.Il est indispensable que la hauteur et la largeur de l’image soit une puissance de deux. Sinon vous aurez une erreur à l’exécution :

Argument Error: Error #3682: La taille de la texture n’est pas une puissance de deux.

Si vous le souhaitez, vous pouvez utiliser une texture telle que celle-ci :

box01

Nous chargeons notre texture :

[Embed(source="assets/alternativa3d-logo.png")] static private const BoxTexture:Class; 

Nous créons un objet pour que le bitmap soit chargé dans les ressources, puis nous l’appliquons sur toutes les faces de notre box avec un objet TextureMaterial :

var bmd_res:BitmapTextureResource = new BitmapTextureResource(new BoxTexture().bitmapData);
box.setMaterialToAllSurfaces( new TextureMaterial( bmd_res ) ); 

voici le code complet de l’exemple :

package
{
import alternativa.engine3d.controllers.SimpleObjectController;
import alternativa.engine3d.core.Camera3D;
import alternativa.engine3d.core.Object3D;
import alternativa.engine3d.core.Resource;
import alternativa.engine3d.core.View;
import alternativa.engine3d.materials.TextureMaterial;
import alternativa.engine3d.primitives.Box;
import alternativa.engine3d.resources.BitmapTextureResource;

import flash.display.Sprite;
import flash.display.Stage3D;
import flash.events.Event;

public class Alternativa3DBase02 extends Sprite
{
private var rootContainer:Object3D = new Object3D();
private var camera:Camera3D;
private var controller:SimpleObjectController;
private var stage3D:Stage3D;
private var box:Box;

[Embed(source="assets/box01.png")] static private const BoxTexture:Class;

public function Alternativa3DBase02()
{
super();
addEventListener(Event.ADDED_TO_STAGE, init3D);
}

private function init3D(evt:Event):void
{
camera = new Camera3D(0.01, 10000000000);
camera.x = -50;
camera.y = -300;
camera.z = 100;
controller = new SimpleObjectController(stage, camera, 200);
controller.lookAtXYZ(0,0,0);
camera.view = new View(800, 600, false, 0xFFFFFF, 0, 4);
camera.view.hideLogo();
addChild(camera.view);
addChild(camera.diagram);

rootContainer = new Object3D();
rootContainer.addChild(camera);

//box
box = new Box();
var bmd_res:BitmapTextureResource = new BitmapTextureResource(new BoxTexture().bitmapData);
box.setMaterialToAllSurfaces( new TextureMaterial( bmd_res ) );
rootContainer.addChild(box);

stage3D = stage.stage3Ds[0];
stage3D.addEventListener(Event.CONTEXT3D_CREATE, init);
stage3D.requestContext3D();

}

private function init(event:Event):void
{
for each (var resource:Resource in rootContainer.getResources(true)) {
resource.upload(stage3D.context3D);
}
addEventListener(Event.ENTER_FRAME, enterFrameHandler)
}

private function enterFrameHandler(event:Event):void
{
box.rotationZ -= 0.01;
box.rotationY += 0.01;
controller.update();
camera.render(stage3D);
}
}
}

le rendu final :

final-300x246

Importation d’objets .A3D dans Alternativa3D

alternativa3d-logo Alternativa3D nous propose sur son site internet le téléchargement d’un plugin pour exporter ses scènes 3DSmax au format .A3D, nous allons voir comment intégrer ces objets 3D dans notre scène flash.

Pour commencer assurez-vous d’avoir téléchargé puis installé le plugin en question! Vous le trouverez en téléchargement gratuit à l’adresse suivante : Alternativa3D

Ouvrez 3ds max, puis créez votre objet 3d, pour l’exemple je vais utiliser l’emblématique « Tea Pot » de 3dsMax.
Appliquez lui une texture « standard » avec un Bitmap comme « Diffuse » :

3dsmax01_A3D-1024x613

Exportez le projet au format A3D :

3dsmax02_A3D-300x202

Passons maintenant au projet as3, créez votre projet comme expliqué dans les précédents tutoriels de la même catégorie.
Nous allons ajouter une fonction « initObject » dans laquelle nous allons charger notre objet .A3D que vous aurez bien sûr, déjà placé dans le dossier /assets/A3D/ de votre projet.
Et faites de même avec la texture que vous placez dans le dossier /assets/textures/ nomdevotretexture.jpg.
Nous utilisons un simple objet URLLoader pour charger notre modele .A3D
Le chargement effectué nous allons parser la scene 3D (ParserA3D), puis récupérer notre Teapot en passant par une boucle sur les objets de la scène.

// Model parsing
var parser:ParserA3D = new ParserA3D();
parser.parse((e.target as URLLoader).data);
var mesh:Mesh;
for each (var object:Object3D in parser.objects)
{
if (object.name == "Teapot01")
{
mesh = object as Mesh;
break;
}
}

rootContainer.addChild(mesh);        

Une fonction qui permet de charger les textures dans le context3D de la stage3D :

private function uploadResources(resources:Vector.):void
{
for each (var resource:Resource in resources)
{
resource.upload(stage3D.context3D);
}
}

Une boucle sur les matériaux de notre objet 3D, et un chargement de ces mêmes textures.

             var textures:Vector. = new Vector.();
for (var i:int = 0; i < mesh.numSurfaces; i++)
{
var surface:Surface = mesh.getSurface(i);
var material:ParserMaterial = surface.material as ParserMaterial;
if (material != null)
{
var diffuse:ExternalTextureResource = material.textures["diffuse"];
if (diffuse != null)
{
diffuse.url = "assets/textures/" + diffuse.url;
textures.push(diffuse);
surface.material = new TextureMaterial(diffuse);
}
}
}

// chargement des textures
var texturesLoader:TexturesLoader = new TexturesLoader(stage3D.context3D);
texturesLoader.loadResources(textures);

Il ne vous reste plus qu’à tester votre projet 🙂 !
voici le code complet du projet :

 package
{
import alternativa.engine3d.controllers.SimpleObjectController;
import alternativa.engine3d.core.Camera3D;
import alternativa.engine3d.core.Object3D;
import alternativa.engine3d.core.Resource;
import alternativa.engine3d.core.View;
import alternativa.engine3d.loaders.ParserA3D;
import alternativa.engine3d.loaders.ParserMaterial;
import alternativa.engine3d.loaders.TexturesLoader;
import alternativa.engine3d.materials.TextureMaterial;
import alternativa.engine3d.objects.Mesh;
import alternativa.engine3d.objects.Surface;
import alternativa.engine3d.primitives.Box;
import alternativa.engine3d.resources.BitmapTextureResource;
import alternativa.engine3d.resources.ExternalTextureResource;

import flash.display.Sprite;
import flash.display.Stage3D;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;

public class Alternativa3DBase03 extends Sprite
{
private var rootContainer:Object3D = new Object3D();
private var camera:Camera3D;
private var controller:SimpleObjectController;
private var stage3D:Stage3D;

public function Alternativa3DBase03()
{
super();
addEventListener(Event.ADDED_TO_STAGE, init3D);
}

private function init3D(evt:Event):void
{
camera = new Camera3D(0.01, 10000000000);
camera.x = -50;
camera.y = -100;
camera.z = 100;
controller = new SimpleObjectController(stage, camera, 200);
controller.lookAtXYZ(0,0,0);
camera.view = new View(800, 600, false, 0xFFFFFF, 0, 4);
camera.view.hideLogo();
addChild(camera.view);
addChild(camera.diagram);

rootContainer = new Object3D();
rootContainer.addChild(camera);

stage3D = stage.stage3Ds[0];
stage3D.addEventListener(Event.CONTEXT3D_CREATE, init);
stage3D.requestContext3D();

initObject();
}

private function init(event:Event):void
{
for each (var resource:Resource in rootContainer.getResources(true)) {
resource.upload(stage3D.context3D);
}
addEventListener(Event.ENTER_FRAME, enterFrameHandler)
}

private function initObject():void
{
var loaderA3D:URLLoader = new URLLoader();
loaderA3D.dataFormat = URLLoaderDataFormat.BINARY;
loaderA3D.load(new URLRequest("assets/A3D/TeaPot.A3D"));
loaderA3D.addEventListener(Event.COMPLETE, onA3DLoad);
}

private function onA3DLoad(e:Event):void
{

// on parse le modele
var parser:ParserA3D = new ParserA3D();
parser.parse((e.target as URLLoader).data);
var mesh:Mesh;
for each (var object:Object3D in parser.objects)
{
if (object.name == "Teapot01")
{
mesh = object as Mesh;
break;
}
}

rootContainer.addChild(mesh);
uploadResources(mesh.getResources());

var textures:Vector. = new Vector.();
for (var i:int = 0; i < mesh.numSurfaces; i++)
{
var surface:Surface = mesh.getSurface(i);
var material:ParserMaterial = surface.material as ParserMaterial;
if (material != null)
{
var diffuse:ExternalTextureResource = material.textures["diffuse"];
if (diffuse != null)
{
diffuse.url = "assets/textures/" + diffuse.url;
textures.push(diffuse);
surface.material = new TextureMaterial(diffuse);
}
}
}

// chargement des textures
var texturesLoader:TexturesLoader = new TexturesLoader(stage3D.context3D);
texturesLoader.loadResources(textures);
}

private function uploadResources(resources:Vector.):void
{
for each (var resource:Resource in resources)
{
resource.upload(stage3D.context3D);
}
}

private function enterFrameHandler(event:Event):void
{
controller.update();
camera.render(stage3D);
}
}
}

et le rendu qui paye pas de mine je vous l’accorde mais qui aujourd’hui vous permet de charger n’importe quel modèle 3D dans votre scène !

teaPot01

Dépôt de la marque IDEVA ©

Voilà, c’est chose faite nous sommes officiellement propriétaires de la marque IDEVA ©, et ce, pour 10 ans minimum. dans les différents secteurs d’activité suivants : Développement, Réseau, nouvelles technologies, photo et art graphique … voir la déclaration INPI ci-dessous :

Enregistrement INPI

Marque :  ideva

Classification de Nice :  38  ;  41  ;  42

Produits et services

  • 38  Télécommunications ; informations en matière de télécommunications ; communications par terminaux d’ordinateurs ou par réseau de fibres optiques ; communications radiophoniques ou téléphoniques ; services de radiotéléphonie mobile ; fourniture d’accès utilisateur à des réseaux informatiques mondiaux ; fourniture de forums de discussion sur l’Internet ; fourniture d’accès à des bases de données ; services d’affichage électronique (télécommunications) ; raccordement par télécommunications à un réseau informatique mondial ; agences de presse ou d’informations (nouvelles) ; location d’appareils de télécommunication ; émissions radiophoniques ou télévisées ; services de téléconférences ; services de messagerie électronique ; location de temps d’accès à des réseaux informatiques mondiaux ;
  • 41  Éducation ; formation ; divertissement ; activités sportives et culturelles ; informations en matière de divertissement ou d’éducation ; recyclage professionnel ; mise à disposition d’installations de loisirs ; publication de livres ; prêts de livres ; production de films sur bandes vidéo ; location de films cinématographiques ; location d’enregistrements sonores ; location de magnétoscopes ou de postes de radio et de télévision ; location de décors de spectacles ; montage de bandes vidéo ; services de photographie ; organisation de concours (éducation ou divertissement) ; organisation et conduite de colloques, conférences ou congrès ; organisation d’expositions à buts culturels ou éducatifs ; réservation de places de spectacles ; services de jeu proposés en ligne à partir d’un réseau informatique ; service de jeux d’argent ; publication électronique de livres et de périodiques en ligne ; micro-édition ;
  • 42  Evaluations, estimations et recherches dans les domaines scientifique et technologiques rendues par des ingénieurs ; conception et développement d’ordinateurs et de logiciels ; recherche et développement de nouveaux produits pour des tiers ; élaboration (conception), installation , maintenance, mise à jour ou location de logiciels ; programmation pour ordinateur ; analyse de systèmes informatiques ; conception de systèmes informatiques ; consultation en matière d’ordinateurs ; conversion de données et de programmes informatiques autre que conversion physique ; conversion de données ou de documents d’un support physique vers un support électronique ; services de dessinateurs d’arts graphiques ; stylisme (esthétique industrielle).

Déposant :  M. Adelin GROSJEAN, Agissant pour le compte de la société « ideva »

Numéro : 3908441

Statut : Demande publiée

Date de dépôt / Enregistrement : 2012-03-27

Lieu de dépôt : Dépôt Electronique Paris

Historique

  • Publication  2012-04-20  (BOPI 2012-16)

Installation d’un serveur Web sur Debian GNU/Linux

Nous allons aborder l’installation d’un serveur web complet sur un système d’exploitation libre  » Debian Linux  » .

debian-logo13Je ne vous parlerai pas de l’installation du système d’exploitation Debian.
Vous pourrez néanmoins trouver en téléchargement libre et gratuit, ce merveilleux système d’exploitation dans sa dernière version à l’adresse suivante : distributions Debian Linux
pour la partie installation , vous trouverez votre bonheur dans la documentation officielle du site : Manuel d’installation Debian.

Si ce n’est pas encore fait, installez le serveur OpenSSH pour accéder en toute sécurité à votre console de commande shell.

Le protocole SSH permet de crypter les données qui transitent sur le réseau entre votre machine et le serveur distant. grâce à ce système de chiffrage, vos mots de passe et identifiants seront un peu plus à l’abri des attaques réseaux, contrairement aux protocoles FTP ou Telnet encore énormément utilisés, mais très peu sécurisés voir pas du tout.
SSH vous donnera également la possibilité de créer des tunnels sécurisés. J’aborderai SSH et sa configuration plus en détail dans un prochain article.

En attendant installez OpenSSH :

 aptitude install openssh-server 

apache-logo1Nous allons maintenant rentrer dans le vif du sujet et installer tous les outils essentiels à votre serveur :

  • Apache qui est le serveur HTTP.
  • Le langage PHP 5
  • Serveur MySQL
  • L ‘outil d’administration de bases de données PhpMyAdmin
  • Le serveur de DNS Bind

et tout ça en une seule commande 🙂 :

aptitude install apache2 php5 php5-mysql bind9 mysql-server phpmyadmin