Blog d'un développeur multi-support

[DIM] pour les intimes :)

Hébergement de BOT

Dans un article précédent, nous avions vu comment créer un bot en . Seulement assurer la connexion du bot sur le salon était assez laborieux. Un processus par bot qui tourne sur votre machine, c’est pas folichon.

Mais grâce à http://new.imified.com, ce souci n’en est plus un ! Ce service web permet de connecter un bot à MSN, IRC, Gtalk etc et ce bot demandera à votre page PHP ce qu’il doit faire.

Au final nous n’avons plus qu’a se consacrer sur les réponses et les traitements à faire en fonction du dialogue de l’utilisateur (donnée récupérer sous forme de $_GET). Fini le parsage du stream pour détecter la bonne ligne ^^

Je vous avouerais, j’ai pas encore tester. Mais je compte le faire un de ces quatres :) Je pense que c’est LA solution pour créer rapidement un compagnon virtuel … Imaginer un bot de ce style qui pilote votre twitter, facebook etc. Vous lui parlez, il s’occupe du reste :)

Vu sur le channel #-fr (irc.freenode.com) grâce à [MA]Pascal.
Il a crée un bot qui relaie ce que vous lui dites sur un site donné. (Système de prise de notes rapide)
Ajouter paste@bot.im à votre compte Gtalk et parler lui. Enfin, cela reste surtout un bot de test, réalisé avec Symfony 1.2 et Doctrine (un ORM comme propel)

Tags : , ,

Créer des applications Iphone

Mise à jour 29/07/09 : Cet article date d’un peu .. sa version raccourci et plus clair est disponible sur Débuter sur le développement iPhone ! Have Fun :p

Cet article a pour but de vous expliquer comment créer une application .
Afin d’éviter un abus de langage, nous différencions deux types d’applications potentiels :

•    Les applications web : ouvert via Safari et qui ne sont ni plus ni moins un site dédié au format de l’iphone.
•    Les applications embarqués : Application directement téléchargé sur le iphone store (gratuitement ou pas) pour lequel l’utilisateur doit donner son mot de passe pour l’installer.

Cet article traitera principalement du 2e type d’application.

Lire la Suite

Tags : , , ,

Validé un formulaire en Ajax avec Symfony 1.1

Dans ce billet nous allons voir comment utiliser Ajax pour valider champ par champ un formulaire constuit avec sfForm de 1.1.

Je prend pour acquis que vous ayez lu / que vous connaissez la validatation de formulaire « classique » offert par sfForm. Tout est expliqué et surtout .

En fait le souci avec les validateurs symfony 1.1 est qu’ils ne possèdent pas la méthode isValid() contraitement aux validateurs symfony 1.0. Du coup, quand on fait de l’ajax, nous sommes obligés de passer d’un type de validateur à un autre.

Cette exemple illuste le fait avec le validateur sfValidatorEmail (sf 1.1) et sfEmailValidator (sf 1.0). L’idée est de définir les paramêtres du validateur (les messages d’erreurs dans notre cas) qu’à un seul endroid afin de respecter le concept Dry (Don’t Repeat Yourself).

