Keep Calm and…

Posted On 3 juillet 2012

Filed under Non classé

Comments Dropped leave a response

Keep Calm and Click On zouboukouf.com

->  nouveau terrain de jeu des expérimentations 🙂

Zend Code Generator : une vrai pépite

Ce qui prend du temps quand on est développeur web, ce sont les taches répétitives, et elles n’apportent aucune nouvelle connaissance.

Pire, si ces taches sont espacées dans le temps, (création d’1 application tous les 6 mois / 1 an), on veut implémenter de nouvelles choses, plus innovantes, plus réfléchies que les fois précédentes. Et 3 ou 4 ans après, on n’a aucune base solide pour créer un nouveau projet sans repartir « from scratch ». On récupère quelques morceaux de codes par-ci, par-là, c’est assez chaotique.

Pour contrecarrer ce travail ennuyeux, pourquoi ne pas créer votre application « modèle » ?

Une application fonctionnelle, simple, de base.

Le but est de créer une application, basée ou non sur une base de données, avec toutes les composantes que d’habitude vous « copiez-collez » depuis vos anciens projets, oui, oui on le fait tous copier-coller, moi ? jamais ! ne niez pas…

Zend Code Generator permet de structurer vos fichiers, php certes, mais on peut aussi bien l’utiliser pour d’autres langages ou des fichiers de config par exemple

Il y a d’abord Zend_CodeGenerator_Php_File

$dbClassFile = new Zend_CodeGenerator_Php_File();
$dbClassFile->setFilename('/models/' . $name . 'DB.php');
$dbClassFile->setBody('le contenu de mon fichier php');
file_put_contents($dbClassFile->getFilename(), $dbClassFile->getBody());

On peut inclure dans la generation des require_once

$a_required[] = "' . APPLICATION_PATH . '../models/" . $name . "DB.php";
$controllerClassFile->setRequiredFiles($a_required);

je vous l’accorde c’est pas très beau quand on utilise des constantes pour les chemins parce qu’il génère quelque chose comme ça :

require_once '' . APPLICATION_PATH . '../models/AnimalDB.php';

On peut inclure une classe Zend_CodeGenerator_Php_Class

$controllerClassFile->setClass($controllerClass);

Zend_CodeGenerator_Php_Class permet de définir

  • son nom évidement
  • la classe dont elle hérite
  • les propriétés de votre objet
  • des méthodes
  • et les commentaires phpDoc qui vont avec
$db_class = new Zend_CodeGenerator_Php_Class();
$db_class->setName($name .'DbTable');
$db_class->setDocblock(new Zend_CodeGenerator_Php_Docblock(array(
 'shortDescription' => $name . ' db parser',
 'tags' => array($a_authorTag, $a_versionTag, $a_packageTag["modelParser"]))));

$db_class->setExtendedClass('Zend_Db_Table_Abstract');
$db_class->setProperty(array('name' => '_name',
 'visibility' => 'protected',
 'defaultValue' => $table,
 'docblock' => array('tags' => array(new Zend_CodeGenerator_Php_Docblock_Tag(array('name' => 'var', 'description' => 'string table name'))))));

Pour les méthodes, rien de bien compliqué, Zend_CodeGenerator_Php_Method a des méthodes setName, setBody et setDocBlock

$my_o_method->setBody('$TestTable = new TestDbTable(array(\'db\' => \'my_db\'));
 $Tests = $TestTable->fetchAll();
 echo "<pre>";
 print_r($Tests);
 echo "</pre>";'
);

Si vous arrivez à bien vous représenter ce que vous faites à chaque nouveau projet, vous pourrez gagner beaucoup de temps.

Malgré le fait qu’il ne soit pas très connu, il a été créé dans la v1.8, ce composant a un potentiel énorme.

Adopté !!

la doc officielle

Un four solaire pour lutter contre la déforestation

Posted On 2 mars 2010

Filed under Divers

Comments Dropped leave a response

Le bois est la principale source d’énergie dans les pays en voie de développement, la cuisson des aliments se fait majoritairement par ce biais-là.

Ramasser ce bois prend du temps, ce sont surtout les femmes et les jeunes filles à qui incombent cette tâche, et ces dernières ne vont donc pas à l’école.

Un four solaire coute relativement peu cher (environ 5€) et est facile à fabriquer, du carton recouvert de feuilles d’aluminium. les « marmites » sont peintes en noir pour absorber encore plus la chaleur du soleil. Cela prend un peu plus de temps, mais ne nécessite pas de surveillance accrue.

