Un Electron Libre...

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

samedi 16 août 2008

Vrac de rentrée

Django 1.0 Alpha 2 puis Beta 1 sont sorties, au programme :

  • (alpha 2) Intégration de l'application de système d'information géographique GeoDjango
  • (alpha 2) Extensibilité des types Fichiers (FileField) et Images (ImageField) pour permettre une manipulation plus souple de ces types d'éléments
  • (alpha 2) Compatibilité avec Jython (qui permet de faire fonctionner du code python dans une application Java pour faire simple)
  • (beta 1) Les relations génériques sont maintenant supportées dans l'interface d'admin et dans les formulaires
  • (beta 1) Amélioration de la flexibilité de l'interface d'administration pour tout ce qui est antérieur ou postérieur à la sauvegarde d'un élément (cf doc)
  • (beta 1) La distinction entre un INSERT et un UPDATE au niveau de la méthode save() est améliorée (comprendre, on peut la gérer soit même)
  • (beta 1) Le middleware du cache a été éclaté en 3 - CacheMiddleWare continue à exister en tant que tel et est constuit sur la base de deux nouvelles classes (une pour créer le cache, l'autre pour le lire) (cf doc)
  • (beta 1) Les fonctionnalités obsolètes et maintenues jusqu'alors sont supprimées (il faut donc renommer vos django.newforms en django.forms par ex).

Pour ceux qui veulent avoir un aperçu des progrès réalisés par Django en deux ans, ils peuvent lire JeffCroft.com: Top ten things that suck about Django, revisited.

Pour rester dans Python, Smile se pose la question Faut-il avoir peur de Python, ça m'a rappelé ce billet sur l'adoption (ou pas) des nouvelles techo / langages ayant le vent en poupe. Serais-je un tantinet médium ? ;-)

Pour sortir un peu de python & django, un petit point sur la compatibilité des sites avec les navigateurs avec une série d'astuces utiles. Dans la même veine, un billet pour rendre vos newsletter en html lisibles sous vos webmails & clients mails.

Un petit état des lieux sur eZ Publish 4.0 et ses bugs - ça me promet une rentrée épique ça :-(

Prochain billet : revue de lecture sur Practical django projects de James Bennet ; il me reste les deux derniers chapitres à finir...

Conventions de codage (si tant est que j'en ai...)

Quand j'ai vu cette chaine sur les conventions de codage se diffuser sur le web avant l'été (ici ou encore ), je me disais "enfin une qui va me passer à coté, je peux dormir tranquille", ne me considérant pas comme un développeur (ou alors un du dimanche ;-) ) et n'étant pas non plus développeur de formation... Et bien non, Nicolas Hoizey a décidé de me refiler cette chaine.

Pour les projets réalisés dans un cadre professionnel, pour tout ce qui a été en html/css/php et autres boucles SPIP, j'ai par le passé tenté de bêtement copier ce que faisaient mes petits camarades. Cela se justifiait principalement par le fait que j'intervenais ponctuellement sur le code et ne souhaitait pas les perturber plus que nécessaire.

Pour les projets réalisés dans un cadre professionnel et dont je suis à l'origine ou pour mes projets perso, je n'ai pas de règle précise, je vise surtout une logique de lisibilté.

Cela donnera par ex pour un script bash dont l'objectif est de packager des fichiers par ex :

#
## Get relevant information for the packaging
#
 
# Do we need to send file on the front server ?
... some code ...
 
# Do we need to send file on the database server ?
... some code ...
 
#
## Let's build the package
#
 
# Package files for front server
... some code ...
 
# Package files for database server
... some code ...

Je prends souvent ce schéma pour tout ce qui a trait à l'administration système et pour les CSS (en adaptant les caractères de commentaires bien sur...).

Pour continuer sur les CSS, mon ordre de fabrication de mon fichier va être le suivant :

  • Eléments globaux / génériques
  • Section des plus "grandes" vers les plus "petites" (body > left > sidebar)
  • Au sein de chaque section, en premier lieux les éléments de positionnement puis ceux de mise en forme (pour reprendre une logique du plus grand au plus petit)

L'idée étant de regrouper le code en des sous-ensemble logiques.

Cela pourrait donner qqc comme :

/********************************
*  Elements généraux/generiques
********************************/
 
body {
}
 
h1 {
}
 
a {
}
 
/********************************
* Zone gauche
********************************/
 
#left {
}
 