Voilà les étapes nécessaires pour mettre en place une validation de formulaire classique et « Ajaxé » :

  1. Vous créez vos widgets dans lib/form/MaClasseForm.class.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    class MaClasseForm extends BaseMaClassForm
    {
    	public function configure()
    	{
    		$this->setWidgets(array(
    		'id'         => new sfWidgetFormInputHidden(),
    		'FirstName' => new sfWidgetFormInput(),
    		'LastName'  => new sfWidgetFormInput(),
    		'Email'      => new sfWidgetFormInput(),
    		'password_repeat'      => new sfWidgetFormInput(),
    		'password'      => new sfWidgetFormInput()
    		));
     
                    // On peut modifier les labels si besoin est ...
    		$this->widgetSchema->setLabels(array(
    		'FirstName'    => 'Prenom',
    		'Email'   => 'addresse Email ',
    		'LastName' => 'Nom',
    		));
            }
    }
  2. Vous définissez vos validateurs dans lib/form/MaClasseForm.class.php à la suite de la méthode configure()
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
     
     $this->setValidators(array(
    'id'         => new sfValidatorPropelChoice(array('model' => 'Utilisateurs', 'column' => 'id', 'required' => false)),
    'FirstName' => new sfValidatorString(array('max_length' => 20, 'required' => false)),
    'LastName'  => new sfValidatorString(array('max_length' => 20, 'required' => false)),
    'password'      => new sfValidatorString(array('max_length' => 40, 'required' => false)),
    'password_repeat' => new sfValidatorString(array('max_length' => 40, 'required' => false)),
    'Email'      => new sfValidatorEmail(array('required' => true)),
    'Birthday'   => new sfValidatorDate(array('required' => false)),
    ));
     
    // J'en profite pour definir un nom formater des champs pour avoir $_POST['utilisateurs['email']] etc
    $this->widgetSchema->setNameFormat('utilisateurs[%s]');
  3. Normallement à ce stade vous pouvez utiliser la classe de formulaire dans votre fichier apps/MonApp/MonModule/actions/actions.class.php
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    public function executeMonAction() {
     
       $this->formInscription = new MaClasseForm();
       if ($this->request->isMethod('post'))
       {
          // récupère les champs du formulaire sous forme de tableau.
         $array_champ = $this->getRequest()->getParameter("utilisateurs");
         $this->formInscription->bind($array_champ);
         if ($this->formInscription->isValid())
    	{
           // Formulaire valide.
           }
    }
  4. Voilà la validation « classique » et faite. Et l’ajax dans tout ça ? On y vient ^^ Alors au lieu d’afficher le formulaire de manière classique (via le template adéquate apps/MonApp/MonModule/templates/MonActionSuccess.php)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    // Au lieu de
    echo $form;
     
    // On va rendre le template comme on le souhaite
    // Par souci de flemme je ne fait que le champ Email
    <table>
      <tr>
        <td><?php echo $form['Email ']->renderLabel() ?>:</td>
        <td><?php echo $form['Email '] ?></td>
       <td><span id="error_for_email ">
                    <?php if ($form['Email ']->hasError()): ?>
    		<ul class="error_list">
    		<?php foreach ($form['Email ']-<getError() as $error): ?>
    			<li class="error_for"><?php echo $error ?></li>
    			<?php endforeach; ?>
    		</ul>
    		<?php endif; ?> </span></td>
      </tr>
    </table>
  5. Et maintenant on va jouer avec l’ajax pour vérifier ce champ email lors de la saisie.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    /************** Ajax Time :) *****************/
    // Dans le template on met :
    <?php
    // Crée l'observateur pour le champ utilisateurs_email du formulaire.
    echo observe_field("utilisateurs_email",array(
    'update' => "error_for_email",
    'url' => "MonModule/VerifierEmail",
    'with' => "'email='+ value",
    ));
    ?>
  6. On rajoute l’action VerifierEmail() dans le fichier d’actions.
    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
    
     
    public function executeVerifierEmail()
    	{
    	 // Initialisation des variables internes
    	 $chaine_a_verifier = $this->getRequestParameter("email");
    	 $array_erreur = array();
     
    	 // Récupère le validateur d'email définit dans lib/form/MaClasseForm.class.php
    	 $form = new MaClasseForm();
    	 $validateur_form = $form->getValidatorSchema();
    	 $all_validateurs_field = $validateur_form->getFields();
    	 $email = $all_validateurs_field["email"];
     
    	 // Récupere le bon code d'erreur
    	 if($chaine_a_verifier == "")
    	 {
    	 	$array_erreur =	array('email_error' => $email->getMessage("required"));
    	 }
    	 else
    	 {
    	 	$array_erreur =	array('email_error' => $email->getMessage("invalid"));
    	 }
     
    	 // Crée un validateur d'email hérité de Symfony 1.0
    	 $validateur_email = new sfEmailValidator($this->getContext());
     
             // Un peu de Dry (Don't Repeat Yourself) afin d'éviter d'avoir des messages d'erreurs définit à deux endroits différents.
    	 $validateur_email->initialize($this->getContext(), $array_erreur  );
    	 // Dispatcheur vers le bon templates
    	 if($validateur_email->execute($chaine_a_verifier,$message_retour))
    	 {
    	 	$message_a_afficher = $this->getPartial("ajax_error",array("message"=>$message_retour,"reussi"=>true));
    	 }
    	 else
    	 {
    	 	$message_a_afficher = $this->getPartial("ajax_error",array("message"=>$message_retour,"reussi"=>false));
    	 }
     
    	 return $this->renderText($message_a_afficher);
    	}
  7. Donc en fait on met à jour le « span » error_for_email avec le résultat de l’appel de la méthode VerifierEmail(). J’ai utilisé un template partial car le but est de le réutiliser pour tous les appels en Ajax. Celui ci n’est pas bien compliqué
    1
    2
    3
    4
    
    <ul>
        <li class="<?php if($reussi) echo "accept_for"; else echo "error_for"; ?>">&amp;nbsp;<?php echo $message; ?>
        </li>
    </ul>
  8. Et voilà, le formulaire fonctionne classiquement et dispose de vérifications en Ajax aussi.

Nous venons de voir le validateur d’Email, mais tous fonctionnent sur le même principe. Voici la méthode pour utiliser le validateur de Sting qui diffère un peu.

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
   public function executeVerifierPseudo()
   {
     // Initialisation des variables internes
    $chaine_a_verifier = trim($this->getRequestParameter("pseudo"));
 
    // Récupère le validateur de pseudo
    $form = new MaClasseForm();
    $validateur_form = $form->getValidatorSchema();
    $all_validateurs_field = $validateur_form->getFields();
    $validateurs = $all_validateurs_field["FirstName"];
    $pseudo = $validateurs->getValidators();
    $pseudo = $pseudo[0];
 
    // Crée un validateur de String sf1.0
    $validateur_pseudo = new sfStringValidator($this->getContext());
    $validateur_pseudo->initialize($this->getContext(), array(
    'min' => $pseudo->getOption("min_length"),
    'min_error' => $pseudo->getMessage("min_length"),
    'max' =>$pseudo->getOption("max_length"),
    'max_error' => $pseudo->getMessage("max_length"),
    'required' => $pseudo->getMessage("required"),
    ));
    // Dispatcheur vers le bon templates
    if($validateur_pseudo->execute($chaine_a_verifier,$message_retour) &amp;&amp; $chaine_a_verifier != "")
    {
       $message_a_afficher = $this->getPartial("ajax_error",array("message"=>$message_retour,"reussi"=>$bool));
    }
    else
    {
     if($chaine_a_verifier == "") $test = $pseudo->getMessage("required");
 
     // Remplace les jokers des messages d'erreurs.
     $min = $pseudo->getOption("min_length");
     $max = $pseudo->getOption("max_length");
     $message_retour=    preg_replace("#%value%#",$chaine_a_verifier,$message_retour);
     $message_retour=    preg_replace("#%min_length%#",$min,$message_retour);
     $message_retour=    preg_replace("#%max_length%#",$max,$message_retour);
     $message_a_afficher = $this->getPartial("ajax_error",array("message"=>$message_retour,"reussi"=>false));
   }
 
   return $this->renderText($message_a_afficher);
}

Et voilà c’est fini :)