Dans le projet Tanzanien, l’aluminium est récupéré à partir de Tetra Pack recyclé.

Petit à petit, on peut faire quelque chose, selon le lieu, le contexte et les moyens 😉

Hallucinant ! Le site SFR.fr a des horaires d’ouverture

Posted On 9 avril 2009

Filed under 1

Comments Dropped leave a response

Veuillez repasser plus tard madame ! Cela me conforte un peu plus dans mon opinion envers les opérateurs mobiles en général.

Voulant changer de forfait pour un forfait moins cher (20 minutes au lieu d’une heure) je me suis rendue dans une boutique SFR, qui m’a gentiment dit qu’ils ne pouvaient pas faire cette opération en boutique. Pour payer mon cher, c’est pas ici 🙂 Faut téléphoner ou aller sur votre compte en ligne.

Sur le site, on ne me propose que des forfait supérieurs et plus chers bien entendu !

Tant qu’à faire, je regarde si je peux changer de mobile avec mes points fidélités, après tout cela ne fait que 7 longues années que je suis chez eux ! ma fidélité doit être récompensée, c’est leur pub qui dit ça : vous savez les petits cadeaux au dessus de la tête des abonnés.strive

Et ben non je peux pas, je dois revenir un autre jour preuve en image : je crois qu’ils nous prennent vraiment pour des pigeons

sfr_site_horaires

Yahoo Query language Api (YQL)

Posted On 7 décembre 2008

Filed under Tests
Étiquettes: , , , , ,

Comments Dropped leave a response

L’api du langage de requete yahoo est disponible, petit test rapide.

J’arrive sur une page où on me propose un bouton « try the console » et « read the documentation ». Jusque là tout va bien, pas de termes techniques, tout à l’air super simple 🙂

« Try the console », la page est super claire, on voit tout d’un seul coup d’oeil.

  • Un bloc pour la requête
  • Un bloc pour les résultats
  • Un bloc pour utiliser la requête sur votre site
  • Un bloc « accordéon » pour voir :
    • Des exemples de requêtes (c’est ce que je cherchais en 1er)
    • Les tables disponibles
    • Les requêtes exécutées (par moi) précédemment

Une requête est déjà exécutée « Show tables ».

Le résultat est affiché en xml par défaut.

Une petite erreur dans la requête : en plus d’avoir l’erreur dans le xml (assez clair) il y a un bloc qui s’affiche pour m’indiquer l’erreur et où elle se trouve (soulignée en rouge)

Je veux voir tous les membres de mybloglog :

select * from mybloglog.member
Cannot find required keys in where clause;   expecting required keys :(member_id)

ok, c’est un peu sécurisé, même avec un count, il me demande un member_id j’ai bien essayé plusieurs choses (1, 2, 456gdfg…) pas de resultats

le diagnostic étant

http-status-message="Not Found">http://api.mybloglog.com/v1/user/1?format=xml</url>
mouais, le lien est forbidden si on le tape directement dans le browser.

Quel temps va t-il faire aujourd’hui ?
select * from weather.forecast where location = ‘Avignon, France’

<title>Yahoo! Weather - Error</title>
<description>Yahoo! Weather Error</description>
<item>
<title>City not found</title>
<description>
Sorry, your location 'Avignon, France' was not found. Please try again. </description>
</item>

paris ? non plus…san francisco ? perdu

A part leurs exemples et flickR j’ai pas eu beaucoup de résultats 😦
La doc est vraiment très abordable, même pour ceux je pense qui ne connaissent pas le sql.

Si vous en avez besoin, ce doit être assez facile d’arriver à récupérer ce que vous voulez, après quelques tentatives sur la console.

Console

Documentation

CakePhp + Smarty + OpenFlashChart 2

Pour un nouveau projet je voulais une librairie de graphes, Chart, qui « dépote », qui en mette plein la vue. J’ai donc testé une librairie Open Flash Chart qui utilise Flash, et dont les data peuvent être envoyées par PHP.

J’ai choisi Open Flash Chart car c’est sous licence LGPL.

Pour l’implémentation, j’ai quand même un peu galéré. Déjà utiliser Smarty avec CakePhp, les puristes vous diront que c’est pas bien. Mais je code 2 fois plus vite avec mes vues Smarty vu que je connais bien ce moteur de template.

Les exemples d’implémentation de sur le site de John Glazebrook, sont pour une utilisation classique sans framework MVC.

Vous trouverez sur CakePhp un tutoriel, sur un helper construit pour la version 1 de Open Flash Chart

