Catégorie : développement

Tout ce qui concerne le développement en général, que ce soit des choses générales, ou des choses bien précises. Cela va de la gestion de projet à la recherche du fonctionnement de pointeurs en C.

MySQL : solution à « Can’t find any matching row in the user table »

Voilà quel était mon problème, et j’espère vous aider en vous apportant une solution si vous avez ce problème :

j’ai fait un dump complet de toutes les bases de données mysql dans un gros fichier, via l’ordre mysqldump :

mysqldump -u root -pmonmotdepasse --all-databases > a_integrer.sql

Ensuite j’ai copié le fichier sur l’ordinateur destination, et j’ai ré-injecté le sql dans la base de données, ce qui a tout ré-intégré de manière transparente :

mysqldump -u root -pmonmotdepasse < a_integrer.sql

Le seul problème, c’est que, sur l’ordinateur destination, impossible de se connecter sur la base de données, alors que l’utilisateur avait bien été intégré dans la base. En me connectant à la base, j’ai voulu modifier le mot de passe, mais impossible. L’erreur était la suivante :

Can't find any matching row in the user table

Donc impossible de changer le mot de passe alors que l’utilisateur existe bien.

La solution qui a fonctionné est la suivante : supprimer puis recréer l’utilisateur avec les droits d’accès adéquats.

Faites la même chose :

  • un mysqldump total ;
  • ré-injection sur l’ordinateur destination ;
  • si problème avec les mots de passe : suppression à la main du compte mysql concerné, puis re-création avec les bons droits.

jQuery et changement de css / class / classname

Encore la petite astuce pratique qui vous évitera de chercher des heures :

Très souvent, on veut changer la propriété d’un div. C’est facile via la fonction jQuery

$('#mondiv').css('propriété', 'nouvelle valeur');

Mais si on veut applique carrément tout une classe ?

C’est très simple, c’est la fonction .toggleClass() :

$('#mondiv').toggleClass('nouvelle classe');

jQuery : différence entre visible et hidden

Je voulais tester si un élément est visible, ou non, en jQuery.

Après quelques recherches sur le net, on tombe souvent sur des exemples comme cela :

if ( $("#monid").is(':visible')) {
...
}

C’est une grossière erreur.

Voici l’explication, et le principe qu’il faut avoir en tête :

Lorsqu’on cache ou qu’on montre un élément avec jQuery ou jQueryUI, cela va presque toujours modifier la propriété display (display:none, display:block, etc).

La propriété visible est complètement différente, et est utilisée pour cacher un élément, mais en gardant la place qu’elle occupe.

Pour vérifier si quelque chose est « caché » (notez la subtilité avec la différence de « pas visible« ) il faut vérifier la propriété css display.

Exemple concret :

if ( $("#monid").css('display')!='none') {
...
}

Gimp et Python-fu script : vecteurs et strokes : exemple

J’ai eu énormément de mal à trouver un exemple de script python-fu qui fonctionne.

Après avoir réussi à automatiser certaines tâches grâce à Gimp, je voulais créer des vecteurs, et y appliquer la brosse en cours.

Voici l’exemple de code qui fonctionne :


  new_image = pdb.gimp_image_new( new_image_width, new_image_height, RGB )
  new_layer = pdb.gimp_layer_new(
    new_image, new_image.width, new_image.height,
    RGBA_IMAGE, _("Background"), 100, NORMAL_MODE)
  pdb.gimp_image_add_layer(new_image, new_layer, -1)
  pdb.gimp_drawable_fill(new_layer, fill_type )
  new_layer = gimp.Layer(
    new_image, _("New Layer"),
    new_image.width, new_image.height,
    RGBA_IMAGE, 100, NORMAL_MODE)
  pdb.gimp_image_add_layer(new_image, new_layer, -1)
  pdb.gimp_drawable_fill(new_layer, fill_type )

  new_vectors=pdb.gimp_vectors_new(new_image, 'Vectors!')
  t = int(round(step / 1.5))
  pdb.gimp_vectors_stroke_new_from_points(
    new_vectors,
    0, # 0 = Beziers Curve
    30,
    # {controle1} {centre} {controle2}
  [ x-(step-t), y, x-step, y, x-(step-t), y,
      x, y+(step-t), x, y+step, x, y+(step-t),
      x+(step-t), y, x+step, y, x+(step-t), y,
      x, y-(step-t), x, y-step, x, y-(step-t),
      x-(step-t), y, x-step, y, x-(step-t), y],
      False) # Closed = True

  pdb.gimp_image_add_vectors(new_image, new_vectors, 0)

  pdb.gimp_context_set_foreground( (255,255,255) )
  pdb.gimp_context_set_brush( "Circle (07)" )
  pdb.gimp_edit_stroke_vectors(new_layer, new_vectors)

  gimp.Display( new_image )

