Archives du mot-clef Flash

Copaing! Prenez des photos avec votre Webcam

Copie d'écran de l'interface Webshot de Copaing

Au rythme où va xuxu je pourrais très bien publier un billet par jour tant il a des nouveautés sur Copaing!

La dernière en date est le Webshot, une petite application en Flash qui vous permet de prendre une photo depuis votre ordinateur équipé d'une webcam et de l'associer à votre album photos.

Complètement inutile (ou pas), totalement indispensable (of course!).

PS: n'oubliez pas de voter!

De la lumière, des paillettes et Flash

carton d'invitation

Ayé je l'ai reçu mon invitation!

A l'occasion de l'anniversaire des 10 ans de Flash (c'est pas mal ;-) ), grâce à Adobe et Media Box, j'ai l'honneur d'être invité le 28 Novembre à la soirée donnée à l'Etoile, 12 rue de Presbourg à Paris 16ème.

A ceux que j'aurais le plaisir de croiser là bas, je vous invite à vous inscrire sur copaing et à fournir une petite photo pour compléter le trombino de l'évènement.

 

Nombril 2.0

Mince j'ai oublié de publier mes statistiques dans un billet. Et aussi mon pagerank, et mon alexa rank, et mes stats feedburner…

Demain, je mets ma boutique en ligne. 

 

ps: si vous pensez que des tags n'ont rien à faire dans ce billet, vous n'avez peut être pas tord.  

Sonneries de téléphone mobile et lecteur mp3

Le dernier lecteur mp3s de neolao permet de gérer une liste de lecture. C’est très utile, je peux par exemple vous présenter les sonneries que j’utilise sur mon nouveau mobile :

  • Endless Rain pour la famille
  • Bob l’éponge pour les amis
  • Sonnerie CTU pour les appels concernant le travail
  • Somewhere over the rainbow pour les autres appels

Merci neolao :)

Nouveau lecteur mp3 gratuit pour vos pages web

Pour la Saint Valentin, neolao nous propose son lecteur mp3 very light Edition afin d’intégrer de la musique à vos pages web. Cerise sur le gateau, ils nous offre les codes sources :) . Pour en savoir plus, je vous invite donc à vous rendre ici.

Dis neolao, t’as toujours pas trouvé de nom pour ton lecteur? Pourquoi pas « SlimPlayer »?

Après le Dewplayer, voici donc un autre lecteur [acronym=Qui Va Bien]QVB[/acronym] :)

Classe, setInterval et fonction de callback

En développant une classe en AS2, je suis tombé sur un os lorsque j’ai voulu utiliser la fonction setInterval avec comme fonction de callback une méthode de cette classe. En cherchant un peu, voici comment j’ai solutionné le problème.

Comme ça, ça ne marche pas

Voici une classe simplifiée afin d’illustrer la fonctionnalité recherchée. Dans cet exemple, nous désirons faire afficher toute les secondes un trace de la valeur de i.

class Test {
	
	public var i:Number;
	
	function Test() {
		this.i = 0;
		var j:Number = setInterval(this.affiche_i, 1000);
	}

	public function affiche_i() {
		trace(this.i++);
	}
}

Instanciation de l’objet:

var toto:Test = new Test();

Le résultat n’est pas celui escompté puisque toutes les secondes le débuggeur vas nous afficher « undefined » :( . Nous allons donc procéder autrement pour atteindre notre objectif.

Solution 1: Le passage par référence

La première solution consiste à utiliser la possibilité de passer un argument à la fonction de callback. Dans notre cas, cela va être la référence à l’objet courant.

class Test {
	
	public var i:Number;
	
	function Test() {
		this.i = 0;
		var j:Number = setInterval(this.affiche_i, 1000, this);
	}

	public function affiche_i(reference:Test) {
		trace(reference.i++);
	}
}

Il existe une autre solution qui consiste à faire de i une propriété de classe.

Solution 2: La propriété de classe

Nous allons donc utiliser le mot clé static afin de re-qualifier la propriété.

class Test {
	
	static public var i:Number;
	
	function Test() {
		Test.i = 0;
		var j:Number = setInterval(this.affiche_i, 1000);
	}

	public function affiche_i() {
		trace(Test.i++);
	}
}

Pour rappel, une propriété de classe est accessible en utilisant comme préfixe le nom de la classe et un point, suivi du nom de la propriété.

Quelle solution choisir?

La solution que vous choisirez dépend du contexte d’utilisation et de la manière dont vous allez coder votre application.

Dans le cadre d’un jeu de tir par exemple(shoot’em up). Vous pouvez être amené à gérer les vaisseaux ennemis via une classe spécifique. Ces vaisseaux ont un comportement qui leur est propre et vous les faites tirer toutes les n secondes. Une gestion de tir cadencé doit donc être commandé via un setInterval et dans cette situation c’est la première solution qui serait alors envisagée.

Par contre, si vous faire un diaporama, il peut être judiscieux d’adopter la seconde solution si vous implémantez un défilement automatique. Vous pourriez ainsi utiliser le compteur ainsi que le tableau contenant les images comme des propriétés de classes :)

Quoi de neuf?

Je ne suis pas très bavard ces derniers temps et bien que j’ai eu de nombreuses occasions pour prendre la plume(ou le clavier ^^), je ne l’ai pas fait. Pourtant, ils s’en passent des choses: Victoire de l’OL dans le Derby, défaite de l’OL contre Clermont, la fin de ma formation flash AS 2, mon module de trackback client et serveur qui est fonctionnel ….

La terre est ronde comme…

