Prise de commandes

Celui qui sait commander trouve toujours ceux qui doivent obéir. – Friedrich Nietzsche

Petits test cette nuit pour vérifier la validité d’un ensemble de classes d’animation (Tween, transformations non linéaires)  basées a minima sur le pattern Command.

J’ai commencé par deux petites classes d’animation de champ de texte. Classique. D’aucuns auraient préféré étendre la classe flash.text.TextField, il m’apparait cependant plus utile de pouvoir stocker les effets indépendamment.

site.fx.Decrypto, basée sur une classe de Josh Tynjala et brillamment résumé par celui-ci : “Hollywood doesn’t understand computers.” – en gros décryptage progressif du texte à afficher.
site.fx.Dactylo, saisie progressive du texte dans le champ

Horloge analogique

Une horloge avec des aiguilles des plus sommaires, pas de quoi être fier mais ça peut toujours être utile.

package site.draw
{
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.events.TimerEvent;
  import flash.geom.Point;
  import flash.utils.Timer;
 
  public class AnalogicClock extends Sprite
  {
    protected var __hands:Sprite;
    protected var __width:Number = 50;
    protected var __height:Number = 50;
    protected var __center:Point;
    protected var __d:Date;
   
    protected var __timer:Timer;
   
    public function AnalogicClock()
    {
      __hands = new Sprite();
      __hands.rotation = -90;
      addChild(__hands);
     
      __center = new Point(.5 * __width, .5 * __height);
      __timer = new Timer(500, 0);
      __timer.addEventListener(TimerEvent.TIMER, tickHandler);
     
      addEventListener(Event.ADDED_TO_STAGE, init);
      addEventListener(Event.REMOVED_FROM_STAGE, dispose);
    }
   
    protected function init(e:Event):void
    {
      removeEventListener(Event.ADDED_TO_STAGE, init);
     
      running = true;
    }
   
    protected function dispose(e:Event):void
    {
      removeEventListener(Event.REMOVED_FROM_STAGE, dispose);
    }
   
   
    override public function set width(width:Number):void
    {
      __width = width;
      __center.x = __hands.x = .5 * __width;
      draw();
    }
   
    override public function set height(height:Number):void
    {
      __height = height;
      __center.y = __hands.y = .5 * __height;
      draw();
    }
   
    public function set running(running:Boolean):void
    {
      if (running != __timer.running)
        running ? __timer.start() : __timer.stop();
    }
   
    public function get running():Boolean
    {
      return __timer.running;
    }
   
    public function setTime(d:Date):void
    {
      running = false;
      __d = d;
      draw();
    }
   
   
    private function tickHandler(e:TimerEvent = null):void
    {
      __d = new Date();
      draw();
    }
   
    protected function draw():void
    {
      __hands.graphics.clear();
     
      var minuteRatio:Number = __d.getMinutes() / 60,
        hourRatio:Number = ((__d.getHours() + minuteRatio) % 12) / 12,
        secondsRatio:Number = __d.getSeconds() / 60;
     
      drawHand(hourRatio, 2, 0xff0000, 1, .7);
      drawHand(minuteRatio, 2, 0x0);
      drawHand(secondsRatio, 1, 0x0);
    }
   
    protected function drawHand(thetaRatio:Number, thickness:Number, color:uint, alpha: Number = 1, lengthRatio:Number = 1):void
    {
      var theta:Number = 2 * Math.PI * thetaRatio;
      __hands.graphics.lineStyle(thickness, color, alpha);
      __hands.graphics.moveTo(0, 0);
      __hands.graphics.lineTo(Math.cos(theta) * __center.x * lengthRatio, Math.sin(theta) * __center.y * lengthRatio);
    }
  }
}

Volkswagen Nouvelle Polo

L’agence Symediane a fait appel à Vegas Deluxe pour constituer une équipe autour de la campagne en deux phases du lancement de la nouvelle Polo.

nouvelle polo - site internet

Dans un premier temps, il s’agissait d’être réactif en proposant le design et la fabrication d’un site événementiel pour promouvoir la campagne et de jouer sur une mécanique virale autour des vidéos réalisées par l’équipe d’Action Discrète et diffusées à raison d’un épisode par semaine. Un espace d’administration a été déployé pour permettre un suivi statistique du nombre de visualisations ainsi que des parrainages (influant sur la probabilité de gagner au concours).

La seconde phase concernait la mise en place du site d’information encapsulé dans le site du constructeur Volkswagen et présentant plus amplement les caractéristiques du modèle. Notre mission s’est concentrée sur le développement Flash qui intégrant notamment des transitions vidéos permettant de lier les différents décors servant de support aux sections principales. Là aussi, une console de gestion permettait les suivi et l’export des inscriptions au concours.

Je suis personnellement intervenu dans le développement Flash des deux sites.

voir le site

drops

Le chantier est lancé ! Drops se veut un back-office simple, quitte à sacrifier des fonctionnalités au profit de l’ergonomie et de la robustesse. Il a pour principal objectif de satisfaire les besoins des “petits” sites (comprendre sans trop de fonctionnalités excentriques) : portfolio, sites promotionnels, sites vitrines, etc.

C’est aussi un CMS destiné au site Flash et livrable pour un développeur tiers avec les classes actionscript de base pour gérer la couche de données et certains éléments graphiques (galeries multimédia, articles, flux RSS).

Je reviendrai prochainement sur le sujet avec un aperçu plus poussé de ce projet.

Références de structures itératives

Des fois, on est juste en retard

var outerI:uint, innerI:uint, values:Array;

values = [];
for(outerI = 0; outerI < 2; outerI++){
  for(innerI = 0; innerI < 3; innerI++){
    if(innerI == 2)
      break;
    valuesNoLabel.push(outerI + '-' + innerI);
  }
}
// values: 0-0,0-1,1-0,1-1


values = [];
mainLoop:for(outerI = 0; outerI < 2; outerI++){
  for(innerI = 0; innerI < 3; innerI++){
    if(innerI == 2)
      break mainLoop;
    valuesWithLabel.push(outerI + '-' + innerI);
  }
}
// values: 0-0,0-1

Des erreurs, en veux-tu ? – en voilà.

Il y a des esprits qui vont à l’erreur par toutes les vérités ; il en est de plus heureux qui vont aux grandes vérités par toutes les erreurs. Joseph Joubert

En cours de finition du logger développé en parallèlle de drops cms, le hasard m’a conduit à ce petit raccourci bien utile en phase de debug. Le concept est fort simple, générer une erreur pour récupérer le contexte d’exécution.

/**
 * Returns stack trace from where the method is called.
 *
 * @param skipLast    number of stack levels to be removed from the top (closest to the method call)
 */

public static function _getStackTrace(skipLast:int = 0):String
{
  var stackTrace:String = '';
  var err:Error = new Error();
  var lines:Array = err.getStackTrace().split('\n');
  skipLast += 2;// remove error and current function
  while (--skipLast >= 0){
    lines.shift();
  }
  return lines.join('\n');
}
Haut de Page