Maintenant avec cet exemple, si vous voulez faire des vecteurs et les dessiner avec la brosse en cours, ainsi qu’avec mon article sur l’automatisation de Gimp, vous devriez arriver à faire beaucoup de choses !

ExtJS 4 first look : le livre que j’ai révisé est sorti !

Voilà, on m’a demandé d’être relecteur technique (technical reviewer) du livre « Ext js 4 first look » que vous pouvez trouver ici :

http://www.packtpub.com/ext-js-4-first-look/book

Ce livre parle de ExtJS 4 et de toutes les (nouvelles) possibilités qu’offre le nouveau framework de Sencha, ansi que des comparaisons avec les anciennes versions, pour ceux qui connaissent déjà ExtJS.

Je suis au début :

Livre Ext js 4 first look

C’est un livre très pédagogique, qui vous servira bien si vous débutez.
Vous aurez certainement quelques marque page, notamment en ce qui concerne le MVC, qui n’est pas facile à appréhender (selon moi). J’avais d’ailleurs fait un howto ici.

Mon conseil serait : achetez-le, il est très bien.

Notez cependant qu’il faut un bon niveau JavaScript pour comprendre le livre.

Chrome et perte de session : comment faire ?

J’ai rencontré un problème incroyable : tout fonctionnait correctement sur tous les navigateurs : Internet Explorer, Firefox, et Safari. Mais pas sur Chrome ! Une fois n’est pas coutume, ce n’était pas Internet Explorer qui était le problème majeur !

Le problème est simple à expliquer : lorsqu’on s’inscrit sur http://papdevis.fr/ ou qu’on fait une recherche, j’enregistre le choix dans la session du côté du serveur. Rien dans les cookies.

  • Quand on clique sur « valider le devis », j’enregistre tout dans des variables de session côté serveur, et j’affiche un résumé de l’offre/proposition de devis.
  • De là, quand on clique sur « valider », hop, j’envoie simplement une variable "valider=1"

Seul problème : sur Chrome, le devis ne se validait pas parce que l’identifiant de session était réinitialisé ! Incroyable.

Grâce à ce lien, ma vie a changé : session-data-lost-in-chrome-only.

En fait, il fallait mettre un favicon, sinon Chrome continue à le chercher en boucle, et s’il ne le trouve pas, réinitialise la session.

Le genre d’erreur impossible à trouver (à moins d’avoir de la chance), parce qu’on n’arrive pas à imagine que le problème puisse venir du navigateur !

J’espère que mon article a évité à certains de se faire des cheveux blancs…

Pap devis : mon site est sorti !

Enfin !

Mon site est sorti !

Sur ce site tout est gratuit, il n’y a aucune publicité. Rien.

http://www.papdevis.fr/

Le principe du site est simple : vous êtes un particulier, vous voulez qu’on vous contacte pour un devis, par exemple, baby sitter. Inscrivez vous, faites une « demande de devis ».

Les professionnels qui sont sur le site reviendront vers vous.

Tout est gratuit, il n’y a aucune publicité. Rien.

Côté technique, je laisse les professionnels de l’informatique regarder et dire ce qu’ils pensent du site à la fois côté esthétique mais aussi côté technique (c’est un des sites les plus rapides… au monde).

N’hésitez pas à laisser des suggestions, elles seront bienvenues !

ExtJS : exemple d’un développement

Voici une petite capture d’image d’un Intranet que j’ai développé.

Temps de développement : trois jours à temps plein.

Tout fonctionne parfaitement, en AJAX, synchronisation, etc.

Tout ça pour dire que ExtJS est vraiment une librairie formidable dans ce type de cadre :

Image d'exemple de développement d'un intranet en ExtJS

Astuce jQuery : accepter un clic une fois, une seule fois, pas de double clic

A lieu de faire

$('#mon_element').on('click', function() {
  mafonction();
} );

c’est pas « on » c’est « one » :

$('#mon_element').one('click', function() {
  mafonction();
} );

En fait une fois qu’on a cliqué sur l’élément en question, jQuery supprime l’évènement avec la fonction unbind().

Serveur Apache et mod_rewrite : mémo / astuces / hints / tips

Voici mes notes de règles de ré-écriture. Principalement des expressions régulières dont j’ai souvent besoin et que je n’ai pas en tête :

Problème :
Apache ajoute automatiquement des slashes / si c’est un répertoire.
Solution :
DirectorySlash Off
Risques de sécurite si ça n’est pas bien géré.

Problème :
Chercher une variable dans les paramètres _GET, y compris en plein milieu (les solutions en général ne sont valides que si la variable est au début dans le _GET)
Solution :
RewriteCond %{QUERY_STRING} (^|&)nomvariable=valeur(&|$)

Problème :
Prendre en compte toute une séquence de caractères sauf le slash
Solution :
RewriteRule ^/([^/]+)/?$ page.php?page=$1 [L]
ou encore prendre tout sauf le slash et le point :
RewriteRule ^/([^/\.]+)/?$ page.php?page=$1 [L]