Aller au contenu | Aller au menu | Aller à la recherche

jeudi 27 mars 2008

[Flex] Tamina Framework

Tamina Framework est disponible en ligne sur RIAForge.
Comme vous le savez nous avons décidé de travailler sur la version 2 d’Expantion.
Celle-ci est en grande partie une migration technologique puisqu’on voit le projet passer de flash8 : as2 : php : oregano : mysql, à du flex : as3 : java : blazeds : mysql.
A cette occasion, nous avons décidé qu’une partie du code source serait disponible en Open Source sous licence MPL, le Tamina Framework.
Pour le moment il est très léger, mais voici déjà une liste des fonctionnalités qu’il apporte :

  • Prechargement avancé de l’application
  • Parametrage de l’application via IoC
  • Gestion dynamique des media
  • - Gestion dynamique des langues

mercredi 27 février 2008

Flash et Flex entrent dans l’ère de l’Open Source

Bon je ne vais pas insister sur la sortie de Flex 3 et AIR 1.0, l’info a déjà largement circulée.
Par contre je vais revenir sur le passage en Open Source de certaines technologies Flash.

  • Flex SDK, le framework développé par adobe pour permettre le développement rapide d’IHM pour RIA, est maintenant Open Source.
  • Blaze DS, un serveur de présentation écrit en java et intégrable dans un serveur d’application J2EE. Il gère les échanges entre application flash et serveur en remoting AMF0 et AMF3, le web messaging et le push de donnée sur du http.
  • La machine virtuelle d’ActionScript (AVM2) est elle aussi en Open Source. Une implémentation native dans le prochain Firefox est en cour de développement par la fondation Mozilla sous le nom de Tamarin.
  • Enfin, et de façon complément indépendante d’adobe, il existe de trés nombreux projets open source qui tournent autour de flash.

Le site des technologies d’adobe Open Source :
http://opensource.adobe.com

Les sites des autres technologies Open Source :
http://www.riaforge.org/
http://osflash.org/

mercredi 13 février 2008

[Flex] Mise en place d'un workflow entre designers et developpeurs

Avec l’arrivée d’un vrai outil dédié au développement d’application en flash, Flex, nos habitudes de production changent quelque peu.
Voyons un petit peu quel type de workflow nous pouvons mettre en place pour optimiser le travail et les échanges entre développeurs et designers flash.

Lire la suite

mardi 12 février 2008

Interview du créateur de Sandy 3D

Le site 3d-test propose une interview de thomas pfeiffer, l'auteur du moteur 3D français pour flash, Sandy 3D.
Pour rappel nous utilisons dans Expantion la version 2.0, celle en AS2, et sommes en train de préparer la prochaine version avec la 3.0 en AS3.
A voir ici

mercredi 6 février 2008

[AS3] InitManager mise à jour

Je viens de mettre en ligne une mise à jour de l’InitManager pour les applications Flex.
J’ai remarqué qu’en réalité lors du preloading de l’application celle-ci se trouvait initialisée AVANT que l’InitManager ne le soit. Du coup si comme moi on avait besoin d’accéder à des propriétés initialisées par l’InitManager au moment de l’Initialisation de l’application et bien on avait droit à une belle exception.
Par exemple grâce à l’InitManager pour rendre mes applications multilingues je fais simplement en mxml un label="{LangManager.getLangBundle().getRessource ('moduleOutilItemText')}"
C’est très pratique et efficace mais malheureusement ça ne marchait pas. Maintenant ce problème est réglé :)
J’en ai profiter pour rajouter un événement accessible en mxml dans votre balise application : « applicationReady »
Ca a également attiré mon attention sur la nécessité d’améliorer la gestion des erreurs et des exceptions dans l’InitManager, je ferais ça dans une autre (prochaine) version.

Je vous rappel le lien vers l’article précédant : http://www.tamina-online.com/damo/index.php?2007/11/09/20--as3-initmanager

jeudi 3 janvier 2008

Tamina devient une association !!!

Titom et moi venons tout juste de déposer les statuts de l’association. La publication dans le journal officiel ne devrait plus tarder.
Mais alors qu’est-ce que Tamina, et quel rapport avec Expantion ?
Et bien Tamina est le résultat des trois années que nous avons passé à développer Expantion.
En fait …

Lire la suite

mercredi 5 décembre 2007

Serious Games Sessions Europe 2007

Je reviens juste du salon sur les serious games qui s’est tenu à Lyon. On a pu voir de nombreuse choses très intéressantes et beaucoup de solutions basée sur des RIA en Flash et/ou Flex.
Je vous propose un petit tour de ce salon pour voir ce qui l’en est…

Lire la suite

vendredi 9 novembre 2007

[AS3] InitManager

Sur de nombreux projets il m’arrive d’avoir besoin d’initialiser un certain nombre de paramètres AVANT de lancer mon application. On peut avoir besoin de ressources pour la langue, de certains paramètres XML pour configurer l’application, de certaines données l’utilisateur et ces droits, d’une feuille de style pour la skin à utiliser, etc… Venant de passer depuis quelques temps à l’AS3, j’ai du retraduire une classe que j’avais développé à l’époque en AS2, et destinée à assurer ce travail pour tous mes projets. Pour l’occasion je vous la livre dans sa nouvelle version…

