Should we continue to use Django ?

For some time, I ask myself a question : Should I continue, yes or no, to use Django? The question seems a little bit weird, but is it really?

I built a website (intranet) for a client with Django 1.3 with a MySQL database. The begining was built upon Django 1.2 and naturally, I switched to the 1.3 version without asking me a single question.

Keywords Django Evolution Production Reflexion

Read more »

Burn Out

Chacun le sait, les développeurs ont une très nette tendance à se laisser happer par leur travail/passion. Cependant, la pratique longue de la programmation devant un ordinateur fait que notre esprit est toujours sous tension et un jour ou l’autre, c’est le "neirvouze brèque donne" comme on dit de nos jours.


Nervous breakdown by toutdego

Keywords burn-out la vie travail

Read more »

Blog changing, URL rewrite

I was seeking some informations on the Internet, as every days, as you do it every days, and then, the shock ! In the first place... Me... or rather one of the blog entry. Hower, the URL was not the good one. Before my URLs was:  http://www.regisblog.fr/[blog|page]/article/[slug de l'article]/ and now, due to Dotcleår, they are: http://www.regisblog.fr/post/[old-url]/ . If nothing is done, the visitor will fall on a 404 page.

404.png

The 404 is an old french car

Keywords Apache Rewrite Transformation URL URL

Read more »

How to accelerate your Django web site up to 60 times

From time to time, I do some Wordpress . Not because I'm a pure Wordpress fan but I have some cient whose love Wordpress. I have to admii that the CMS administration is clear and well writen and that why it's the first blog engine of the market.

I tried to optimize a website which rendered each page at 18 request per second. I install the WP Super Cache plugin which transform each Wordpress computation result into HTML on hard drive.  The result : 2500 request per second. Ouch !

Today, I asked to myself if it's possible to do the same thing with my blog. The Django cache frameword is a lot more sophiscated than Wordpress one. More complexification means slower.

So I wanted to make this blog faster. Once the cache activated : 195 requests per second.

Keywords Cache Django Middleware

Read more »

Game of Life with OpenMP

Believe it or not, I never programmed a Game of Live. I know, it's learned at the computer programmers school, but I never studied at the computeur programmers shool.

So, for my own pleasure, I wrote a Game of Live in C. Or course, I have so used with interpreted or managed languages with garbage collector, that it was a little bit hard. Especially with pointers.

I gave myself some constraint like doing it the simpliest possible with absolutly no global variable. Old School.

Keywords C plus plus Jeux de la vie OpenMP

Read more »

Small update for the translation system

Recently, I added multi language capacity to YaBLOG. The first draft was based on the HTTP_ACCEPT_LANGUAGE browser information.It worked great but how a search engine know that there’s more than on language. How do it know that a post is written in english and in french for example.

So I added the capacity to display all registred languages.

To know if a language is selected or not, I added the key ?lang=LANG  to the URL and I wrote a template processor to transform each link of a page to add this key. For example, the link http://www.regisblog.fr/ will become http://www.regisblog.fr/?lang=en if you click on the english flag.

 

Keywords Update

Read more »

Ubuntu 12.10 update crash because of ATI drivers

Yestesday, a little update for the Ubuntu 12.10. I didn't reboot the system immediatly and this morning, Bang! Nothing works. GNOME is unable to display anything without crashing.

After a moment, because I didn't understand the problem origin, I drop an eye to the system log with dmsg and everything is clear now. I noticed a call to OpenGL which made the crash.

OK! Think! Think! Think!

Keywords AMD ATI Catalyst Radeon Ubuntu

Read more »

MVC pattern in javascript without third part libraries

Most of common MVC libraries are for dummies.When I say dummies I mean "not-so-good-programmers". Backbone.js is a good library,  JavascriptMVC is a good library., all others MVC libraries are goods, but not for your project.

I often struggle against a library because it don't do what I want to do in the way I want to do it.

That's why I developped a MVC strategy without third part library, because I embrase the old Excel team philosophy : "Kill all dependencies".

Keywords Javascript MVC

Read more »

Un pas de plus vers la perfection

Bon d'accord, le titre est très présemptueux....

Je viens de faire une grosse mise à jour sur le moteur de blog YaBLOG qui est écrit avec Django.

Au menu :

  • Le support du multi-linguisme (mettez votre navigateur en langue anglaise pour voir)
  • Le support des plugins
  • L'ajout de multiples pages.
  • Debuggage multiples

Notez qu'au niveau du design, j'ai totalement supprimé le module "Mobile" pour faire place à du Responsive Design, c'est plus cohérent.

 

Keywords

Read more »

Étendre un objet Python sans le dériver

Alors d'une longue (trèèèèèèèèès longue) séance d'écriture de test, j'ai eu besoin d'étendre l'objet TestSuite. Je voulais ajouter assertTrueOrFalse car j'avais besoin de tester le type de variable plutôt que le résultat, et plutot que de faire une recherche remplacement, je n'ai pas réfléchi, j'ai simplement écrit

from django.test import TestSuite # inclu par Django
# Puis
TestSuite.assertTrueOrFalse = lambda self,value: value == True or value == False

