Un Electron Libre...

Aller au contenu | Aller au menu | Aller à la recherche

lundi 8 septembre 2008

En 2008, ça se fait encore...

Besoin : afficher les 8 dernières actualités et mettre en place un système de pagination pour accéder aux actualités

Réponse obtenue et livrée d'un développeur d'une SSII :

  • Récupération de toutes les news (via l'équivalent d'un joli SELECT *) dans un tableau en PHP
  • Parcours du tableau pour conter le nombre d'éléments du tableau obtenu précédemment et gérer ainsi la pagination
  • Récupération en base des 8 dernières news en vue de leur affichage (ce serait trop bête d'utiliser le tableau obtenu précédemment)
  • Pas d'utilisation du mécanisme de cache fourni par le CMS (eZ Publish) - donc à chaque rechargement de page, on recommence...

Quand il y a une 20aine d'actualités, coté temps d'affichage ça va encore - lorsqu'il y en a >1000, ça le fait tout de suite moins.

Réponse attendue d'un développeur sensible aux bonnes pratiques du web et conscient des problématiques de charges :

  • Utilisation de COUNT (ou plutôt de son équivalent dans le langage du CMS utilisé)
  • Récupération en base des 8 dernières actualités en vue de leur affichage
  • Mise en cache du résultat obtenu

C'est dans ces cas aussi que l'on souhaite une professionnalisation des métiers du web. Certains diront que la qualité se vend mal. C'est sur que si les clients ont déchanté face aux promesses de qualité faites par les SSII/Editeurs, ils vont avoir du mal à acheter une telle qualité annoncée. Le problème tient au fait pour les SSII de prouver à leurs clients que la qualité annoncée sera au rendez-vous et de former le cas échéant ces collaborateurs. Pour le bien de tous (développeur, SSII, client), il est évident que cette professionnalisation se fasse mais faut-il encore le vouloir et le financer... Dans ce cadre, on ne peut pas demander à un collaborateur de se former sur son temps libre ou chez un client...

jeudi 20 mars 2008

En Vrac

samedi 15 septembre 2007

Django et les fixtures

Sauvegarder les données saisies dans une instance sous la forme de fixture :

Pour sauver toutes les données de votre projet :

python manage.py dumpdata --indent=4 > initial_data.json

Note :

  • le --indent=4 permet que le fichier créé soit correctement indenté et plus facile à lire.
  • par défaut, c'est exporté au format json
  • en nommant votre fichier initial_data.* il sera chargé automatiquement par django lors d'un syncdb, reste ou sqlreset

Pour sauver les données d'une application nommée "monapp" :

python manage.py dumpdata --indent=4 monapp > initial_data.json

Attention, si vous voulez opérer un changement sur votre modèle, il faut faire le dump avant de faire des modifications, sinon cela ne marche pas.

Pour charger une fixture, il suffit de faire :

python manage.py loadata ma_fixture.json

Passer de sqlite à MySQL (ou autre) en ayant des caractères accentués :

Lors du passage de Sqlite à MySQL, j'ai eu le bug suivant avec les exports en json : tous mes caractères accentués étaient transformés en caractères spéciaux. Le seul moyen fut de passer par un export xml :

python manage.py dumpdata --format=xml --indent=4 monapp > initial_data.xml

dimanche 25 février 2007

MySQL 5 sous Debian (at least) : surcharger votre configuration.

Avec la mise à jour vers la version 5.0.32-7 de MySQL sous Debian "Etch", je viens de découvrir qu'une petite ligne s'était ajoutée en fin du fichier de configuration /etc/mysql/my.cnf, à savoir :

#
# * IMPORTANT: Additional settings that can override those from this file!
#
!includedir /etc/mysql/conf.d/

En ayant marre de reporter les réglages proposés par mon hébergeur pour la configuration de MySQL à chaque mise à jour de cette dernière, voilà de quoi me réjouir :-)

Donc, maintenant, on ne touche plus à /etc/mysql/my.cnf (sauf pour les options non surchargeables) mais on met les options dans un fichier présent dans /etc/mysql/conf.d/

Ex :

[mysqld]
table_cache             = 128
sort_buffer             = 512K
record_buffer           = 512K
myisam_sort_buffer_size = 16M

query_cache_type        = 1

Attention à bien préciser la section à laquelle se rapporte les variables que vous ajoutez (ici à mysqld )

Relancez MySQL et c'est bon :-)

(ne me demandez pas la justification du tuning de MySQL - je l'ai pris en l'état et n'ai pas cherché plus loin)