• Author:
  • Published: Sep 30th, 2006
  • Comments: None

Comment se retrouver à l’autre bout du monde sans trop savoir comment…

globe_map1Voici en quelque sorte une petite description de mes expériences outre-Europe pour ceux qui restent à Lausanne et pour ceux qui ne restent pas. Il n’est jamais aussi intéressant de connaître du monde à travers des récits de quelqu’un d’autre, et encore moins de quelqu’un qui n’a aucune expérience du voyage, mais mieux vaut ça que rien!  

Vous me connaissez tous, alors je vais vous éviter la description inutile du pourquoi du comment. Partons directement de Londres. Après une brève (et douloureuse, pour ceux qui me comprennent ;-) pause au Luxembourg, je partis le sourire aux lèvres et le bagage au dos vers Miami. Pour ceux qui ne sont jamais allé à Gringoland, Miami est le pays de rêve pour nous les espagnols. Quand ont dit que l’espagnol est une langue officielle, ce n’est pas une blague! Tout le monde le parle, et même ils répondent plus aisément en espagnol qu’en anglais! Ce qui ne les à pas empêché de nous faire sortir de l’aéroport pour mieux nous faire rentrer après. La douane Yankee est une des plus lourdes du monde. On vous demande TOUT! Voulez-vous assassiner le président, avez vous des bombes avec vous, êtes vous un terroriste…

Après quelques mésaventures, je réussi quand même à décoller vers San Jose, ou je pus enfin arriver au petit hôtel dans lequel je m’hébergea. Une petite maison rose et bleue dans lesquelles les chambres ont des lits doubles d’un mètre huitante et les douches n’ont que de l’eau froide. Du moins c’est ce que je pensa en prenant ma douche avec une installation électrique juste devant moi à l’intérieur de la douche! Les ticos (un tico est quelqu’un du Costa Rica) ont une méthode très à eux d’économiser de l’eau. Simplement, il n’y en a pas. Et quand il y a, il ne faut pas trop ouvrir la douche. En effet, plus on ouvre le robinet, moins l’eau est chaude!

Costa Rica est un des pays les plus développés d’Amérique Centrale. Non seulement ils ont  une des économies les plus fortes de la région (voir du continent d’Amérique centrale et du sud) mais en plus ils jouissent d’un des climats politiques les plus stables et, chose curieuse et qui devrait plaire aux plus suisses d’entre vous, ils n’ont pas d’armée! Soit dit en passant, leur sélection nationale de football (passion sans limites!) s’est qualifié, au grand orgueil national, pour la coupe du monde!

San Jose est une des villes les plus moches que j’ai jamais vu. Je ne la conseille d’ailleurs à personne! Peu de choses à voir et pas des masses rassurante la nuit. Bon, d’accord, ce n’est pas aussi mauvais que ça, et il y a quand même des belles choses à voir… mais c’est fait en une journée au maximum!! Heureusement, Costa Rica à d’autres atouts. Je pense principalement à ses plages et à sa taille. En effet, le pays est tellement petit qu’on peut le traverser en moins d’une journée en bus! Ainsi, on peut se baigner une journée dans le pacifique et le jour suivant dans la mer du Caraïbe. Mais il y a aussi ses réserves naturelles, ses volcans et une variété impressionnante de microclimats qui se suivent les uns les autres tout au long du pays!

Mais comment visiter ce pays? Mais en bus bien sûr! Les routes du pays sont contre toute attente bonnes! Toutes goudronnées, et quoique souvent pas très lisses, elles permettent aux ticos de voyager en bus, la façon la plus habituelle de le faire. Le réseau est d’ailleurs extrêmement efficace et on est sûr de pouvoir arriver n’importe ou dans le pays pour moins de 10$ et  heures de voyage. Il faut savoir à ce propos que les ticos sont d’excellents conducteurs! Ils ne dépassent jamais les 60kph autorisés en route (90 en autoroute quand il y en a et 40 voir 30 en ville!) et les seuls à conduire comme des fous sont les taxis et les autobus.

