Canalblog
Suivre ce blog Administration + Créer mon blog

AIR Flex Actionscript

27 novembre 2007

Et voilà

C'est le moment de voler de ses propres ailes, alors  je remercie cette plateforme de blog , qui m'a permis de gouter aux joies du bloging  :), et  je vais tester wordpress, avec contrôle total et donc  pleins de conneries à faire, je suis assez fort dans le oups, j'aurais pas du faire ça. Mais il n'y a pas 36 façons d'apprendre et puis je ne blog pas pour la postérité donc  perdre des articles, je dois avouer que je m'en f... un peu, beaucoup.

Au début je me servais du blog comme d'une base de connaissance perso, avec l'improbable croyance de retrouver des choses dedans, et au final même pas, je me rends compte que ça  me permet un peu, de synthétiser  ce que je fais, et du coup de prendre du recul. Un peu comme les antisèches que l'on connaissait par coeur après les avoir écrites 3 fois pour obtenir le meilleur rendement place/information.

Puis il semble que certains articles apportent un peu d'aide alors on à l'impression d'être un peu utile ( ca va j suis pas au bord de la dépréssion :) ).

Bon allez stop le pathos, merci canalblog, pour ceux qui veulent  la suite maintenant c'est http://flexair.mykii.eu

Je laisse ce  blog ouvert vu que je ne peux  pas récupérer le contenu automatiquement... :( et que là j'ai  vraiment la flegme de le faire.





Publicité
20 novembre 2007

Qoove post it version AIR

Comme l'indique le titre Qoove est une  petite appli de post-it.

Je dois dire que j'ai un peu de mal avec ce genre d'application, je ne vois pas bien l'intérêt de remplacer des applications existantes nativement dans les os, par une n'apportant rien de plus, ou alors  je suis passé à coté d'un truc existentiel :)

Enfin pour ceux qui le souhaitent c'est sur http://www.qoove.com/

Par contre cette société développe un vrai produit en flex pour la gestion de client/projet pour les freelances et  petite entreprise, et  on peut s'inscrire  comme testeur pour la version alpha.


18 novembre 2007

Un site efficace en flash

http://www.adobe.com/flashon/

Navigation simple et rapide,  belle présentation des items et utilisation de la Hd pour les vidéos, bien bien.

I like this site, nice, navigation simple and efficient, HD videos, look him.

18 novembre 2007

Faire un résume sur un download avec AIR

Je ne l'ai pas testé n'en ayant pas vraiment besoin, mais je trouve la possibilité  de le faire  intéréssante, donc pour ceux qui le souhaite, voici quelques lignes de code qui permettraient de faire un résume sur  un download raté.

http://www.richapps.de/?p=113

C'est .de mais  écrit en anglais ... faut vraiment que je m'y mette.

I haven't tested this trick, but the idea is great and possibility nice, you can resume download in your AIR application. Follow the precedent link, they 're the code and the explications.

Enjoy

18 novembre 2007

CyberDuck notre canard préféré sous OSX

Si vous utilisez CyberDuck, lancez  le il vous  proposera  une  mise à jour.  Je ne vais pas vous dire ce qu'elle corrige c'est écrit dessus  :)

Puis de toute façons  en général c'est utile de faire  les mises à jours et  obligatoire pour profiter des suivante s alors click, click et  click.

Publicité
18 novembre 2007

Gestion de vidéos

Une appication AIR de plus, elle permet de  gérer ses contenus vidéos, sur la plateforme ooyala.

Ci joint une capture d'écran de ce que l'on peut faire avec. Image_3

16 novembre 2007

Exif actionscript

Bon, puisqu'en ce moment c'est la fête du byte reading, voilà la lecture des infos exif d'un fichier image  sans le charger

Les classes sont dispos chez Antti Kupilla

En plus des classes il y a une super explication et pour ceux que ça intéresse c'est très instructif.

