FoxMaSk'Z h0m3 - Dev-Gamer World

mercredi, juillet 23 2008

NotePad++ 5.0.x proche de la perfection ?

Bonjour Mon Blog comment va ? Tiens voilà une news pour toi.
Tu n'es pas sans savoir que J'utilise notepad++ depuis quelques années, que j'ai "croisé" par le truchement de Scintilla le projet libre dont notepad++ est issu.
Hé bien avant la v 4.x, il n'y avait pas moyen d'ouvrir 2 fichiers pour les comparer, bien pratique quand on code énormément et qu'on dépose ces sources sur un gestionnaire de versions.
Donc voilà avec cette v 5.0.x le plugin Compare fait son entrée, ce qui fait de notepad++ avec le plugin Explorer en plus, un éditeur on ne peut plus complet.

Quoi nan ?
Mais Si, pisque j't'le dis !
Bon allez t'as raison il ne lui manque que la complétion des noms des fonctions du langage de programmation utilisées.
Mais à part cela ?
Bon je te laisse j'ai moulte lignes de code qui me chatouille les doigts
@+ Maurice.

lundi, juillet 7 2008

Lugo : La Greve du Sol !

Lugo nous gratifie d'un nouvelle bombe d'album !

Des morceaux de la vie de tous les jours... si vrai !

« L’univers scénique ressemble à leur musique : lunaire, décalé. Ce vaisseau spatial est aussi une façon de prendre au pied de la lettre le titre de leur nouvel album « La Grève du sol ». Et de tracer des fils narratifs entre les morceaux, qui oscillent entre la pop électro-électrique et les ballades acoustiques dont le groupe a le secret… »

Ouest France

Ce sur quoi je rajouterai que l'ambiance sur scène est des plus festif et donne vraiment envi !

Enfin, prochains passages à ne pas manquer

  • 25 juil. 2008 21:00 Festival Place aux artistes St Quay Portrieux, Bretagne
  • 31 juil. 2008 20:00 Concert Ile de Batz Ile de batz, Bretagne
  • 5 août 2008 21:00 Festival d’été Quiberon, Bretagne
  • 8 août 2008 21:00 Festival d’été Carnac, Bretagne
  • 13 août 2008 21:00 Festival d’été St Cast le Guildo, Bretagne
  • Nov/Dec 2008 : PARIS !

Si vous les croisez en Bretagne (vous ne le regretterez pas fois de foxmask), passez leur le bonjour de ma part !

dimanche, juin 29 2008

n00bd0r de Juin 2008

Le gagnant du mois a encore sévit sur Fluxbb.fr.

Ce dernier nous a gratifié d'un beau poste comme on en voit (hélas pour l'orthographe, trop souvent) sur tout forum :

Je demande a ce que le script (1) soit refais !
Cet dernière version ma apporter que des ennuis !
Tentavie de piratage... ect.

Voila

Amicalement,
Corentin

noobdor_juin_2008.jpg

(1) Fluxbb

vendredi, juin 27 2008

Saint Vincent de Paul 5 ans de répis ! (au minimum)

J'annonçais il y a 14mois que Saint Vincent de Paul fermait ses portes en 2009.

Hé bien il n'en sera rien avant 5ans.
5ans c'est la durée que va prendre les travaux pour construire les bâtiments nécessaire à l'accueil de tout le personnel de StVincent de Paul à ... Necker !

En effet c'est ce matin à la suite d'une visite, qu'à la fin de l'entretien j'ai demandé au médecin,
"mais vous nous dites rendez vous en 2009 mais StVincent ne ferme pas en 2009 justement ?"
la médecin "non pas avant 5ans" (pour les raisons évoquées ci dessus)

Parents : Respirez (ons) !!!!!

dimanche, juin 8 2008

CakePHP - Calendrier et les dates en timestamp

Bonsoir, voici un billet sur une de mes mésaventures avec CakePHP et le champ de formulaire type "date".

Pour un plugin Calendrier, j'ai besoin d'un sélecteur de dates, voici comme on l'obtient avec CakePHP :

echo $form->input('date',array('type'=>'date','label'=>false,'dateFormat'=>'DMY'));

ceci affichera donc 3 liste deroulantes "jour"-"mois"-"année".

Quand j'ajoute la donnée dans ma base, je recréé ma colonne date (dans ma methode "add") comme suit pour la transformer en timestamp :

