Blog // Exirel.me

Décrets du 4 août 1789

Par Florian Strzelecki - 13:05 - 04.08.2011

Tags : Bonjour, Divers, 4 Août

C'est fou tout ce qui a pu se passer le 4 Août. Entre autre, l'abolition du système féodal en France, lors de la Nuit du 4 Août 1789.

Ou aussi, la naissance de Barack Obama en 1961, et celle de Louis Armstrong en 1901.

Algorithme en if mineur

Par Florian Strzelecki - 11:47 - 18.07.2011

Tags : Programmation, Bonne pratique, PHP, loldev, Technique

Un petit truc auquel je viens de penser, en regardant du code trouvé sur Internet dans l'une de mes recherches :

$ok = $database->query($sql);

if ($ok !== false) {
    $ok = $this->doSomething();
}
if ($ok) {
    $ok = $this->doItAgain();
}
return $ok;

Ce petit bout de code, nous allons (je vais) l'optimiser. Comment ? En réduisant les instructions inutiles, et en le rendant un brin plus "lisible" - en tout cas, moi, les if à la chaîne, ça me file des boutons.

if (false !== $database->query($sql)) {
    return $this->doSomething() && $this->doItAgain();
} else {
    // Ne faudrait-il pas lever une exception ?
    // Ou au moins traiter l'erreur ?
}
return false;

Le principe est simple : lorsqu'une expression booléenne est forcément fausse ou vrai, elle n'est pas évaluée jusqu'au bout. Dans notre cas, si $this->doSomething() retourne false, alors $this->doItAgain() ne sera jamais évalué.

Simple, efficace. J'aurais pu éviter le premier if d'ailleurs, mais je me dis que traiter l'erreur c'est un peu mieux que simplement retourner false et laisser le reste s'en charger.

Le manoir de Rennes

Par Florian Strzelecki - 00:06 - 17.07.2011

Tags : Photo, Noir et Blanc, Présent, Temps, Divers

Tous les jours ou presque je passe devant cette fenêtre pas plus large qu'une voiture, qui me permet de voir un vieux manoir de pierre en plein milieu d'immeubles récents. Attiré par cet architecture atypique, j'ai pris un soir mon courage et mon reflex pour aller le photographier.

Pour cela, j'ai utilisé mon Canon 500D, avec deux objectifs : un 50mm f/1,4 et un 20mm f/2,8. Ce sera tout pour la partie technique, je ne suis qu'un amateur en la matière, et je ne compte pas me perdre en palabres techniques approximatives et plus que probablement erronées (voire stupides).

Parlons plutôt de cet immeuble, de ce "manoir" comme je l'appelle. Il m'intriguait déjà avant de le photographier comme je l'ai fait, et il m'intrigue encore plus aujourd'hui. Pour autant, je ne cherche aucune réponse à mes questions : je préfère le laisser à l'état de mythe, de légende urbaine.

Manoir Rennes

Image : Manoir Rennes - Florian Strzelecki - Creative Common By-NC-SA

perl: warning: Setting locale failed.

Par Florian Strzelecki - 18:25 - 03.07.2011

Tags : Documentation, Ordinateur, Charset, Technique

En plein dans une installation d'un serveur sous Ubuntu 10.04 LTS (32 bits), j'ai eu cette erreur, qui m'était déjà arrivée il y a bien longtemps sur une Ubuntu 9.04 :

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "fr_FR.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

Pour la résoudre, deux choses :

  1. Installer le paquet "language-pack-fr"
  2. Lancer la commande sudo dpkg-reconfigure locales

Et c'est tout, ni plus, ni moins. Faut juste y penser, et je me le note là autant pour le partager que pour m'en souvenir.

Edit : Pour info, l'install s'est très bien passée.

Moins de code, plus de fonctionnalité

Par Florian Strzelecki - 21:17 - 10.06.2011

Tags : Framework, Programmation, Bonne pratique, Optimisation, Technique