Juste un petit truc au passage, je ne fais pas de flex pour le web, (on s'en fout :)), ok, ce qui me plait c'est surtout AIR, donc encore une fois (rapport à la lecture des  id3), il faut modifier l'accès au fichier pour utiliser ces classes avec AIR.

Ci dessous  la classe modifiée pour lire un fichier en local.

package
{
    import flash.display.*;
    import flash.events.*;
    import flash.filesystem.File;
    import flash.filesystem.FileMode;
    import flash.filesystem.FileStream;
    import flash.net.*;
    import flash.utils.*;
    public class ExifReader extends Sprite {
        //    private var image:URLLoader = null;
        private var image:FileStream = new FileStream() ;
        private var _contentExif:String = null;
        public function ExifReader( path:String = "YOUR_DEFAULT_TEST_FILE" ) {                        

        ////   Connection distante
        /*
            var request:URLRequest = new URLRequest( path );
            image = new URLLoader();
            //image.dataFormat = DataFormat.BINARY;
            image.addEventListener( Event.COMPLETE, parse );
            image.load( request );
        */
        // Contenu local
            var sourceFile:File = new File();
            sourceFile.nativePath = path;
            image.openAsync(sourceFile, FileMode.READ);
            image.addEventListener( Event.COMPLETE, parse );
        }       

        public function parse( event:Event ):void {
            var contents:Array = null;
            var dump:Array = null;
            var ifd:Array = null;
            var data:ByteArray = new ByteArray();
            var exif:uint = 0;
            var interop:uint = 0;
            var length:uint = 0;
            var tiff:TIFF;

            image.readBytes( data, 0, 12 );

            if( !isJpeg( data ) || !hasExif( data ) ) {
                trace( "Not a JPEG containing EXIF data." );
                return;   
            }

            data.position = 4;
            length = data.readUnsignedShort();
            trace( "EXIF header length: " + length + " bytes" );

            image.readBytes( data, 0, length - 8 );

            if( data[0] == 73 ) {
                trace( "Intel format" );   
            } else {
                trace( "Motorola format" );
            }

            tiff = new TIFF( data );
            ifd = tiff.list();

            for( var i:int = 0; i < ifd.length; i++ ) {

                if( i == 0 ) {
                    trace( "Main image" );   
                } else if( i == 1 ) {
                    trace( "Thumbnail image" );   
                }

                contents = tiff.dump( ifd[i] );
                tiff.print( contents, TIFF.EXIF_TAGS );

                exif = 0;

                for( var t:int = 0; t < contents.length; t++ ) {
                    if( contents[t].getTag() == 34665 ) {
                        exif = contents[t].getValues()[0];
                    }
                }

                if( exif != 0 ) {
                    contents = tiff.dump( exif );
                    tiff.print( contents, TIFF.EXIF_TAGS );

                    interop = 0;

                    for( var s:int = 0; s < contents.length; s++ ) {
                        if( contents[s].getTag() == 40965 ) {
                            interop = contents[s].getValues()[0];
                        }   
                    }

                    if( interop != 0 ) {
                        contents = tiff.dump( interop );
                        tiff.print( contents, TIFF.INTEROP_TAGS );

                    }

                    dispatchEvent(new Event(Event.COMPLETE));                   
                }
            }
        }

        public function isJpeg( data:ByteArray ):Boolean {
            var jpeg:Boolean = false;

            if( data[0] == 255 && data[1] == 216 &&
                data[2] == 255 && data[3] == 225 ) {
                jpeg = true;   
            }
            return jpeg;
        }

        public function hasExif( data:ByteArray ):Boolean {
            var exif:Boolean = false;

            if( data[6] == 69 && data[7] == 120 &&
                data[8] == 105 && data[9] == 102 ) {
                exif = true;       
            }
            return exif;   
        }
    }
}

Si vous passez par  là et que vous connaissez des tutos sur la lecture d'infos dans  les fichiers  je suis preneur.

Enjoy !!

si je me souviens bien  il y a des petites fautes de frappes, je crois qu'il manque les s sur les import de flash.utils et des V majuscules sur les void qui ont géné flex pour la compile.

14 novembre 2007

RandomWin

Cette application vous  permet de prendre des  photos de  personnes, prendre leur nom, et enfin de faire  un tirage au sort  ... A utiliser  partout ou on en a besoin  :)

Et à télécharger sur CodeMoiUnMouton

13 novembre 2007

VideoChat avec Adium

Vu sur le blog de  Adium un plug in qui permet de  faire  des visioconferences jusqu'a 15 personnes, il serait dèv en  flash  ce qui ne gâche rien  :)

Bon je l'ai installé, maintenant il va falloir convaincre des gens pour le tester :)


13 novembre 2007

Lire les ID3 d'un fichier