$this->data ['Calendar'][ 'date' ] = mktime(0,0,0,$this->data['Calendar']['date']['month'].

$this->data['Calendar']['date']['day'],

$this->data['Calendar']['date']['year']);

Comme j'ai également besoin de modifier l'évènement de mon calendrier, je réutilise la même vue, et m'attends évidement à retrouver ma date (par exemple le 6 juin 2008). Mais Ô surprise, au lieu d'avoir la date voulue, j'obtiens une date du 1 janvier 2028...

Comment ce fait-ce ?

CakePHP nous fait un caprice ! Il ne "comprend" pas que ma colonne de ma table au format INTEGER contient un ENTIER et m'en fait une CHAINE ! (hic!)

Pour contourner cet avatar et l'aider à comprendre voici ce qu'il faut faire dans sa méthode edit :

public function edit ($id = null) {

[...]

if (empty($this->data)) {

$this->data = $this->Calendar->read(null, $id);

}

$this->data['Calendar']['date'] = (integer) $this->data['Calendar']['date'];

Comme on le voit, juste après le this->Calendar->read je force le typage du contenu de la valeur de ma array $this->data['Calendar']['date'] par (integer) $this->data['Calendar']['date']

et là ô miracle, le formulaire de modification de l'évènement affiche les 3 selecteurs jour/mois/année avec la date atendue

Ouf !!!!!!!

pour la petite histoire, "la faute" incombait à la ligne 1389 du helper form

extrait ligne 1385 - 1391 :

if (!empty($selected)) {

if (is_array($selected)) {

extract($selected);

} else {

if (is_int($selected)) {

$selected = strftime('%Y-%m-%d %H:%M:%S', $selected);

}

la condition if (is_int($selected)) n'est étrangement pas rencontrée avec sa colonne en timestamp tant qu'on ne lui force pas le typage comme je l'ai fait dans ma méthode edit...

Mais en bon renard que je suis, entêté et curieux, j'ai forcé l'obstacle ;)

CakePHP 1.2.0.7125 RC1

Bonjour à tous, la RC1 de CakePHP 1.2 vient de sortir du four

parmi les évolutions les plus importantes on notera :

  • renderElement est remplace par element (facile avec un bon editeur)
  • dans les controlleurs, si vous effectuez "render(..); exit;", la vue

ne sera pas rendue, remplacer le exit par "return;"

  • les conditions dans les queries : conditions array("field" => ">= value"), à remplacer par "array("field >=" => "value"), question de sécurité.
  • vérifier aussi dans les conditions l'usage du préfixe magique "-!",

de préférence sans mots-clef avant: array("field" => "-! LIKE MONTH(date)") a remplacer par array("field LIKE" => "-! MONTH(date)")

  • containable behavior remplace "bindable"

(merci à Francky06 pour le décryptage;)

l'annonce complète est ici in the Shakespear's language

dimanche, mai 18 2008

n00bd0r de Mai 2008

Des fois être admin de forum (Fluxbb) procure une certaine euphorie à la lecture de sujet comme celui-ci ;)

Bonjour,
je voulait utiliser FluxBB mais bon sa a pas l'air d'être au point...
J'explique, ce soir j'ai bannis ma soeur pour cause de flood ...
Et tout le forum y compris le Web' (moi) sont bannie !
Sa m'enerve !
Svp une solution sans rien reinstaller :)
Merci

ZendFrameWork - once upon a time ;)

Apres avoir joué avec CakePHP ; je me lance à refondre DaFunSpirit avec ZendFramework

Ainsi avec 2 framework PHP utilisant le paradigm MVC, j'aurai une vision claire des avantages / inconvénients de chacun ;)

Ainsi donc je rédigerai une suite de billets sur ZF au fur et à mesure de l'avancée de DFSS sous ZF tout comme je le fis pour PunCake avec CakePHP ;)

mercredi, mai 14 2008

Po po po dis donc

Un demi million de site web utilisant phpBB se sont fait hacker dans une attaque à grande échelle

According to Ferguson, over half a million legitimate Web sites have been hacked by today's mass-scale attack, only the latest in a string that goes back to at least January. All of the sites, he confirmed, are running "phpBB," an open-source message forum manager.

Comment dire ... phpBB Sux : CQFD !

PS : si vous ne connaissiez pas phpBB ; hé bien continuez :D, Sinon oublier vite ce logiciel de forum. et jettez un oeil sur une liste d'outils équivalents et faites votre choix ici

source : computerworld