En ce moment, je répète souvent à mes collègues (et à d'autres personnes) la maxime suivante :

Moins de code, plus de fonctionnalité.

C'est devenu mon leitmotiv en ces jours sombres où je dois travailler avec des gens qui n'ont pas encore acquis toutes les compétences nécessaires sur le projet. Et vu mon niveau d'exigence, autant dire que c'est vaguement difficile à gérer pour moi (mais je me soigne).

Pour paraphraser cette pensée, je dirais qu'il ne sert à rien d'écrire beaucoup de lignes de code pour apporter de nombreuses fonctionnalités.

L'important, notamment et surtout dans le cas d'utilisation de framework, c'est de proposer un code simple, facile à étendre, et qui s'intègre bien à son environnement. C'est ma façon à moi de rappeler les principes KISS et DRY : Keep It Simple & Stupid, Don't Repeat Yourself.

Je parle du cas où l'utilisation d'un framework est obligatoire (parce qu'il s'impose de lui-même ou parce qu'il a été arbitrairement imposé), car c'est exactement dans ces moments là qu'il faut rester vigilant.

Dans le cas d'un framework, écrire "moins de code" ne veut pas dire littéralement écrire moins de code, mais plutôt "intégrer parfaitement le moindre code dans le contexte du framework".

Si le framework impose d'écrire une classe, ou plusieurs, pour écrire un "plugin", alors il vaut mieux le faire, plutôt que d'écrire quelque part codé en dur dans le code, la modification voulue.

C'est peut-être paradoxal, mais cela fonctionne mieux. C'est peut-être frustrant, mais cela évite bien d'autres frustrations.

Croyez-moi, il vaut mieux que tout fonctionne toujours parfaitement avec le framework, que tout fonctionne maintenant comme vous le voulez contre le framework.

Parce que le framework lui, il a déjà écrit beaucoup, beaucoup, beaucoup de lignes de code.

data.decode('UTF8')

Par Florian Strzelecki - 18:00 - 19.05.2011

Tags : Python, Documentation, Programmation, Bonne pratique, Technique

Gérer du texte est parfois (souvent) un véritable casse-tête quand des problèmes d'encodage de caractères pointent le bout de leur nez. Alors, pour avoir perdu bien trop de temps, je m'écris un article "marque-page" pour me rappeler que, bordel, voilà comment récupérer les données d'un fichier en UTF-8, les traiter avec Markdown, puis écrire le tout dans un fichier.

import markdown

f = open('fichier.txt', 'r')
data = f.read()
f.close()

html = markdown.markdown(data.decode('UTF8'))

h = open('fichier.html', 'w')
h.write(html.encode('UTF8'))
h.close()

L'idée, c'est de "décoder" la chaîne qui est à l'origine en UTF-8 vers de l'Unicode, puis la traiter comme je le souhaite (ici avec Markdown), puis de l'encoder en UTF-8 pour l'écrire dans un fichier. Voilà.

Simple, efficace, mais il faut y faire scrupuleusement attention, sous peine de se prendre ce genre d'erreur :

UnicodeEncodeError: 'ascii' codec can't encode character

Je développe donc j'écris des tests unitaires.

Par Florian Strzelecki - 02:07 - 18.05.2011

Tags : J'aime, Programmation, Bonne pratique, Développement, Unit Testing, Technique

Suite à mon article sur PHPUnit, il m'a été posé la question, fort simple dans sa forme, de "Mais pourquoi faire des tests ?".

Après tout, cette question, je me la suis aussi posé avant de faire des tests, ainsi qu'à mon premier apprentissage, et encore aujourd'hui quand j'écris tel ou tel morceau de code, je me demande à quoi servent les tests que je vais écrire, ou que j'ai déjà écrit.

Je vais essayer de faire rapide, car expliquer "pourquoi faut-il faire des tests" n'est pas mon but premier : tout un tas de gens ont écrit tout un tas de choses sur le pourquoi comment, avec études théoriques et pratiques. Non, moi, je vais me contenter de vous exposer, de manière très subjective, pourquoi je fais des tests unitaires.

À la découverte de PHPUnit

Par Florian Strzelecki - 19:40 - 10.05.2011

Tags : Programmation, Bonne pratique, PHP, Unit Testing, Technique

Les tests unitaires, je connais depuis que je fais du python, et je sais qu'il est possible d'en faire avec php, mais je n'avais jamais vraiment essayer avec ce langage. Il faut dire que mes dernières expériences professionnelles n'étaient pas vraiment portées sur la qualité du code (ce qui est dommage, et particulièrement frustrant pour moi).

Mais ce matin, j'ai relevé ma motivation pour m'intéresser de plus près aux tests unitaires avec php. Je suis tombé sur PHPUnit, et j'ai donc passé la matinée à l'installer, l'utiliser, et à me poser des questions.

Cet article traite donc de mon exploration (très récente) de PHPUnit, de sa phase d'installation puis d'utilisation. Le contexte est un petit projet de carte en 2D gérée par Tile (2D-tile based system) avec un algorithme de shadowcasting recursif et tout un tas d'autres détails.

D'ailleurs, ce petit projet sera l'occasion d'un autre article après la publication d'une première version stable (probablement sur bitbucket) avec sa documentation. Oui, c'est du teasing, c'est mal, mais je parle d'abords des tests unitaires. Si je veux.

Djangocong 2011 à Marseille : c'était le 16 et 17 Avril, et c'était génial

Par Florian Strzelecki - 18:36 - 26.04.2011

Tags : Django, Web, J'aime, Développement, Djangocong, Technique

Avec un peu de retard (c'était il y a une semaine), voici mon petit "compte-rendu" sur la Djangocong, qui se tenait, pour sa seconde édition, à Marseille, les 16 et 17 Avril 2011.

Cette année, donc, j'ai pu y aller, contrairement à l'année dernière, et ce ne sont pas les 6h du Rennes-Marseille (une ligne directe TGV) qui m'en empêchèrent. Même si, à tout prendre, je préfèrerais un lieu plus proche de chez moi pour les prochaines éditions.

La Djangocong, c'est la rencontre d'une communauté, principalement de développeurs francophones, autour du framework python pour le web : Django. Je développe avec ce framework depuis environ 2ans, et il m'apporte tant de satisfaction que j'ai même cherché un travail dans ce domaine - peine perdu, le marché à Rennes est surtout orienté Java.

Mais restons sur la Djangocong :

Cependant, il est difficile de résumer la Djangocong en quelques lignes (même cet article ni suffit pas), car la volonté des organisateurs fut de faire de cette rencontre autre chose qu'une suite de conférences techniques. Djangocong, c'est une rencontre entre humains, qui échangent, partagent, discutent, débattent, lancent de belles idées et rentre chez eux avec le sentiment d'appartenir à une communauté.

Djangocong 2011

Image : Djangocong 2011 - Florian Strzelecki - Creative-Common By-NC

Boucle et SQL (et ORM) : la petite erreur à éviter

Par Florian Strzelecki - 18:51 - 11.04.2011

Tags : Programmation, Bonne pratique, PHP, Optimisation, ORM, SQL, Technique

Petite précaution avant d'entamer la lecture de cet article : il est technique, certes, mais ne concerne pas spécifiquement ni symfony ni doctrine. Le sujet de l'article est un problème technique très concret, qui se retrouve dans tous les langages, et avec n'importe quelle base de données.

En lisant le livre "Pratical symfony", plus spécifiquement le chapitre 6, je suis tombé sur un cas très classique : afficher une liste d'élément par catégorie, comme dans l'exemple qui suit.

L'approche ici - mais j'ai déjà vu ça ailleurs très souvent - est de récupérer la liste des catégories, puis, pour chaque catégorie, de récupérer la liste des offres de ladite catégorie.

Sauf qu'il y a un problème : voyez-vous lequel ?

Jugement

Par Florian Strzelecki - 14:12 - 05.04.2011

Tags : Bonjour, Société, Ma vie, Pôle Emploi, Divers

L'essentiel de mon activité ces dernières semaines a consisté à passer des entretiens dans le but ultime de trouver un emploi. Cela même, oui : je suis au chômage, et je cherche du travail comme développeur web sur Rennes.

Je dois avouer que je n'imaginais pas, en laissant trainer mon CV nonchalamment sur un site comme RegionJob, avoir à répondre à autant de coups de fil, d'emails à des heures indues, et autres sollicitations impromptues dont m'abreuvent les recruteurs, les responsables RH, et autres responsables d'agences. C'est que, voyez-vous, pour fixer un rendez-vous, il faut un premier email de contact, puis un second pour confirmer un appel, qui lui donne suite à un autre email, pour fixer un premier rendez-vous, puis d'autres, et encore d'autres. Et de rendez-vous en rendez-vous, j'arrive au bout chez un client, qui peut, d'un simple mot, d'un simple geste, me juger sur toute ma hauteur, que, non, il n'a besoin de rien, merci au-revoir-je-ne-vous-raccompagne-pas-ça-ira.

Teletransportation Unit dentro de la cabina de teléfonos gratis

Image : Teletransportation Unit dentro de la cabina de teléfonos gratis - gaelx (http://www.flickr.com/photos/gaelx/) - Creative Common By-NC-SA

Je mets à jour mon wordpress avec python-fabric.

Par Florian Strzelecki - 14:32 - 15.03.2011

Tags : Python, Documentation, Wordpress, Fabric, Technique

Comme tout bon informaticien qui se respecte, j'ai tendance à chercher le moyen le plus simple, le plus rapide, et le moins pénible pour moi, de faire les choses. Surtout lorsque ces choses sont des tâches répétitives, et/ou, facile à automatiser.

Parlons peu mais parlons bien, voici quel était mon problème :

Partant de ça, je suis allé piocher dans mes connaissances quels outils pourraient m'être utile. Et c'est ainsi que j'ai choisi Fabric : j'ai créé un petit script, je le partage aujourd'hui avec qui le souhaite, sans restriction d'usage.

Petit tour technique...

True Grit

Par Florian Strzelecki - 02:03 - 04.03.2011

Tags : J'aime, USA, Cinéma, Western, Divers

Je vais rarement au cinéma seul. La dernière fois, c'était pour Gran Torino, et ce film était tout bonnement sublime. J'ai récidivé avec True Grit, et j'ai exactement la même impression : le sentiment que ce film est sublime, qu'il s'agit d'un bijou que je n'aurais jamais pu apprécier autant qu'en le regardant seul dans une grande salle de cinéma.

True Grit est un western qui m'a fait pensé à un autre du même genre "L'assassinat de Jessy James par le lâche Robert Ford." par le traitement de l'image : ces horizons gris et uniforme, ce paysage semi désertique où seul l'herbe rase survit, au milieu des rochers et des serpents.

Mais True Grit est bien plus rythmé, et ne souffre pas des lenteurs que j'ai pu ressentir dans l'autre film. True Grit est rude, True Grit est brutal, True Grit est un de ces films qui m'a pris aux tripes et m'a fait plongé dans ses méandres.

Une histoire simple, une histoire banale : un homme en tue un autre, et sa fille veut se venger. Elle embauche un Marshall du genre qui fait le travail sans se soucier de savoir s'il peut utiliser légalement son arme ; il l'utilise, il tire, il tue. Il survit, point.

Cette adolescente de 14 ans ne manque pas de courage, mais elle manque de tact. Elle est franche, directe, honnête. C'est une débrouillarde, éduquée, et qui sait monter à cheval. Elle va l'emmerder, ce vieux marshall, et l'enrôler pour de bon dans cette chasse à l'homme.

Je pense que je vais avoir longtemps encore cette image en tête : une silhouette dans une robe noire s'éloignant sur la prairie balayée par le vent, vers un horizon lointain, gris, et uniforme.

True Grit.

True Grit Revolver

Image : True Grit Revolver - DR

Révolte de l'autre côté de la Méditerranée #jan25 #egypt

Par Florian Strzelecki - 18:32 - 28.01.2011

Tags : Web, Société, Twitter, Révolution, Égypte, Divers

Depuis le 25 Janvier, je regarde quotidiennement sur twitter et sur le net ce qui se passe en Égypte. Non pas que je puisse faire grand chose, mais me tenir informé me semble être la moindre des choses.

Sur twitter tout d'abords, où les tags #jan25, #egypt & #egypte sont employés pour relayer et tweeter à propos de ce qui se passe. Pourquoi #jan25 alors que nous sommes le 28 ? Car c'est ce jour là que twitter a été utilisé, encore une fois, pour relayer la révolte d'un peuple.

Et puis sur reflets.info, avec un premier "live" mardi dernier, et aujourd'hui avec un autre live. Ce que j'apprécie particulièrement, c'est que je peux vérifier les sources rapidement, je peux aller trouver par moi-même l'information. Twitter est vraiment formidable !

Dernier site sur lequel je passe pas mal de temps : Al Jazeera English: Live Stream. Je peux ainsi regarder les images, et écouter les commentaires en Anglais. Ce sont des journalistes, et entre les commentaires et explications des images, il y a quelques débat et discussion autour du phénomène.

Mais ce qui me surprend, c'est qu'en France, nos médias n'en parlent pas, ou alors très peu. Tout cela ressemble à un simple bruit de fond... alors que l'information est là ! Elle est prête, disponible, il n'y a plus qu'à faire des analyses, à la montrer, à la diffuser !

Je trouve ça tout bonnement dingue... dingue et insensé.

...

Et tandis que j'écoute un album de Lofofora, dans mon confortable appartement, je me dis que ces événements seront un jour dans nos livres d'Histoire. En tout cas, je l'espère.

Arrietty, petite chapardeuse...

Par Florian Strzelecki - 20:38 - 25.01.2011

Tags : J'aime, Film, Ma vie, Manga, Japon, Cinéma, Geek

Hier soir donc, au lieu de bosser jusqu'à tard dans la nuit sur des projets personnels, je me suis dit qu'aller au cinéma pourrait être un bon moyen de faire une pause.

Oui, bon, ok, j'avais surtout très envie d'aller voir le derniers film des Studio Ghibli : Arrietty, le petit monde des chapardeurs.

Le scénario a été écrit par Hayao Miyazaki, ce qui, en premier abord, m'a fait me poser tout un tas de questions. Le précédent ne m'a pas du tout convaincu d'aller le voir, mais, là, la bande annonce m'a séduit.

Je n'ai pas été déçu, et je vous conseille d'aller le voir. Pour ceux qui veulent en savoir plus, lisez la suite de l'article...