Lire les balises d'un mp3 peux sembler simple, c'est vrai si on accepte de lancer un objet sound.

Mais mon but étant simplement de récupérer les données pour les afficher, je ne trouvais pas très propre de  lancer  le son en arrière plan avec un volume à zéro le temps de récupérer les infos.

Heureusement Mr Ben Stucki nous a concoté un super tutoriel sur la lecture d'un fichier binaire et  la récupération des tags sur un fichier mp3

http://labs.adobe.com/wiki/index.php/AIR:Articles:Working_with_Binary_Data#Reading_binary_data

L'un des principaux problèmes de ce tuto pour les maceux, c'est l'utilisation de browse .... :( un jour peut être.
Enfin pour ça  il suffit de déterminer soit même le chemin du fichier que l'on souhaite lire.
Pour ça je donne  le path du fichier comme argument de la fonction.
Un autre  petit souci c'est que  l'exemple considère que  les fichiers sont bien tagés ce qui malheureusement  n'est pas toujours le cas, j'ai donc ajouté (en rouge )un test try ... catch pour eviter l'erreur 2030.
Et modifié (en vert) la manière de récupérer les infos notamment parce que sur certains  mp3 le titre n'est pas dans TIT2 mais TT2, une question de version je crois.

Le code original et les autres fonctions nécéssaires sont disponibles via le lien précédent.
SongTitle, SongAlbum, SongArtiste sont les noms de  mes champs textes ou variables à vous de les adapter au votre.

            private function loadLocalID3( pathDuFichier:String ):void {
                var file:File = new File();
                file.nativePath = pathDuFichier;
                var bytes:FileStream = new FileStream();
                bytes.open(file, FileMode.READ);

                // read in sequence
                var tagId:String = bytes.readUTFBytes(3);
                var majorVersion:Number = bytes.readByte();
                var minorVersion:Number = bytes.readByte();
                var flags:int = bytes.readByte();
                var tagSize:uint = convertSynchsafe(bytes.readUnsignedInt())

                trace("id: " + tagId);
                if(flags==0) {
                    //frames
                    while(bytes.position < tagSize) {
                        var id:String = bytes.readUTFBytes(4);
                        var size:uint = bytes.readUnsignedInt();
                        var flags1:int = bytes.readByte();
                        var flags2:int = bytes.readByte();
                        if(id!="") { trace(id); }

                        if(id.charAt(0)=="T") {   
                        try{
                            var encodingFlag:int = bytes.readByte();
                            var text:String = bytes.readUTFBytes(size-1);       
                            if(id == "TIT2"){   
                                SongTitle.text = text;
                            }
                            if(id == "TT2"){   
                                SongTitle.text = text;
                            }
                            if(id == "TPE1"){
                                SongArtist.text = text;
                            }
                            if(id == "TALB"){
                                SongAlbum = text;   
                            }

                        } catch(error:EOFError){
                            trace (error.message);
                        }
   

                        } else if(id == "APIC") {
                            var start:int = bytes.position;
                            var textEncoding:int = bytes.readByte();
                            var mime:String = readISO(bytes);
                            var pictureType:int = bytes.readByte();
                            var description:String = readISO(bytes);
                            var stop:int = bytes.position;
                            var imageSize:int = size-(stop-start);
                            var image:ByteArray = new ByteArray();
                            bytes.readBytes(image,0,imageSize);
                            var loader:Loader = new Loader();
                            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
                            loader.loadBytes(image);
                        } else {
                            bytes.position += size;
                        }
                    }
                    SongTitle.text = SongTitle.text+' '+SongAlbum; // Ca c'est  perso j affiche le titre et  l album dans le même champs
                }
            }

La ou Mr Stucki fait très fort, c'est  sur son blog ou il propose de récupérer le contenu des balises ID3 d'un élément distant (ce post  à pratiquement deux ans :)), mais il fonctionne avec flex3 beta 2 donc pas de soucis.
Il faut  refaire  les opérations citées précédemment dans le code car il y a  le même type de problèmes sur les fichiers qui n'ont pas de tags ou pas les mêmes.

D'ici quelques temps, j'espère être moins chargé et  faire un tutoriel complet sur le sujet, il me faut aussi un vrai blog avec de l'affichage de code et un moteur de recherche parce que là  c'est n'importe quoi :)

Publicité
1 2 3 4 5 6 > >>
Publicité
Publicité