Blog d'un développeur multi-support

[DIM] pour les intimes :)

SQlite & Air

Un peu d’SQL ça fait pas de mal non ?

Je fais que peu de back admin en ce moment … j’écrit quasi pas de requêtes .. vive les ORM (object-relational mapping) .. et j’occupe mon temps libre à Flex/Flash et mon application de suivi de stats sportives.

Je suis en train d’écrire une nouvelle version de mon application, avec un plus propre, et surtout multi utilisateur afin que chacun inscrive ses statistiques sportives dans la même application. Je pourrais m’en sortir en utilisant à mort les HTTPService, faire un webservice et site dédié à la cause.. mais bon je n’ai pas vocation (pour l’instant) de créer un site pour se montrer le nombril … et imaginer le nombre de requêtes à traiter …

En sachant que embarque nativement un moteur SQLite, pourquoi ne pas garder sur le poste du client toutes ses stats ? Quitte à faire par la suite un bouton « synchroniser sur le web » :) Ca peut le faire non ?

Lire la Suite

Tags : , , ,

phpFlickr & Flex

Pour un cours de Flex, il nous avait été demandé de créer une application très simple constitué de deux écrans pour nous apprendre à manipuler les « states », les composants personnalisés, le « data binding » etc.

Le sujet de l’application était d’afficher des images en fonction d’une ville – en vue de faire du data binding sur un XML « statique » de villes – et de récupérer des images issues d’un XML dynamique via l’objet HTTPService.

Alors quitte à faire du dynamique, autant interroger directement un web service existant en vue de récupérer pleins d’images sans se prendre la tête. Et là j’ai pensé à FlickR et sa monstrueuse API. Après 5mn montre en main j’ai eu ma clé pour accèder à l’API et 4mn après je découvrait phpFlickR.

Upload de la librairie et voici mon bout de script qui me renvoit suivant deux paramètres en $_GET un joli XML près à être utilisé en .

  • $_GET['town'] est le terme rechercher dans l’api FlickR sur les tags et le text qui commente une photo.
  • $_GET['max'] est le nombre de photos qu’il faudra retourner.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
require_once("phpFlickr.php");
$flickR = new phpFlickr("ta_cle_de_connection_flickR");
 
// 10 résultat par défaut ..
if(isset($_GET['max']))
$max = $_GET['max'];
else $max=10;
 
$search = array("tags"=>$_GET['town'],'per_page'=>$max, "tag_mode"=>"any",'text' => $_GET['town']);
$tab = $flickR->photos_search($search);
 
// On renvoit un XML à Flex
header("content-type: application/xml");
 
// La balise qui va bien
echo "<?xml version="1.0" encoding="utf-8" ?>";
 
for ($i = 0; $i != $max; $i++)
{
        // on s'assure d'avoir des photos valides
	if($tab['photo'][$i]['id'] != "")
	{
	// Simple de créer des urls FlickR non ?
	$url = $flickR->buildPhotoURL($tab['photo'][$i],"thumbnail");
	$link = $flickR->buildPhotoURL($tab['photo'][$i],"medium");
 
	echo "<image><url>".$url."</url><urlLarge>".$link."</urlLarge></image>";
	}
}

La partie Flex est tout aussi simple, voici la partie essentielle qui nous intéresse :

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="searchPhoto('france',20)">
 