Tags : , , , ,

Qu’est ce qu’il faut pour commencer sur Android ?

Petit rappel sur (mais est ce bien la peine ?) :

Android est un système d’exploitation pour téléphone portable.

Crée par google et open-source il ouvre une voie vers les téléphones mobiles enfin personnalisables à souhait pour les geek que nous sommes :)

Bon, pour en savoir vraiment quelque chose, rien ne vaut un petit wikipedia. Pour l’instant aucun téléphone ne l’embarque mais c’est en cours d’arrivé ( Cf Techcrunch & cf Techcrund). Enfin là n’est pas mon discours.

Je me dit juste qu’après avoir vu cette vidéo prise sur Techcrunch (ouais je l’aime ce site ^^) vous voudriez peut être avoir les bases pour commencer.

Mise en bouche

Présentation d’android – via Techcrunch

Les bonnes adresses

Pour commencer à développer sur Android voici trois liens à conserver précieusement :

  1. Le site officiel, logique. Même si je trouve les tutoriels un peu long à lire et pénible, ça reste la référence :)
  2. L’ebook de Nicolas Gramlich pour commencer ses premières applications. J’en suis tombé amoureux ^^ c’est court mais précis. Parfait pour quelqu’un ayant des bases en développement, c’est le condensé le plus agréable à lire.
  3. Le forum Anddev : Rempli de tutoriaux et d’aides, c’est idéal pour s’instruire. En plus y a plein d’images dans les tutoriaux, wahouu :)

Vous remarquerez que tous ces liens sont en anglais. Et oui, en langue française y a bien quelques blogs/sites qui parlent de l’actualité d’Android, mais rien de bien sérieux pour les développeurs. Sans doute cela doit exister, mais je ne les ai jamais trouvé jusqu’à présent ..

J’allai oublier un lien, francais cette fois, bien utile pour commencer http://java.developpez.com/cours/ Et ouais, Android c’est du java traficoté ^^

Logiciels et SDK

Pas de miracle, on fait du Java, on est open-source et on va télécharger Eclipse et son plugin Android ^^

http://code.google.com/android/intro/installing.html

Et on tente de comprendre l’anglais ^^

Et ensuite ?

Bientôt des traductions de tutoriels existants (es ce bien utile ?), et des petites découvertes de code sur Android (j’espère en trouver ^^)

Tags : , , ,