Mais passons plus tôt aux choses intéressantes… la plage! Une des choses qui surprend le plus est le soleil. Pauvre de celui qui n’a pas pensé à apporter une protection de 20 au moins! Malgré toutes mes précautions j’ai réussi à me brûler en moins d’une demie heure! Mis à part ça, ce sont des plages sans prétention mais très agréables et avec des courants forts et des vagues ainsi qu’une eau très chaude! Adieu les frissons en entrant, la température est la même que pour un bassin pour enfant! Autre attrait de ces magnifiques plages: les vagues! En effet, Costa Rica est un des paradis des surfeurs. Mais comme tout paradis, il a son revers de la médaille: Dus à la force des courants, quelques 20 personnes meurent chaque années par plage importante. Comptez, cela fait vite beaucoup!

Les plages du Caraïbe, par contre, ont un charme spécial. Elles m’ont réellement dépaysé! Il y a des plantations de bananes partout, et les maisons sont de couleurs criardes: rouges, vertes, jaunes… De plus la population locale est beaucoup plus noire que dans le reste du pays. On se croirait en Jamaïque! Des parcs naturels couvrent d’ailleurs le pays, et on en trouve près des plages aussi. On a pu voir des coraux, des lézards partout, des singes à tête blanche, et différents types de poissons et oiseaux, plus bizarres les uns que les autres! On nous à même signalé un requin dans les parages, qu’une des touristes avait eu la chance de croiser.

Mais il n’y a pas que des animaux, il y a aussi plein de touristes qui surfent, avec le commerce alternatif que cela implique! En effet, la province de Limon est une zone spécialement chaude et humide, et la marijuana est une culture courante de toujours. De plus, ce type de consommation est relativement courante et bien acceptée parmi la police.

Mais parlons de choses plus intéressantes. Vous me connaissez tous, je suis incapable d’aller quelque part sans manger! Le plat national est le « casado », qui est du riz avec des haricots rouges et accompagné d’un type quelconque de viande. On peut aussi l’accompagner de bananes frites, de fromage ou tout ce qui vous passe par la tête. Pour le petit déjeuner, on peut goutter le « gallo pinto » qui est tout simplement du riz avec des haricots rouges et des ½ oeufs, fromage et du jambon. Autre possibilité est de goutter aux oeufs avec une purée… de haricots rouges! Comme vous l’avez compris, la gastronomie tico n’est pas connue pour sa diversité. Heureusement, ils se rattrapent par la variété de fruits qu’ils ont! Mangues, papayes, bananes et autres non identifiables.