<mx:Script>
<![CDATA[
import mx.rpc.http.HTTPService;
import mx.rpc.events.ResultEvent;
import mx.collections.ArrayCollection;
 
[Bindable]
private var servicePhoto:ArrayCollection = new ArrayCollection(); 
 
 
private function searchPhoto(search:String,max:int):void
{
	var modService:HTTPService = new HTTPService();
	modService.method = "get";
	modService.url = "http://oni-ecchi.info/labo/FlexPhotos/service.php";
 
	var parameters:Object = new Object();
	parameters.town = search;
	parameters.max = max;
	modService.request = parameters;                
	modService.send();
	modService.addEventListener(ResultEvent.RESULT,onDataCharged);                
}
 
private function onDataCharged(e:ResultEvent):void
{
	servicePhoto = new ArrayCollection();
	servicePhoto = e.result.root.image as ArrayCollection;		
	vignettes.dataProvider = e.result.root.image as ArrayCollection;
}
 
]]>
</mx:Script>
<mx:TileList id="vignettes" dataProvider="{servicePhoto}" width="481" height="279" columnWidth="110" rowHeight="110" columnCount="4" horizontalCenter="0" paddingRight="5" verticalCenter="0">
    <mx:itemRenderer>
   		<mx:Component>
   			<mx:Image  source="{data.url}" verticalAlign="middle" horizontalAlign="center" />
   		</mx:Component>
    </mx:itemRenderer>       
</mx:TileList>
 
 
</mx:Application>

Ce n’est qu’un exemple très simple. Dans le fichier source qui va suivre, j’ai un peu plus travaillé la chose en utilisant un composant de chargement d’image sympathique, un spinner de chargement 2.0 et enfin la gestion des states (très simple).

Voilà, c’est tout pour aujourd’hui

Tags : , , ,

Découverte Flex : new NumberFormatter();

Pour mon application (cf le post juste en dessous) j’ai eu besoin d’arrondir mes statistiques à l’entier supérieur/inférieur et les mettre en forme pour ne garder que deux décimal après la virgule. N’étant pas du tout expert en Flash/, j’ai commencé à faire un de bourrin comme splitter mon float selon la virgule, slicer ensuite pour ne garder que deux décimal etc … Bref, un truc vraiment crade pour me dépanner vite fait.

Je suis revenu quelque jours après sur ce bout de code pour le cleaner un peu et pour trouver une solution vraiment propre et voici ma « découverte » : NumberFormatter ! D’après une recherche google de 45s, il apparait que cette classe n’est disponible que pour Flex ..

Voici comment l’utiliser en AS3 seulement. Je n’ai pas pris le temps de l’essayer en MXML.

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// L'objet magique
var oFormat:NumberFormatter = new NumberFormatter();
 
// Arrondis à l'entier le plus proche
oFormat.rounding = NumberBaseRoundType.NEAREST;
 
// Et on l'utilise
trace(oFormat.format(1.51)); // Affiche 2
trace(oFormat.format(1.49)); // Affiche 1
 
// Précision à 2 décimal
// D'abord on n'arrondis plus
oFormat.rounding = NumberBaseRoundType.NONE;
// On définit le nb max de décimal
oFormat.precision = "2";
 
// Et on l'utilise
trace(oFormat.format(1.544541511)); // Affiche 1.54
trace(oFormat.format(1.1)); // Affiche1.10 - note : rajout du 0 !

Et bien sur, rien ne vaut un coup d’oeil sur la documentation Adobe !
Et voilà, c’est tout pour aujourd’hui.

Tags : , , , ,

Flex c’est cool

Ouaip avec le rameur que j’ai eu ce noel, j’en fais des … Bon passons ce jeux de mot pourri. En fait je me suis remis à et plus particulierement à ce week end en vue de prendre un peu d’avance sur le cours gobelins que j’allais avoir.

L’idée était de créer une application toute simple qui me permette de suivre l’évolution de mon entrainement au rameur. Donc en gros, affichage de graphique, modification d’un XML via datagrid puis passage à pour la manipulation de l’XML..

Vous pouvez la tester via http://oni-ecchi.info/labo/TrainingFlex/ et c’est app2.air qu’il vous faudra installer.

Au final, j’ai utilisé ces adresses internet http://delicious.com/onishinji/flex et le dvd de video2brain de Flex par Herve Girolet (mon ancien prof de Flash à l’IUT).

Je reviendrais peut etre plus en détail sur cette réalisation vu qu’actuellement le source est moche :)

Tags : , , ,