Lire la suite

jeudi 27 septembre 2007

Ma premiere conférence

Dans le cadre d'une association bordelaise, je vais avoir prochainement l'occasion d'animer une (petite) conférence sur Flash et Flex.

Lire la suite

lundi 24 septembre 2007

Nouvelle version d'Oregano server 1.1.2

Pour les besoins d’Expantion, j’ai du modifier le serveur de socket Oregano. La première chose que j’ai modifié, est l’intégration du patch de Jens Halm sur le problème de connections persistantes. La deuxième chose concerne l’ajout d’un port d’admin pouvant être attaqué depuis le serveur par différents langages. La problématique que j’avais était la suivante. Expantion étant partiellement un jeu au tour par tour, j’avais besoin qu’a la fin du calcule du tour, le serveur puisse pusher certaines info aux clients flash connectés. J’avais également besoin de pouvoir pusher de la même façon n’importe quoi à n’importe quel moment. Par exemple si j’ai envie de faire tomber la nuit d’un coup. Pour cela cette version d’oregano a un nouveau port d’ouvert, le 1890. Ce port est de type telnet et attend une connexion. Une fois la connexion établie, il attend un message et coupe la connexion après réception de celui-ci. Les messages sont du type suivant :

serverEvent monEvent

Ici monEvent va etre dispatché à tous les joueurs connectés à oregano via org.omus.msg.Messenger.

Coté flash il ne reste plus qu’a implémenter un comportement en rapport avec monEvent.

Trêve de blabla, voici un exemple concret : Pour la partie cliente, j’ai créé une classe qui va se charger d’établir la connexion avec oregano en PHP.

@@<?php
/*
OreganoAdmin 0.1
by David Mouton
based on PHPTELNET class by Antone Roundy
public domain
*/

class OreganoAdmin {
	var $show_connect_error=1;

	var $use_usleep=0;	// change to 1 for faster execution
		// don't change to 1 on Windows servers unless you have PHP 5
	var $sleeptime=125000;
	var $loginsleeptime=1000000;

	var $fp=NULL;
	var $loginprompt;
	
	var $conn1;
	var $conn2;
	
	/*
	0 = success
	1 = couldn't open network connection
	2 = unknown host
	3 = login failed
	4 = PHP version too low
	*/
	function Connect($server,$port) {
		$rv=0;
		$vers=explode('.',PHP_VERSION);
		$needvers=array(4,3,0);
		$j=count($vers);
		$k=count($needvers);
		if ($k<$j) $j=$k;
		for ($i=0;$i<$j;$i++) {
			if (($vers$i+0)>$needvers$i) break;
			if (($vers$i+0)<$needvers$i) {
				$this->ConnectError(4);
				return 4;
			}
		}
		
		$this->Disconnect();
		
		if (strlen($server)) {
			if (preg_match('/^0-9./',$server)) {
				$ip=gethostbyname($server);
				if ($ip==$server) {
					$ip='';
					$rv=2;
				}
			} else $ip=$server;
		} else $ip='127.0.0.1';
		
		if (strlen($ip)) {
			if ($this->fp=fsockopen($ip,$port)) {
			} else $rv=1;
		}
		
		if ($rv) $this->ConnectError($rv);
		return $rv;
	}
	
	function Disconnect($exit=1) {
		if ($this->fp) {
			if ($exit) $this->DoCommand('exit',$junk);
			fclose($this->fp);
			$this->fp=NULL;
		}
	}

	function DoCommand($c,&$r) {
		if ($this->fp) {
			fputs($this->fp,"$c\r");
			$this->Sleep();
			$this->GetResponse($r);
			$r=preg_replace("/^.*?\n(.*)\n^\n*$/","$1",$r);
		}
		return $this->fp?1:0;
	}
	
	function GetResponse(&$r) {
		$r='';
		do { 
			$r.=fread($this->fp,1000);
			$s=socket_get_status($this->fp);
		} while ($s'unread_bytes');
	}
	
	function Sleep() {
		if ($this->use_usleep) usleep($this->sleeptime);
		else sleep(1);
	}
	