Keywords

Read more »

Forcer le chargement de vos scripts après chaque changement avec Django

De plus en plus, le développement de site web se repose sur javascript et de moins en moins sur le serveur. Le serveur devenant un fournisseur de données plus ou moins formaté (notamment en utilisant JSON).  C'est le cas pour la version mobile de ce site.

Le chargement des scripts devient de plus en plus critique. Mais pour les scripts, vous avez un ennemi le cache. Que ce soit le cache serveur ou le cache du navigateur.

Bien sûr, vous avez fait comme moi et respecter à la lettre les recommendations Google ou Yahoo! en regroupant tous vos scripts en un seul (perso, j'ai deux fichiers, un qui s'appelle libs.js qui contient toutes les libs et un autre qui s'appelle appli.js pour mon appli).

Keywords Modification Production Recharchement Scripts Server

Read more »

Tester une application Django

Je n'ai pas fait d'études informatiques.

Quand j'ai commencé la micro-informatique (déjà le terme...) en 1983, il n'y avait pas de flière dans l'Education Nationale pour ça. Il fallait faire des mathématiques ou prendre une flière ingénieur. Tout ce que je sais, c'est moi qui l'ai appris par moi-même.  La plupart des techniques que nous utilisons n'existait pas. MySQL naîtra 12 ans plus tard, Python, mon langage de prédilection n'apparut que 6 ans plus tard.

À cette époque, la programmation ressemblait plus à de l'artisanat et programmer en assembleur faisait partie de la règle alors que maintenant, c'est l'exception. 

Comme je n'ai jamais fait d'études d'informatiques, je ne pouvais donc pas connaître les techniques industrielles du métier de développeur. Et l'une d'entre-elles se nomme : "Test"

En bon hacker que je suis, les tests étaient pour moi des techniques principalement destinées à rassurer le client et les personnes qui ne comprennent pas le métier. Je me disais qu'eux avaient besoin d'une belle liste de tests marquée :

Procédure 1... OK
Procédure 2... OK
etc.

Keywords

Read more »

MySQL et Fedora 18

Voilà, c'est fait, j'ai installé la dernière Fedora (18) sur mon ordi, et comme je fais toujours des "fresh-install" je sauvegarde tout et je réinstalle.

Pour l'instant rien à dire et je ferais une critique plus importante sur cette Fedora plus tard.

Lors de l'installation, j'installe aussi MySQL dont je me sers pour mes développement Web. Et là ! Bardaf ! C'est l'embardée !

Le serveur ne veut pas démarrer sans vraiement plus d'informations. Comme j'avais galéré sur la version 17 pour la même install, hop hop hop, je regarde directe ce qu'il se passe dans /var/lib/mysql et là, je m'apperçoit que les répertoires mysql sont avec l'utilisateur root

[regis@regis-hp ~]$ ll /var/lib/mysql
total 28684
-rw-rw----. 1 mysql mysql 18874368 18 déc.  12:49 ibdata1
-rw-rw----. 1 mysql mysql  5242880 18 déc.  12:52 ib_logfile0
-rw-rw----. 1 mysql mysql  5242880 18 déc.  12:49 ib_logfile1
drwx------. 2 root  root      4096 18 déc.  12:49 mysql
drwx------. 2 root  root      4096 18 déc.  12:49 performance_schema
drwx------. 2 root  root      4096 18 déc.  12:49 test

Aucun problème. Un simple sudo chown -R mysql:mysql /var/lib/mysql/* résout l'intégralité des problèmes.

Bon je passe à la suite alors.

Keywords

Read more »

Nouveau design du blog

J'avais depuis quelque temps dans l'idée de faire une grosse mise à jour dans l'apparence du blog.

Au départ, je voulais utiliser Bootstrap de Twitter mais cette librarie a tellement de succès que j'en viens presque à la détester tant on la voit systématiquement partout.  Puis je suis tombé sur World Of Gnome, qui utilise bootstrap mais que je trouve plus sympa en terme de design. Un peu comme la timeline de Facebook.

Après mure réflexion (3 secondes) je me suis dit : Banco !

Je suis assez content du résultat.

Autres nouveautés, j'utilise maintenant Disqus qui est un système de commentaires pour les gens normaux. J'en avais clairement marre de filtrer des commentaires de personnes qui me demandaient des trucs.... bizarre.

C'est pas fini, mais j'aime bien.

Keywords

Read more »

Générer un mot de passe complexe avec Python

Trouver un mot de passe complexe n'est pas facile. J'y suis souvent confronté. Bien sûr je pourrais installer un petit programme pour cela mais comme je suis un pythoneux, j'ai tendance à utiliser le shell python :

import random
import string
Password_Length = 8
# 26 lettres majuscules + 26 lettres minuscules + 10 chiffres [0..9] = 62
letters = string.printable[:62]
password = ''
for ununsed_count in range(Password_Length):
password += letters[random.randint(0, len(letters) - 1)]
print "Votre mot de passe : %s" % password

Aussi simple qu'efficace pour créer un mot de passe très compliqué. Reste un problème... Juste rien... la mémoire humaine  smiley

 

Keywords

Read more »