Question foot, rien à dire sinon que je rêve toujours d’un doublé pour mon équipe aimée. Bien que ce soir ils aient été en dessous du niveau qui est le leur, on ne peut pas leur en vouloir surtout après 3 matchs en 6 jours (cocorico les instances Française du ballon rond pour le calendrier 3 étoiles). Clermont de toute façon, mérite sa qualification.

Bon vivement, vendredi pour que les hommes de [acronym=Paul Le Guel]PLG[/acronym] nous montrent qu’ils savent rebondir après une déroute.

Mon Moock à moi

Question taf, je suis retourné à mon projet titanesque et avec les formations en Flash que j’ai eu, cela se passe plutôt bien. J’ai gagné en assurance et j’appréhende beaucoup moins. En quelques mots, je dois réaliser un simulateur d’appareil médical qui fonctionne via de nombreux écrans composés d’objets. Ces derniers sont décrits via des fichiers XML et pour assaisonner le tout, un objets peut en contenir plusieurs et ses propriétés peuvent hériter d’autres objets qui eux même peuvent hériter … Je vais vraiment me ronger les ongles lorsque j’attaquerais la partie permettant les interactions entre le simulateur et un utilisateur. Autant vous dire que j’uses volontier des interfaces, de l’héritage, des méthodes statiques (pour la configuration), des surcharges …

Bref, le projet en lui même me permet d’attaquer directement dans le vif du sujet. Pour montrer mon adhérence nouvelle au club des Flasheurs, j’ai acquis ce week end l’ouvrage consacré à [acronym=ActionScript 2]AS2[/acronym]: « Le meilleur d’ActionScript 2″ de Colin Moock. Oui, je suis passé de l’autre coté ^^

Projets

Avec mon compère Ldo, on travaille sur les trackbacks, auxquels on essaye d’apporter une fonctionnalité supplémentaire au niveau de la communication bilatérale, actuellement assez déséquilibrée.

Pourquoi cela? Vous savez certainement ques les bloggers ont pour principales activités, après les besoins natures évidemment, d’écrire des billets sur leur blog, de lire les billets sur celui des autres et parfois même de commenter ces derniers. Une dernière consiste à soumettre des liens vers des billets à eux sur les blogs d’autres personnes. Cette forme de « tagage » s’appellent les trackbacks. Si un blog A publie un billet intéressant, vous pouvez vous même réagir sur le votre (blog B) et avertir le premier en utilisant une url de tracback présent sur le blog A. Ainsi, ce dernier affichera à ses lecteurs un lien vers votre billet. C’est ce que j’appelle une communication déséquilibrée. Ldo a donc eu cette idée consistant à permettre à votre blog d’afficher également un lien vers le blog A, à condition qu’il ait accepté votre lien.

« Et ça ne marche pas comme ça actuellement? » – Et non.

Actuellement, c’est le blog A qui si il accepte votre lien l’affichera. Vous, vous aurez tout au plus un log signifiant si votre lien a été accepté ou pas. C’est un peu abstrait comme explication, mais sachez que les blogs (wordpress, dotclear) fonctionnent sur ce principe actuellement. Ldo et moi avons donc élargi le système. Le blog A pourra désormais, lorsqu’il accepte un lien, renvoyer une réponse se composant des informations nécessaire à un traitement par votre blog: nom du blog A, titre du billet, résumé et lien vers ce dernier. Ouf! Dans un prochain billet vous aurez un aperçu technique du fonctionnement.

Quoiqu’il en soit, ce module (que je n’ai pas encore activé) me fait penser que mon blog ne devient plus fonctionnel. Visuellement, le fait qu’il se rapproche tant d’un Dotclear m’embête également un peu. Dans les jours qui viennent, il y aura donc un lifting et de nouvelles fonctionnalités. Vivement demain …

Formation Flash – Acte premier

Hier j’ai terminé la première partie de ma formation à Flash. Ma boite a fait appel à Media-Box qui a envoyé un de ses formateurs dans nos locaux. Comme je n’étais jusqu’à alors qu’un Flasheur du dimanche, j’ai donc été très attentif à ce qui a été dit et j’ai joué le jeu à fond (j’ai fait tous les exercices d’algo ^^). Vivement lundi prochain pour la formation à Actionscript 2.

J’ai déjà pleins d’idées d’applications à faire. 2005 sera Flashy :)

Remplacer les occurrences d’une chaine par une autre dans un texte

Je débute dans le développement d’application sous Flash MX et je ne suis pas arrivé à trouver une fonction qui permet de remplacer les occurences d’une chaine par une autre. Je me suis donc permis de faire l’équivalent en actionscript de str_replace() et str_ireplace().

La fonction sensible à la casse : str_replace()

[as2]
function str_replace(cible:String, replace:String, chaine:String):String {
while (chaine.indexOf(cible, 0) > -1) {
chaine = chaine.substr(0, chaine.indexOf(cible)) + replace + chaine.substr(chaine.indexOf(cible) + replace.length, chaine.length);
}
return chaine;
}
[/as2]

La fonction non sensible à la casse : str_ireplace()

[as2]
function str_ireplace(cible:String, replace:String, chaine:String):String {
cible_target = new String(cible.toLowerCase());
chaine_target = new String(chaine.toLowerCase());

while (chaine_target.indexOf(cible_target, 0) > -1) {
chaine = chaine.substr(0, chaine_target.indexOf(cible_target)) + replace +
chaine.substr(chaine_target.indexOf(cible_target) + replace.length,
chaine.length);
chaine_target = chaine.toLowerCase();
}
return chaine;
}
[/as2]