/* Menu gauche */
 
#left #menu {
}
 
#left #menu a{
}

Par contre, là où j'ai toujours eu un souci avec PHP par ex, c'est sur la convention à suivre sur la gestion des accolades (qui en plus suivant l'IDE, l'interpréation peut changer) :

Ex :

if ($toto == "toto")
    {
    ... some code ...
    }

ou

if ($toto == "toto")
{
    ... some code ...
}

ou :

if ($toto == "toto") {
    ... some code ...
    }

ou :

if ($toto == "toto") {
    ... some code ...
}

Ou surement encore plein d'autres choses faisant que mon code au final se trouvait mal indenté (ou pas toujours de la même façon, ne parvenant pas à décider de ce qui était le plus lisible), surtout si les choses avaient tendance à s'imbriquer.

Je pense d'ailleurs que c'est une des raisons pour lesquelles j'aime python. L'indentation que l'on doit respecter permet de donner une bonne lisibilité du code. En plus, la charte de bonne conduite est clairement définie, même si je ne la suis pas encore dans son intégralité...

"""
Profile
 
This object is used to provide some common information regarding the profile of a user.
"""
 
class Profile(models.Model):
    CIVILITY_CHOICES = (
         ('single', _('Single')),
         ('taken', _('Taken')),
    )
    who = models.ForeignKey(User, unique=True, verbose_name=_('Person'),)
    photo = models.ImageField(height_field="80", width_field="80", upload_to="photos", blank=True)
    street = models.CharField(_('Address 1'), max_length=100)
    street_bis = models.CharField(_('Address 2'), max_length=100, blank=True)
    zipcode = models.IntegerField(_('Zip code'), max_length=5)
    city = models.CharField(_('City'), max_length=100)
    country = models.CharField(_('Country'), max_length=100)
    phone = models.CharField(_('Phone'), max_length=20)
    mobile = models.CharField(_('Mobile'), max_length=20, blank=True)
    civility = models.CharField(_('Status'), max_length=20, choices=CIVILITY_CHOICES)
    birthdate = models.DateField(_('Birth date'))
    children = models.IntegerField(_('Children'), blank=True, null=True)
 
    def __unicode__(self):
        return self.who.get_full_name()
 
    class Admin:
        list_display = ('who',)
        list_filter = ['who',]
        search_fields = ['who',]
 
    class Meta:
        verbose_name = _('Civil state')
        verbose_name_plural = _('Civil states')

Pour le débat indentation vs espace, j'avoue avoir préféré les espaces. Etant feinéant, je profitais aussi de la fonction de nombreux IDE qui transforment la tabulation en 4 espaces (ce qui permettait de continuer à utiliser la touche tab pour indenter son code...)

En tous cas, si je devais donner une conclusion à cet essai, que pour adopter une convention de codage, il faut :

  • Regarder si une convention n'est pas définie au niveau du language, si oui, alors l'adopter.
  • Regarder si une convention n'est pas définie au niveau du programme que vous utilisez, si oui, alors l'adopter (et si elle entre en conflit avec celle du langue, tant pis pour le langage, il est plus logique d'avoir un code cohérent)
  • Si aucune des deux n'est définie, voir pour trouver une convention qui vous va bien à vous et le cas échéant à vos coéquipiers (à ce titre, mieux vaut en discuter avant le début du code qu'après, ça évitera de vous marcher dessus ensuite...)
  • Adopter une terminologie anglaise (penser que votre code et commentaires peuvent être lus/utilisés par un prestataire indien - que feriez vous si vous deviez reprendre un code dont les commentaires sont en chinois par ex ?)

samedi 25 août 2007