Utiliser Open Flash Chart 2 sur Cake php avec Smarty :

  • J’ai pris les fichiers qui sont dans le dossier version2/php-ofc-library

app\webroot -> déposer open-flash-chart.swf

app\webroot\js -> déposer json2.js et swfobject.js (je n’ai pas voulu m’embeter avec encore un sous-répertoire pour le json, donc j’ai enlevé le répertoire intermédiaire)

vendors (à la racine de votre dossier) -> déposer le répertoire entier php-ofc-library. Il doit être possible de le mettre aussi dans app\vendors selon si vous voulez l’utiliser pour plusieurs appli ou juste pour celle-là.

Pas la peine d’utiliser le helper fourni sur CakePhp.

  • Dans une des fonctions de votre controller
class UsersController extends AppController {

    var $name = 'Users';
    var $helpers = array('xxx', 'xxx', 'xxx');
    var $uses = array('xxx', 'xxx');

    function home()
    {

Vous pouvez faire votre requête ou remplir un tableau de data qui va alimenter votre graph. J’ai repris l’exemple fourni sur les tutoriaux mentionnés plus haut

App::import('Vendor','php-ofc-library/open-flash-chart');

$title = new title( date("D M d Y") );

$bar = new bar();
$bar->set_values( array(9,8,7,6,5,4,3,2,1) );

$chart = new open_flash_chart();
$chart->set_title( $title );
$chart->add_element( $bar );

Maintenant il faut passer nos data à notre template Smarty

$this->set('chartData', $chart->toPrettyString());
  • Dans notre vue

Le plus compliqué a été de trouver pourquoi il ne récupérait pas les scripts js et l’objet swf au bon endroit, apparemment il faut lui indiquer les chemins suivants :

{literal}
<script type="text/javascript" src="../js/json2.js"></script>
<script type="text/javascript" src="../js/swfobject.js"></script>
<script type="text/javascript">
swfobject.embedSWF("../open-flash-chart.swf", "my_chart", "350", "200", "9.0.0");
</script>

Ce n’est peut-être pas terrible mais ça marche.
Le problème étant que sans les 2 points, il croit que js est une fonction de notre controller. Sans les 2 points devant le swf, il ne se passe strictement rien à l’écran.

La suite :

<script type="text/javascript">

function ofc_ready()
{
    alert('ofc_ready');
}

function open_flash_chart_data()
{
    alert( 'reading data' );
    return JSON.stringify(data);
}

function findSWF(movieName) {
  if (navigator.appName.indexOf("Microsoft")!= -1) {
    return window[movieName];
  } else {
    return document[movieName];
  }
}

var data = {/literal}{$chartData}{literal};
</script>{/literal}

Ne pas oublier les balises smarty literal, pour qu’il n’essaie pas d’interpréter le code js. Si vous avez une erreur du style Unrecognized tag alert, ça vient de là !

J’ai d’abord commencer par essayer d’intégrer la version 1 avec le helper, mais croyant que ça ne marchait pas, j’ai testé la 2.

Je pense que le problème était exactement le même : les chemins d’accés aux scripts et surtout au swf.

Pour les scripts, regarder le code source vous verrez de suite où il va les chercher, pour le swf par contre, il n’affiche rien à l’écran.

Bon courage !

MC Yogi : Obama ’08

Posted On 20 octobre 2008

Filed under 1

Comments Dropped leave a response

Le clip est bien fait, la musique entraînante, et c’est pour la bonne cause :

maintenance page for music stuff : SoundUnWound (Amazon + IMDB)

Posted On 9 septembre 2008

Filed under Divers
Étiquettes: , ,

Comments Dropped leave a response

Le petit nouveau d’Amazon et d’IMDB a une chouette page de maintenance :

C’est un projet d’encyclopédie musicale collaborative.

La page 404 page n’est malheureusement pas aussi rigolote…

Je dessine une maquette plus vite que mon ombre…

Vous avez besoin de dessiner rapidement une maquette ?

Pas besoin que ce soit très élaboré, juste avoir les bons éléments aux bons endroits, pour avoir une idée claire de ce que pourrait donner la mise en page générale ?

Le design plus vrai que nature, avec photoshop ou autre, fait toujours discuter et débattre vos collègues ?

Balsamiq Mockups vous évite de perdre du temps.

Par défaut, les éléments sont en gris enfin noir 80%, c’est plus classe.

Les formes sont comme si elles étaient dessinées à la main, mais les lignes sont bien plus droites que sur votre cahier ou sur le paperboard 🙂

L’alignement des éléments est facile à gérer grâce aux petites règles qui s’affichent et attirent votre élément.

On peut changer la taille des éléments, la couleur (la palette est limitée), background/foreground, grouper, dégrouper, locker des éléments entre eux, ajouter des icones à certains éléments comme les boutons.

La version de démo (évidement c’est payant !) est vraiment faite pour découvrir : pas d’enregistrement, pas d’export png et une pop-up qui s’ouvre toutes les 5 minutes.

On peut export en xml, si quelqu’un sait dans quel logiciel, à part Basalmiq bien sûr, on peut importer ?

<mockup version="1.0" skin="sketch">

<controls>

<control controlID="4" controlTypeID="com.balsamiq.mockups::Button" x="408" y="35" w="130" h="-1" zOrder="2" locked="false" isInGroup="-1">

<controlProperties>

<text>Participer%20%21</text>

</controlProperties>

</control>

</controls>

</mockup>

J’ai testé sur 2 petites maquettes que j’avais crayonné sur un bloc-notes.

10 minutes pour dessiner ma page de visualisation d’un élément de ma bdd, avec un peu moins d’une dizaine de data/propriétes et 2 ou 3 actions possibes sur la page.

Il m’a manqué quand même une petite liste à puces dans la liste des formes possibles et un timeline/historique. J’ai du utiliser un tableau pour les puces et une progress-bar pour mon timeline

Le plus qui m’a donné envie de tester est l’affichage résultant.

Imaginez, vous voulez faire voir à votre collègue, une mise en page auquelle vous pensez, pour cette %***$ de page qu’il faut améliorer.

Vous faites un gribouilli sur une page de brouillon, vous en discutez, plein plein de questions, « et ça c’est quoi un bouton, un lien ? » une fois mis d’accord, pause café, optionnellement  demander l’accord au chef, hum, il va apprécier votre gribouilli 🙂 puis le réaliser, si jamais vous arrivez à relire votre gribouilli le lendemain, et là il y aura toujours quelque chose à déplacer ou à modifier.  loi de murphy oblige.

C’est là qu’intervient balsamiq, vos lignes seront droites, tout sera aligné, on ne se trompera pas de type d’élément, vos collègues et votre chef comprendront ce que vous voulez faire. Vous obtiendrez une mise en page plus propre et surement une « utilisabilité » meilleure. Et on ne vous blamera pas pour ce dégradé qui n’est pas exactement comme la maquette.

les liens :

screenshots : http://www.balsamiq.com/products/mockups/examples

essai en ligne : http://www.balsamiq.com/products/mockups

download : http://www.balsamiq.com/products/mockups/desktop

Redondance d’informations, optimiser la veille techno

Posted On 8 octobre 2007

Filed under Divers

Comments Dropped leave a response

De plus en plus, on voit sur certains blogs assez influents des articles parlant d’ articles, de buzz provenant de blogs d’autres auteurs : En vrac, les buzz que vous avez loupés,  le top hebdo fuzz…

A mon avis c’est une redondance d’informations inutile, si on utilise un agrégateur, c’est justement pour éviter ce genre de choses, or on se retrouve à lire une info sur un flux et 2 minutes plus tard lire presque la même chose sur un autre flux.

Alors comment faire pour partager ses trouvailles sans agacer le lecteur ? La première fois on se dit « ah cool, j’ai les mêmes sources d’infos que presse-citron » au bout de la 4ème on commence à se dire « ok d’accord mais tu ne m’apprends rien de plus, je perds mon temps. »

Si encore on avait le droit à un test plus complet du service ou une analyse plus complète de l’info !

Google reader propose 2 choses en plus de l’agregateur classique, en français depuis peu  :

footer-item-flux-google-reader

Si vous cliquez sur Activer le suivi/Add Star, l’item sera sauvegardé dans une Liste de Suivi/Starred List qui n’est pas publique.

Si vous cliquez sur  Partagez/Share, l’item sera sauvegardé dans une liste de partage/Sharred List qui est publique est à laquelle un flux est associé.

Pour conclure, plutot de reprendre une info sans en dire plus, je vous donne l’adresse du flux partagé de mon aggregateur, les articles sélectionnés sont soit rigolos (journal du geek 🙂 des nouveaux outils que j’aimerais bien tester un peu plus (comme le nouveau cms memht) des informations plus generalistes, mais toujours dans le même thème informatique-developpement-internet.

Page suivante »