	function OreganoAdmin() {
		$this->conn1=chr(0xFF).chr(0xFB).chr(0x1F).chr(0xFF).chr(0xFB).
			chr(0x20).chr(0xFF).chr(0xFB).chr(0x18).chr(0xFF).chr(0xFB).
			chr(0x27).chr(0xFF).chr(0xFD).chr(0x01).chr(0xFF).chr(0xFB).
			chr(0x03).chr(0xFF).chr(0xFD).chr(0x03).chr(0xFF).chr(0xFC).
			chr(0x23).chr(0xFF).chr(0xFC).chr(0x24).chr(0xFF).chr(0xFA).
			chr(0x1F).chr(0x00).chr(0x50).chr(0x00).chr(0x18).chr(0xFF).
			chr(0xF0).chr(0xFF).chr(0xFA).chr(0x20).chr(0x00).chr(0x33).
			chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0x2C).chr(0x33).
			chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0xFF).chr(0xF0).
			chr(0xFF).chr(0xFA).chr(0x27).chr(0x00).chr(0xFF).chr(0xF0).
			chr(0xFF).chr(0xFA).chr(0x18).chr(0x00).chr(0x58).chr(0x54).
			chr(0x45).chr(0x52).chr(0x4D).chr(0xFF).chr(0xF0);
		$this->conn2=chr(0xFF).chr(0xFC).chr(0x01).chr(0xFF).chr(0xFC).
			chr(0x22).chr(0xFF).chr(0xFE).chr(0x05).chr(0xFF).chr(0xFC).chr(0x21);
	}
	
	function ConnectError($num) {
		if ($this->show_connect_error) switch ($num) {
		case 1: echo '<br />PHP Telnet <a href="http://www.geckotribe.com/php-telnet/errors/fsockopen.php">Connect failed: Unable to open network connection</a><br />'; break;
		case 2: echo '<br />PHP Telnet <a href="http://www.geckotribe.com/php-telnet/errors/unknown-host.php">Connect failed: Unknown host</a><br />'; break;
		case 3: echo '<br />PHP Telnet <a href="http://www.geckotribe.com/php-telnet/errors/login.php">Connect failed: Login failed</a><br />'; break;
		case 4: echo '<br />PHP Telnet <a href="http://www.geckotribe.com/php-telnet/errors/php-version.php">Connect failed: Your server\'s PHP version is too low for PHP Telnet</a><br />'; break;
		}
	}
}
?>@@

Une application PHP va s’écrire comme ceci :

@@<?php
require_once "OreganoAdmin.php";

$telnet = new OreganoAdmin();
$result = $telnet->Connect('127.0.0.1','1890');
echo $result;
if ($result == 0) { 
$telnet->DoCommand('serverEvent KICKALL', $result);
echo $result;
}
?>@@

Enfin coté client flash nous allons faire ceci pour intercepter l’évent et le traiter :

@@public function init():Void{
		trace("OreganoUtils : Initialisation");
		//On ecoute le messager
		var ecouteur:Object = ;
		ecouteur.onMessage = Delegate.create(this,receiveMessage);
		Messenger.getInstance().addListener(ecouteur);
	}
private function receiveMessage(recepMsg:Message):Void{
		trace("OreganoUtils : Receiving message...");
		if(recepMsg.getSubject() == "KICKALL"){
			trace("OreganoUtils : Reception d'un status : KICKALL");
			//DO ACTION HERE
		}
	}@@

Je proposerais prochainement une version plus élaborée du système, plus dynamique au niveau de Oregano, comme la possibilité de configurer la chose, celle de faire des extensions, etc …

Telecharger archive RAR

lundi 6 août 2007

Ca y est…

La nouvelle version d’Expantion est à nouveau ouverte au publique. Nous avons terminé les phases d’inscriptions VIP et la partie a bien débuté. La guerre fait actuellement rage entre les trois camps qui s’affrontent. L’Empire est très nettement en train de submerger ses adversaires et attaque même le coeur de leur fondation.

Lire la suite

lundi 25 juin 2007

Flash Player et accélération materielle

Adobe vient de sortir une nouvelle version de son player flash 9, la 2.0.60.120 encore en beta est disponible ici : player
Il y a beaucoup de nouveautés au programme et celle que nous allons voir aujourd’hui est l’accélération matérielle de la lecture des vidéos.

Lire la suite

jeudi 7 juin 2007

Ma petite contribution à Sandy

J'ai decouvert il y a pas longtemps, un moyen pour manipuler l'orientation d'un Sprite3D. Il faut comprendre qu'il ne s'agit pas de modifier la rotation du Sprite puisque celui-ci reste en permanence face à la camera, mais de jouer avec la frame de la skin pour...

Lire la suite

mardi 15 mai 2007

Aprés Mircrosoft, c'est Sun qui se lance dans la RIA...

Sun vient d'annoncer à l'occasion de la conférence JavaOne, la sortie d'une nouvelle gamme de produit orienté RIA, JavaFX. Le tout s'appuira sur la JVM qui est multiplateforme et présente sur desktop et mobile. L'un des deux premiers modules annoncés est JavaFX Script,un nouveau langage de script déclaratif et statiquement typé qui utilise les bibliothèques Java2D Swing pour construire des interfaces riches et interactives...

Lire la suite

mercredi 9 mai 2007

Oregano le retour

Une très bonne nouvelle vient d'arriver par le blog de Thomas Pfeiffer. Eric Priou vient de rouvrir le forum qu’il avait jadis consacré à Oregano et fermé par manque de participant et à cause du spam. Quel plaisir donc que de retrouver tous les anciens posts de la première communauté francophone autour de ce fantastique serveur de socket.

Lire la suite