Notes de retour de vacances

  • Archlinux a mis à jour ses iso sous une version 2007.08. On ne peut pas vraiment parler de mise à jour ou de nouvelle version dans la mesure où un pacman -Syu met son système à jour vers les dernières versions dites stables. Cela correspond plus à un "snapshot" des paquets permettant à un nouvel arrivant sur Arch de commencer avec les dernières versions à jour ;-)
  • Niko revient en forme de vacances en nous présentant Flex
  • David pulie un article intéressant sur sur le rythme vertical en design CSS. De quoi améliorer l'ergonomie (ou pas) de vos blogs.
  • Nouvelle version de JQuery, à savoir la 1.1.4 (voir l'annonce). Nouvelles fonctionnalités, des correctifs et amélioration des performances sont au programme. On notera surtout un plugin permettant d'assurer la compatibilité ascendante (vu que des changements importants en vue de la version 1.2 cassent certains mécanismes des versions précédentes).
  • Plein de choses sur django, je vous laisse consulter mes marks avec le tag django, la liste étant trop longue.
  • Le protocole Jabber ne fait pas que de la messagerie instantannée contrairement à ce que beaucoup croient. Etonnant dès lors de voir les possibilités et surtout que pas/peu de solutions se basent sur Jabber/XMPP pour des solutions collaboratives (un Pownce-like et Jabber pourraient faire de jolis intranet par ex). A lire "Quand jabber ne sert pas qu'à la causette" et "Jabber is more than instant messaging".
  • Django fonctionne sur l'iphone mais aussi sur l'openmoko ;-)
  • Jungledisk, l'outil qui permet de sauvegarder aisément ses données sur son compte Amazon S3 n'est plus gratuit et coute 20$. Les versions beta ne pourront plus fonctionner à partir de début septembre

Sinon pour des notes plutôt orientées vacances :

  • La 206 était déjà bien bruyante sur autoroute (à 130/140 ; ~ 4000 tr/min), avec des barres et un coffre de toit, c'est encore pire ! (sans parler de la prise au vent...)
  • A l'inverse, prendre la mercedes 320 CE de bô Papa pour un aller retour en normandie afin de récupérer le chat, ça se fait bien :-D
  • Faut vraiment que je lise le manuel de mon appareil photo, je rate toutes mes photos en intérieur (genre dans une église)
  • "Animer" (ajouter des titres, des petits effets, etc) une vidéo, c'est beacoup de temps pour de piètres résultats (sans parler que Kino sous Ubuntu Feisty est sévèrement buggué)
  • Plus loin de soi l'ordinateur est, meilleurs les vacances sont...
  • Skype c'est plus fort que Live Messenger :) ; pour la petite histoire, la webcam avec les pilotes génériques de vista permettait de faire une conversation vidéo sous live messenger. Après installation des pilotes de la webcam, plus aucun son n'était échangé. Il fallait donc démarrer une conversation audio puis afficher les webcam des participants pour avoir l'équivalent d'une conversation vidéo. Pour simplifier le processus, j'ai donc migré tout le monde sous skype (dommage que la version linux ne supporte pas la visioconf, parce que sinon, ça marche vachement bien !)
  • On a eu du bol, on a eu la normandie et besançon sous le soleil :-) ; tout le monde ne peut pas en dire autant...

Edit 1 sur Jungledisk :-/

jeudi 24 mai 2007

En Vrac

  • Spip est sorti en version 1.9.2b - il s'agit de corrections de bugs.
  • David explique comment passer ses billets de dotclear à son blog Django (et en gérant les redirections) - à mettre dans ses favoris pour toute personne qui aurait pour projet de faire un projet similaire...
  • Pour ceux qui connaissant le système de présentation S5, voici un clone : DomSlides et voici un comparatif S5 vs DOMSlides (Via David)
  • Powertop, de quoi controller votre consommation d'énergie sous Linux - à suivre de près (requiert un noyau 2.6.21 et supérieur...)
  • Red Hat vient de sortir une police libre, appelée Libération, qui est de la même taille que les polices MS Windows. De quoi avoir un rendu commun de vos documents tant sous linux que sous windows... Voir l'explication
  • David, encore lui (à se demander s'il travaille parfois...), nous fait un article intéressant pour produire des CSS de qualité...
  • O'Reilly vient de sortir sa collection focus, des petits documents disponibles en ligne uniquement et au format PDF sur des sujets divers et variés liés au web (administration, développement, etc). Pas encore testé, mais cela m'a l'air pas mal...
  • Pour ceux qui s'intéressent à l'évaluation des solutions Open Source, voici la grille de maturité et Business Readingness Rating en plus de l'existant QSOS.
  • L'environnement de bureau KDE est sortie en version 3.5.7 avec un gros travail sur la partie "PIM" (Personnal Information Management), ie tout ce qui concerne le mail, les carnets d'adresses, etc. Plein d'autres corrections et améliorations dans Kpdf, Kopete, Kdevelopp, etc.

Edit 1 : ajout de KDE 3.5.7