vendredi, avril 18 2008

CakePHP - BehaviorHelper

CakePHP : recherche globale

Pour les besoins de son portail il est fort utile d'avoir des fonctionnalités transversales à tout le portail.

C'est le cas de la fonction de recherche, qui peut aller à la pêche aux actualités/articles/billets/bogues etc...

La solution serait d'avoir une grosse fonction php qui parcourt toutes les tables,
mais cela n'est bien évidement pas satisfaisant, car inmaintenable, pas portable, trop lourd...

Donc l'idée va consister à créer une fonction de recherche par plugin (un plugin "cakephp" est une "partie" de l'application globale).

Puis lorsque le visiteur saisira une phrase sur le moteur de recherche, nous déclencherons la fonction de recherche de chaque plugin.

Comment procéder ?

Chaque plugin possède son propre répertoire, exemple
- app/plugins/news
- app/plugins/articles
- app/plugins/blog

dans chacun d'eux nous créons un script _prepend.php contenant ceci :

pour le plugins news :

<?php
$this->addBehavior('publicSearchHTML', array('newsBehavior','searchNews'));

class newsBehavior
{
	public function searchNews()
	{
	    #appel de son modèle
		App::import('Model','news.News');
		$news = & new News();
		
		$rs = $news->getNews(); 		
		
		/*
		* Ici le code sur l'iteration sur le recordset pour afficher le resultat
		* en invoquant le Helper HtmlHelper() pour le rendu bien sûr.
		*/
		
	}

?>

on comprend ici qu'il faut donc etre muni d'une fonction getNews() dans le model news.

Mais, pour le moment le _prepend.php est "inerte", par inerte j'entends, qu'il n'est pas utilisable en l'etat.

Effectivement, il manque une classe pour exploiter nos "comportements" (les classes xxxBehavior)

Voici donc le Helper (oui car il s'agit d'afficher des données, donc un helper;) qui gère tout cela :

(extrait issue de PunCake)

<?php
class PcbehaviorHelper extends Helper {

    public $puncake_behaviors = array();
    
    
    public function beforeRender() {
    
        /*
        *
        * ici le code permettant de parcourir le répertoire plugins 
        *
        */
        $this->path = dirname(__FILE__) . '/../../plugins/';
		foreach ($this->path as $root)
		{
			if (!is_dir($root) || !is_readable($root))
				continue;
			
			if (substr($root,-1) != '/') 
				$root .= '/';
			
			if (($d = @dir($root)) === false)
				continue;
			
			while (($entry = $d->read()) !== false)
			{
				$full_entry = $root.'/'.$entry;
				
				if ($entry != '.' && $entry != '..' && is_dir($full_entry)
				&& file_exists($full_entry.'/_prepend.php')
                    )
				{
					require $full_entry.'/_prepend.php';
				}
			}
			$d->close();
		}

    }
    
    /*
    * la fonction d'ajout du behavior 
    * au tableau des behaviors (utilisé par chaque _prepend.php)
    */
	public function addBehavior($behavior,$func)
	{
		if (is_callable($func)) {
			$this->puncake_behaviors[$behavior][] = $func;						
		}
	}

    
    /*
    * Fonction de rappel de la classe et fonction à éxécuter
    */

	public function callBehavior($behavior)
	{
		if (!empty($this->puncake_behaviors[$behavior]))
		{
			$args = func_get_args();
			array_shift($args);
			
			$res = '';
			
			foreach ($this->puncake_behaviors[$behavior] as $f) {
				$res .= call_user_func_array($f,$args);
			}
			
			return $res;
		}
	}
}
?>

Ceci fait, dans la vue de son choix, un simple appel $pcbehavior->callBehavior('publicSearchHTML');

déclenchera l'appel de la méthode searchNews de tous les plugins disposant d'un fichier _prepend.php .

Voilà !

Ce Helper s'applique donc quelque soit le behavior qu'on veut coder.

Par exemple, qd je me connecte sur mon portail, je veux etre avertis si j'ai des news/articles à modérer, des billets reçus etc.. etc..
Tout ceci ce gère de la même maniere que ci dessus.

1) ajout d'une fonction newToValidate de plus à ma class newsBehavior
2) ajout du behavior à la pile via $this->addBehavior('toValidate',array('newsBehavior','newsToValidate'))
3) appel du behavior dans la vue de mon choix par un $pcbehavior->callBehavior('toValidate');

Happy Cooking !

- page 1 de 19