Par contre, le café est une des richesses nationales. Ils font un des cafés les plus réputés d’Amérique!! Ce qui fait leur réputation est la culture en hauteur, le sol extrêmement riche en minéraux dû aux volcans nombreux dans la région,  et une culture biologique (les restes de la fabrication du café est recyclée et utilisée comme engrais, ce qui permet aux plantes de vivre 100 ans (contre 30 dans une culture traditionnelle) et qui change le goût de façon surprenante!

Pendant ce voyage, j’ai eu le plaisir de passer une nuit aux USA, a LA. Je n’ai pas réellement eu le temps ni
l’occasion de vraiment connaître le pays, mais j’ai quand même eu le temps de visiter Venice Beach. Ce n’est probablement pas l’image la plus fidèle des États Unis, mais elle représente assez bien l’idée que beaucoup de européens se font. C’est, encore une fois, comme dans les films! Des étendues de plage pleines de jeunes jouant au volley, des siliconées faisant du vélo ou du patin à roulette en petite tenue, des stands tout au long de la plage qui vendent des encens, des arts divinatoires, des massages de tous les coins du monde, des hamacs, colliers, t-shirts, toute une collection de magasins de tatouage et pipes à eau… des fast-foods à chaque coin de rue et des artistes ambulants. C’était sympa, et de quoi passer une après midi agréable!

Je partis ensuite pour la Nouvelle Zélande, à laquelle j’arriva à 6h du mat. Première impression, c’est une très jolie ville. Je partis visiter Auckland la journée avec deux amis que j’avais rencontré dans l’aéroport. On monta à la SkyTower, de laquelle on a une magnifique vue sur la ville. C’est la plus grande tour de l’hémisphère sur!! Un peu plus grande que la Tour Eiffel, on distingue parfaitement la baie, les différents ports de la ville et les collines des environs. Auckland est une ville de marins. Plusieurs America Cup ont eu escale dans ces lieux, ce qui a apporté des quantités assez énormes d’argent. Ils ont profité pour refaire la ville, la nettoyer, refaire l’aéroport et améliorer les services. Et ils ont très bien réussi!! Rien n’est plus agréable que de flâner dans les rues replètes d’asiatiques (il y a une immigration asiatique extrêmement importante), et de prendre une bière dans un des pubs locaux.  NZ est connue pour ses sports extrêmes, et ses agneaux. Mais ils sont très fiers de leur bière et de leur vin. Le vin je ne l’ai pas goûté, mais la bière est excellente! Blanche, normale, brune, il y a pour tous les goûts et toutes les couleurs! Et on trouve souvent des petites bières artisanales faites en petite quantités dans un village qui sont une merveille!

NZ est composée de deux îles principales, celle du nord et celle du sud (logique…). 2/3 de la population est concentrée dans 1/3 du territoire (l’île du nord), mais la plus part des agneaux se trouve dans le sud, et on trouve pas mal de vaches au nord. Finalement le pays ressemble un peu à la suisse! Le pays est très vert, plein de montagnes et collines. On trouve tout dans NZ, il y a des activités pour tous les goûts et toutes les saisons. Su sous-marinisme, du ski, canoë, sports d’eau de terre et de ciel… tout! Quand il fait chaud au nord, le sud est parfait pour voyager, et quand il fait froid au sud, on monte vers le chaud.

Le jour suivant on partit vers le nord de l’île. On s’arrêta à Paihia, petite ville qui rassemble la plus grande concentration de sports aquatiques de l’île!! Pour les français: Le bateau de Greenpeace, le Rainbow Warrior se trouve dans les environs de cette ville, et il est possible de le visiter! Bien sûr, ils l’ont transporté à priori, celui-ci ayant été maladroitement sabordé par les services « secrets » français entraînant la mort d’un journaliste de Paihia.

Je décida de faire un tour avec les dauphins. Le temps de s’aventurer dans la mer que des dizaines de dauphins tournaient autour du bateau! C’est un spectacle assez impressionnant de les voir d’aussi près! Ils sont beaucoup plus grands de ce que m’attendais! On put s’allonger sur le devant du bateau, ce qui nous permis de les voir à moins de un mètre! On pouvait presque allonger le bras! D’ailleurs la mer était forte et on finit trempés jusqu’aux os! On essaya de nage avec eux (snif, ma première plongée dans l’hémisphère sud!!) mais ce ne fut pas possible.

La déception de ne pas pouvoir  nager avec les dauphins fût vite  rattrapée par le voyage à l’extrême nord de l’île. La se trouve le cap de Reinga. Les Maoris croient que l’âme de leurs morts repose pendant quelques jours dans cette terre sacrée avant de partir dans l’autre monde. Mais ce qui fait la beauté du lieu est la mer. En effet, les deux océans, le pacifique et la mer de tazmanie. L’une est de couleur bleu obscure et l’autre d’un vert émeraude. Les deux se fondent dans ce cap dans un nuage d’écume. Ce genre de paysage on ne le trouve pas en Europe!!  On passa par la Doubtless Beach ou le capitaine Cook chercha en vain un point d’eau en 1769, par Parengarenga Harbour ou on trouve un des sables les plus fins du monde (plusieurs fabricants de verre viennent ici s’approvisionner!!) et les immenses dunes de sable du nord. On s’arrêta quelque instants pour profiter du paysage… et faire du bodyboard sur les dunes! Pour ceux qui n’ont jamais entendu parler, le principe est simple. On monte dans la plus grande dune avec un bodyboard, on prend de l’élan et on se lance dans la pente! Vitesse garantie! Le plus amusant étai d’éviter les autobus qui arrivaient… car on sait comment démarrer, mais on ne sais jamais comment s’arrêter!!

On passa par la 90 Miles Beach. On l’appelle comme ça parce que le zozo qui l’explora mit trois jours pour la parcourir, et que comme il marchait à 30 miles par jour… laissons le calcul aux matheux, car de toute façon il estima mal sa vitesse. La plage ne fait en effet que 90 Km! Elle est immense et tellement grande que on l’utilise comme route! On voit passer des camions, autobus, voitures…

Parlons de Maoi. C’était un petit garçon maori plein de vie et qui rêvait d’aventure. Un jour il dit à son frère qu’il allait pêcher le plus grand poisson du monde! Bien sûr celui-ci en bon grand frêre qu’il était, ne put que se foutre de sa gueule. Malgré tout Maoi prit sa barque et partit le jour suivant à marée haute. Il mit sa canne à l’eau et attendit. Plusieurs jours passèrent sans qu’aucun poisson ne mordit. Malgré tout, au bout du 4 jour, il sentit tirer sur la ligne! Plusieurs heures dura le combat contre le poisson, grand comme on n’avait jamais vu! Maoi résulta vainqueur (c’est notre héros!) mais ne put mettre le poisson dans sa barque. Il attacha alors la ligne à sa barque et se mit à ramer et ramer! L’histoire veut que l’île du sud soit la barque de Maoi. L’île du nord, le poisson qui erre toujours dans l’eau, et la petite île qui se situe tout au sud l’ancre de la barque. Une énorme roche en forme de U inversée sur la plage des 90 milles serait l’oeil de l’hameçon toujours dans la bouche du poisson!

Après cette virée dans le nord, je décida de partir dans le sud. Le voyage me fit passer par les caves de Waitomo. Celles-ci ont de spécial qu’elles sont replètes de vers! Beurgh! Me direz vous! Que neni! Ce sont des lucioles qui couvrent les murs! Une rivière sous-terraine traverse ces caves, et dans l’obscurité on se croirait dans un ciel étoilé! On voit parfaitement rien que par la lumière de ces larves! On a vraiment l’impression de se trouver dans le Seigneur des Anneaux!

L’arriv
ée à Rotorua fut… odorante! C’est une ville qui se situe dans l’axe de rencontre de 3 plaques continentales, ce qui crée quelques problèmes de volcans et tremblements de terre, mais aussi une superbe zone géo-thermale! Des eaux riches en soufre et chaudes jaillissent de la terre à plusieurs endroits, souvent à plus de 80°C. Bien sûr, qui dit soufre dit une odeur pour le moins désagréable. Heureusement on s’y fait assez vite et on garde surtout en mémoire ses bains!

J’eus l’occasion d’assister à un hangi. C’est une fête typiquement maori et une façon traditionnelle de cuisine. Le hangi était une célébration à l’occasion d’une paix ou de tout événement important! C’est l’occasion de chanter, danser et s’amuser autour d’un feu. La cuisine traditionnelle consiste en un trou dans le sol dans lequel on fait un feu et ou on place des pierres volcaniques jusqu’à ce qu’elles deviennent blanches par la chaleur. On place alors les aliments dans des paniers qu’on place au dessus des pierres et on enterre le tout avec du sable. On revient 3 ou 4 heures après et le tout est cuit! Il garde d’ailleurs une petite saveur de fumée bien agréable!

On put visiter aussi des parcs naturels dans lesquels des piscines d’eau chaudes étaient remplies par des geysers, le parc étant dans une brume constante et les pierres et eau étant de toutes les couleurs, jaune, orange, vert et noir, toutes ces couleurs étant naturelles! C’était impressionnant…

On arriva ensuite à Taupo. C’est une ville qui se situe à coté du lac de Taupo (logique…) qui est le plus grand de l’île! Il est connue entre autres pour la possibilité de faire du canoë (on vient d’aussi loin que le Japon pour s’entraîner dans cet endroit mythique, les championnats du monde se sont déroulé ici) et pour être la capitale du saut en parachute! En effet, non seulement l’endroit est magnifique, mais en plus c’est l’endroit dans lequel un saut en tandem est le moins cher du monde! Mais on ne néglige pas sur la sécurité. Les kiwis prennent très à coeur la sécurité, et non seulement pour une question de réglementation, mais parce c’est une manière de faire les choses qui est intégrée à leur culture.  Tout ça pour dire que malgré mes deux jours dans la région, les sauts furent annulés pour cause de pluie et mauvais temps… malgré tout, c’était une jolie petite ville dans laquelle il faisait beau se balader en absence de vent.

Le voyage se termina dans le petit village de Turangi, ou je passa uniquement quelques heures, sans réellement perdre grande chose!! A part quelques stations d’essence, il n’y avait rien dans le village!

Le bus de nuit m’emmena à Auckland, ou j’arriva sans trop avoir dormi mais avec une idée qui me trottait dans la tête. Dans Turangi on m’avait parlé d’un club de parachutisme. Ne pouvant pas résister à la sensation, je les appela, et me prépara au saut en tandem. L’aéroport (enfin…) se situait à 1h de Auckland et était composé d’une piste de terre. Les avions (3 en tout dont un en réparation) devaient passer un pont pour arriver à la piste, et les champs se perdaient de vue dans les environs. Mais on ne fait pas un aussi long chemin pour rien! Je monta dans le petit Cesna qui nous fit grimper à 12000 pieds (un peu plus de 4000m), l’instructeur me fixa à lui, je me balança les pieds dans le vide, et on sauta! Dans les 2 premiers secondes, on se sent tomber! Mais très vite on arrive à la vitesse de croisière (200 km/h). On a alors l’impression de planer, de voler, et on voit les nuages au-dessous de soi avec tout le paysage qui s’étend à des kilomètres! Quand on traverse les nuages, c’est comme traverser un fantôme, on sent un froid glacial. Et quand le parachute s’ouvre, on remercie le moniteur pour avoir bien ajusté les sangles! En effet, rien de pire qu’une single mal placée pour gâcher un saut et perdre tout espoir de progéniture! Malgré tout, il reste encore 5000 pieds à planer. C’est fous tout ce qu’on peut faire avec un parachute! (enfin, un parapente pour les puristes… ;-) Rien de plus amusant que de prendre l’avion après et de se dire qu’il n’y a pas si longtemps on se lançait depuis ces mêmes hauteurs!
      
Il faut dire que j’eus de la chance de pouvoir prendre l’avion… en effet, le visa n’avait pas été mis sur la base de données et je me retrouvais donc avec billet mais sans visa! Heureusement, après bien des négociation et un peu de patience, je réussis à avoir un visa de travail de 3 mois le temps d’avoir le « vrais »… Je décolla ainsi vers l’Australie!

Mais ça, c’est une autre histoire!!

  • Author:
  • Published: Sep 27th, 2006
  • Comments: 2

About the utility of a common repository of models in Django

database

In the Django mailing-list archive there has been at several occasions a thread about the creation of a public repository. Now, after several tries, it seems that this might be done in not too long. It is a good thing.

But what about models? Django is mainly database driven. Yes, you can run it without a database. You can actually use it to produce pdf, or txt files. But its main objective is to create dynamic HTML. And this dynamicity comes from the database. And the hearth of the database is the model. Get the model wrong, and the rest will be wrong. Eventually, we always come back to the sources.

Indeed, the more I play with Django and the more I look around in other’s
people sources, the more I realize the importance of the models. It is,
actually, the first part I look at in an application.

Of course, they can be modified depending of the needs and corrected. But it is, at least for me, a tedious work. Then, why do not get it right the first time? Why not create, in addition to an application repository, a model repository?

This would have two main benefits:

  1. Someone has already make the work for you. Thus, commonly often models (blogs, tags, contacts,…) would be already all programed for you, with all those useful functions alreday coded.
  2. It might give ideas about fields that will be needed or that will make coding easier.

Of course, models would be as detailed as possible, as it is easier to simplify than to add. And they should be well described, with each attribute and function defined and explained. But once the system done, how much work saved? How many hours freed?

  • Author:
  • Published: Sep 15th, 2006
  • Comments: None

Le marriage de Richard Behmer et Anne Poulingue

septiembre_06_059Richard a été un de mes grands amis dans mes temps de jeunesse (14 à 18). Ensuite aussi, bien sûr, mais malheureusement on n’a pas eu l’occasion de se voir autant qu’on aurait voulu. On a eu donc l’opportunité de partager maintes bêtises, aventures et histoires.

Il y en a une parmi moultes qui me paraît décrire le caractère le plus rebelle (devrais-je dire le moins allemand? ;-) de notre ami.

Donc voici Richard qui se baladait de son air joyeux dans la cour de recréation pendant la pause, ses deux béquilles sous le bras.  Je ne me rappelle plus s’il s’était fait mal au genoux ou cassé un os, mais ne laissons pas ce détail gâcher notre histoire!

Toutes les recréations étant par définition trop courtes, on faisait toujours tout notre possible pour les allonger un maximum, celle-ci n’étant pas une exception. Bien sûr les surveillants de l’école s’affairaient à la tâche de nous envoyer en cours le plus rapidement possible!

Il y avait de tout parmi les surveillants. Des sympas, des moins sympas: Mustafa, la Sorcière,… mais parmi eux, un se détachait du lot. Cet être vil avait été, disait la rumeur, expulsé d’une des pires écoles belges pour avoir frappé un élève et avait atterri au Luxembourg. Il était, en effet, un des pires personnages qu’on pouvait trouver à l’école. Systématiquement désagréable, ne prenant plaisir que dans les punissements et la misère d’autrui, il état hait de façon unanime par élèves, mais tout autant craint sans limites. Je parle, pour ceux qui l’ont connu, de Monsieur Nordinger, aussi connu comme Monsieur Retenue.

Revenons à notre pauvre richard qui, pris d’une fatigue due à l’usage excessif des béquilles, se reposait dans les escaliers. Monsieur Retenue est soudain apparu, lâchant sans répit railleries et mauvaise humeur sur les élèves à sa portée. Voyant dans un pauvre infirme sa cible idéale, il lança la phrase fatidique: “Et toi, là bas! T’as pas des moteurs dans tes béquilles? Allez, on bouge! Plus vite que ça!”

Quelle ne fût sa surprise quand Richard, faisant preuve d’un courage certain (ou d’une inconscience évidente!) commença à lui faire preuve de son indignation, l’appelant de tous les noms, et faisant bon usage de la puissance de sa voix! Il faut dire que, parmi les élèves encore dans les entourages, aucun ne rata la scène!

Bien sûr, devant une telle audace, Monsieur Nordinger emmena Richard devant le conseiller d’éducation, un ancien policier adepte du contre-interrogatoire et de la discipline, tout prêt à montrer a ce petit malappris qu’il ne fallait pas provoquer l’autorité.

Le reste est entré dans l’histoire. Richard, tout épris de sa nouvelle liberté d’expression, ne donna pas le temps de s’exprimer à Monsieur Nordinger ni au surpris conseiller! Il profita de l’occasion pour vider son sac, se plaigner de l’attitude odieuse de ce Monsieur et faire preuve de sa négation à mettre un quelconque moyen de motorisation à ses béquilles! “Mais oui, Monsieur, car si vous n’êtes pas d’accord, et ben je vais vous dénoncer et forcer votre démission! Et faites attention, car si vous allez trop loin, j’appelle ma mère, et alors ça va chauffer, vous entendez? ça va chauffer! Et vous savez quoi? je vais l’appeler quand même! Une honte, Monsieur, je vous dit! Une honte!!”

Personne n’a jamais pu prouver cet échange de mots mais, tel l’épée de Vercingétorix, les derniers mots du César ou le fameux Noeud Gordien, il est passé dans la légende! Depuis ce jours, Monsieur Nordinger ne s’est plus approché de cet invincible Atilla qui n’a pas hésité à défendre avec une ardeur et une agressivité sans limites ce qu’il considérait sien avant tout: Ses béquilles!

Quelle est la morale de l’histoire? Et ben que Richard, tu as parfois une grande gueule, mais c’est pour ça qu’on t’aime!

  • Author:
  • Published: Sep 14th, 2006
  • Comments: None

Django Comments framework

I am writing this mainly for personal use and future reference, so
please excuse any lack of order or clarity. I will do my best to avoid
those.

The Comments framework is probably one of the least documented parts of
Django, but one with evident utility. It is made of two subparts, the
FreeComments and Comments part. For the first you can find good
references here and here.
But nothing for the Comment part.

I’ve decided to try to understand the framework by
reading the code and looking at the Lost-Theories code.

There seems to be three concepts in the Comments framework:

  • The karma concept, largely used at slashdot,
    where each comment can be given or taken out points of karma. Once a
    comment is under a certain treshold, it is not displayed anymore. Update: I actually got the concept of karma wrong. Slashdot gives karma to his users, while django gives karma to the comments themselves.
  • Each comment allows a User to rate up to 8 different characteristics.
    This is the meaning of the eight ratingI = models.PositiveSmallIntegerField(_(‘rating #I’), blank=True, null=True) you find on the Comment model.
    That way, a comment of a book could rate the beauty, the style, how interesting the book is,…
  • Each Comment can be flagged once by each user. This could be used to highlight interesting
    comments, offensive comments,…

Besides that, there seems to be automatic ways of creation and deletion of comments, flagging, voting,…

The Karma functions:

There are views that will automagically change the karma of each comment. Those are located in django/contrib/comments/views/karma.py and will use the urls.py in django/contrib/comments/urls/comments.py.

It seems that you simply have to define the comments/karma_vote_accepted.html template. In the context of this template you find the following variables:

  • comment: The comments.comments being rated.

In order to add/take out karma points you will have to add karma/vote/(?P<comment_id>\d+)/(?P<vote>up|down)/
links to the comments. In the
comments object there’s a get_karma_total() that will allow you to
display the total karma.

The Rating functions:

Everybody love to rate. Books, recipes, songs… Django Comments allows us to rate up to 8 different characteristics.

Those
characteristics are not defined anywhere. They are part of the Comment
object. They can be accessed from the working model as follows (example
from Lost-Theories, Episode model in lost-episodes):

 def get_rating1(self):
        from django.contrib.contenttypes.models import ContentType
        from django.contrib.comments.models import Comment
        ctype = ContentType.objects.get(name='episode')
        comments = Comment.objects.filter(content_type=ctype.id, object_id=self.id)
        rating_list = []
        rating_total = 0
        for comment in comments:
            if comment.rating1:
                if comment.valid_rating:
                    rating_list.append(comment.rating1)
                    rating_total += comment.rating1
        if rating_total != 0:
            avg = rating_total / len(rating_list)
            return avg
        else:
            return 0

    def get_num_rating1(self):
        from django.contrib.contenttypes.models import ContentType
        from django.contrib.comments.models import Comment
        ctype = ContentType.objects.get(name='episode')
        comments = Comment.objects.filter(content_type=ctype.id, object_id=self.id)
        rating_list = []
        rating_total = 0
        for comment in comments:
            if comment.rating1:
                if comment.valid_rating:
                    rating_list.append(comment.rating1)
                    rating_total += comment.rating1
        num_ratings = len(rating_list)
        return num_ratings

In order to use this feature in the templates, the following lines are included:

{% comment_form for lost_episodes.episode episode.id with ratings_optional scale:1-5|Rating %}

This
is used to display the comment form, and means that we are using the
model from lost_episodes.episode, using the id field of episode, and
that the rating (with name “Rating” is optional. The rate, if used,
will be between 1 and 5.

The Flag functions:

As said before, it is sometimes interesting to flag comments, either due to their offensive content, their interest or their originality. Django provides (oh! surprise! :-) ) a nice interface to this feature.

Update: Afte checking the API stability page I’ve seen that the comment framework will probably suffer a complete rewrite before Django 1.0. So I am not sure I will go further on this direction.

  • Author:
  • Published: Sep 12th, 2006
  • Comments: None

How to use CheckboxSelect MultipleField

performanceI was actualy surprised not to find much information about the CheckboxSelectMultipleField. They simply say it is supposed to work like Select MultipleField but with checkboxes. It does, after you prepare() it :-)

Indeed, the SelectMultipleField gives back a request.POST that looks like this: {‘classes’: ['First', 'Second', 'Third']} while the CheckboxSelectMultipleField gives back a request.POST that looks like this: {‘classesFirst’: ['on'], ‘classesSecond’: ['on'], ‘classesThird’: ['on']}

In order to have the request.POST in the same format as SelectMultipleField you must make a manipulator.prepare(request.POST). An example follows:
class RoomsManipulator(forms.Manipulator):

class RoomsManipulator(forms.Manipulator):
    def __init__(self):
        self.fields = (
            forms.TextField(field_name="description", is_required=True),
            forms.CheckboxSelectMultipleField(field_name="classes",
                choices=tuple([(str(x.id),x.name) for x in Group.objects.all()])),
        )
 def define_room(request):
    manipulator=RoomsManipulator()
    # Was form submitted?
    if request.POST:
        new_data = request.POST.copy()
        # Are there any validation errors?
        errors = manipulator.get_validation_errors(new_data)
        if not errors:
            # The important step is here!
            manipulator.prepare(new_data)
            manipulator.do_html2python(new_data)
            # Do whatever you have to do here
            return HttpResponseRedirect('.')
    else:
        # No data submitted, initialize form
        errors = new_data = {}
    # Create the FormWrapper, template, context, response.
    form = forms.FormWrapper(manipulator, new_data, errors)
    return render_to_response('admin/newsletter/compose_mail.html',
                              {'groups':[g.name for g in Group.objects.all()],
                               'form': form,
                               'errors': errors})

I hope this will help other people save the time I had to spend googling, looking at examples and at the source.

  • Author:
  • Published: Sep 12th, 2006
  • Comments: 2

Wrapping generic views

glassesAfter programing a simple application with the generic views (create_object and update_object), I was faced with the following demand: A client wanted to use checkboxes instead of the standard select list Django offers when using generic views. Surprisingly enough, this option does not seem to be shipped as an option in the generic views.

The main idea is to write the form by hand and then modify the request.POST to transform it to the needs of the generic views. We want to convert the
request.POST from something that looks like this: {‘classesFirst’: ['on'], ‘classesSecond’: ['on'], ‘classesThird’: ['on']} to something that lookslike this: {‘classes’: ['First', 'Second', 'Third']}. Of course, this could have been done by writting my own form, but I wanted to reuse the generic views.

We first write the transformer (the equivalent of the prepare() for the CheckboxSelectMultipleField):

def get_classes_selection(new_data):
       return [item[6:] for item in new_data.keys()
               if item.startswith('classes')]

and the view:

def create_member(request,template_name=None,post_save_redirect=None):
    if request.POST:
        new_data = request.POST.copy()
        new_data.setlist('classes',get_classes_selection(new_data))
        request.POST = new_data.copy()
    else:
        new_data={}
    return django.views.generic.create_update.create_object(request, Member,
                  template_name=template_name,
                  post_save_redirect=post_save_redirect,
                  extra_context={'classes':Class.objects.all()})

We can then write the part of the template that concerns the form:

<form action="." method="post">
  <label for="id_name">Name:</label>
 {{ form.name }}{% if form.name.errors %}*** {{ form.name.errors|join:", " }}{% endif %}
  {% for class in classes %}
    <ul><li><input type="checkbox" id="id_classes{{ class.name }}" name="classes{{ class.id }}" > <label for="id_classes{{ class.name }}">{{ class.name }}</label></li></ul>
  {% endfor %}
  {% if form.classes.errors %}*** {{ form.classes.errors|join:", " }}{% endif %}
  <input type="submit" value="Create"/>
</form>

The view for the update_member is very similar, as is its template.

This is a very simple application that shows how to reuse the generic views that are shipped with Django. It is intended simply as another example. For complete information about how to extend a generic view, look at this excellent article by Malcom Tredinnick.

  • Author:
  • Published: Sep 12th, 2006
  • Comments: None

A new blog is born!

baby_marieWelcome to guindilla.eu!

This blog is the result of days of work, where I had the opportunity to play and improve my Django skills.

I do not intend it to be a proper blog, as I’ve never been a great writer, and it’s main intend was to serve as the engine of my girlfriend’s blog. Better half’s have indeed always been a great source of motivation!

I will release the source one of this days, when I’ll have a proper svn and all little bugs and annoyances have been removed. At the moment I am a bit busy, so it should take a little while.

That’s it. I hope you will enjoy it and hopefuly me too! :-)

© 2006,2007,2008,2009,2010 Guillermo Fernández Castellanos | Header images by Nick Lobeck