Planète AFPy RSS

[afpyro] AFPyro à Lyon - mercredi 25 février

Publié le 2015-02-25 00:00:00

Un Afpyro aura lieu le mercredi 25 février à partir de 19h au Gîte Numérique - 6 rue Saint Georges - 69005 Lyon.

Une présentation sur la programmation multi-agents sera donnée pa Sébastien Floc’h.

Pour se rendre au Gîte Numérique :

  • en métro : arrêt Vieux Lyon - Cathédrale Saint Jean
  • en bus : lignes C20 ou 31 arrêt Saint Georges ou Sala
  • en vélo’v : stations Saint Jean / Cathédrale, Place Crépu

[afpy.org] Un MOOC en français sur Python

Publié le 2015-02-23 11:41:37
Le premier MOOC en français dédié à l'apprentissage du langage Python a été annoncé sur FUN, la plateforme de MOOC du ministère de l’enseignement supérieur.

[Biologeek] Gymkhana et cibles

Publié le 2015-02-20 11:00:00

Les citoyens dans le phare, les développeurs sur le bateau

Pour imaginer des applications innovantes, le citoyen est un réservoir d’idées brutes. Cette matière première est malheureusement mal exploitée, la collaboration avec les développeurs, directe ou par des intermédiaires, étant souvent infructueuse. C’est criant dans les sociétés où des années de silos ont érigé des barrières entre les utilisateurs ou leurs mandataires et les équipes de développement. Ils s’observent, chacun dans sa tourelle, par meurtrières interposées : les uns construisent des outils techniques difficilement utilisables, les autres formulent des solutions qui ne reflètent pas leurs besoins réels.

On trouve aujourd’hui des développeurs citoyens qui, conscients de ce fossé, veulent devenir des artisans : plutôt que de faire consommer, ils souhaitent enchanter les utilisateurs avec leurs réalisations. Que ces artisans développeurs et citoyens usagers trouvent ensemble un espéranto, voilà notre credo.

Gymkhana, introduction (cache)

Stéphane collabore avec Claude sur Gymkhana depuis maintenant quelques mois. Cet ensemble d’ateliers s’adresse à toutes les structures qui ont du mal à être pertinentes pour les citoyens. Je me demande dans quelle mesure cela pourrait être utilisé pour faire se rencontrer des entreprises et leurs utilisateurs… ou des dirigeants avec leurs employés.

[Biologeek] Polices et performances

Publié le 2015-02-19 11:00:00

By referencing our fonts using CSS @font-face and using font loading APIs to load and enable them when ready, we’ve found our fastest page load yet (complete in 600 milliseconds on wifi!) while retaining the progressive font rendering we desired.

Font Loading Revisited with Font Events (cache)

À force de rajouter des polices dans ma feuille de style (5 à ce jour…) elle commençait à être énorme et leurs ajouts sous forme de data URI s’avérait être beaucoup moins pertinent. Même en gagnant sur la latence en n’ayant qu’un seul fichier, la page ne commençait à s’afficher qu’une fois la CSS complètement chargée. Soit après 4,5 secondes sur une connexion 3G pour un article !

En explorant les Font Load Events (cache) j’ai pu réduire ce temps de moitié pour la même taille de téléchargement. C’est un gain vraiment énorme en terme de ressenti qui ne change rien au poids ou au temps de chargement du document complet. Il n’y a que la police pour le code que je charge directement avec @font-face car ainsi le navigateur ne la charge que s’il y a ces éléments présents dans la page (et normalement le code arrive plus bas dans la lecture).

L’inconvénient principal est au rafraichissement de la page car on s’aperçoit que le chargement des polices est fait en JavaScript mais l’usage d’InstantClick rend ce rafraichissement moins courant. L’autre problème est de dépendre de JavaScript pour afficher des polices qui pourraient être chargées nativement de manière optimisée…

[AFPy Salt-fr] Sprint Salt en marge de la SaltConf

Publié le 2015-02-18 23:00:00

Que diriez vous de venir faire un petit sprint en marge de la SaltConf (qui a prévu un sprint le mercredi 4 mars 2015 en soirée) dans les locaux de Logilab ? Celui-ci aurait donc lieu le même jour, le mercredi 4 mars, de 9h à 18h.

L'idée est d'avoir une vrai session de travail où l'on finisse la journée avec des contributions à salt (documentation, code, tests, etc). On pourra aussi en profiter pour discuter technique et échanger sur nos pratiques.

En 2013, Logilab avait déjà fait un sprint saltstack, qui malgré des problèmes d'électricité s'était plutôt bien passé.

Pour qu'on puisse savoir le nombre de participants en avance, merci de remplir le framadate (avec possibilité de participer sur IRC, mais bon, c'est pas idéal).

[Biologeek] ★ Compagnons du dev

Publié le 2015-02-18 11:00:00

Cette présentation m’a refait penser aux diverses idées que j’ai autour d’autre façons possibles de "travailler" dans le Web. Celles-ci ne sont finalement que des adaptations de choses existantes dans le domaine culturel mais j’en profite pour les partager.

Imaginer d’autres façons de collaborer (cache)

On parle de compagnonnage depuis très longtemps au sein de scopyleft. Aller voir ce qui se fait ailleurs pour s’enrichir de leurs différences est dans notre culture. Pour autant, on n’a jamais tenté d’officialiser la chose. Par manque de temps ou peut-être pour que tout cela reste léger, pour ne pas tomber dans le corporatisme déjà bien prononcé dans notre domaine. Stéphane est actuellement en tournée en France et Vincent aux États-Unis. Les rencontres se font sur un coup de fil ou un tweet, parfois juste par chance en croisant la bonne personne.

Les institutions éducatives (si elles sont réellement nécessaires) seront amenées à prendre l’aspect de centres ouverts à tous, où chacun puisse trouver ce qu’il recherche.

Une société sans école, Ivan Illich

Loïc nous invite à proposer d’autres formes de collaboration :

Co-working éphémère

C’est ce qui est exploré avec Dev Open Sud, l’idée de se retrouver dans un lieu donné pour une période fixe mais relativement courte. Partager et créer, ensemble ou pas, pour du business ou pas, tard le soir ou pas.

Les inscriptions sont ouvertes et le budget est réajusté en fonction des dépenses réelles sur place (ce qui est suffisamment rare pour être signalé).

Camps d’exploration

On prend une techno récente, on prend un lieu et un long week-end. Pas forcément déconnecté comme un /dev/fort mais relativement isolé. L’objectif est de produire un truc utile en utilisant la technologie retenue avec des personnes de différents niveaux et horizons.

J’en lancerais bien un premier sur ReactJS mais ça demande un peu de logistique.

Randonnée technique

Le concept n’est pas nouveau mais je pense qu’il gagnerait à s’appliquer en itinérance. La réflexion pourrait s’orienter vers la limitation des ressources et ce que l’on est capable de transmettre une fois déconnecté. Travailler sur le mobile et l’immobile, sur l’action et la réflexion, sur les contraintes et le bien-être, sur la solidarité et la survie.

Je rêve d’un Tour du Mont-Blanc sur ce principe.

Tout cela me rappelle la notion de nomadisme coopératif (cache) dont avait parlé Patricia Vendramin lors de Lift France.

[Biologeek] Redesign incrémental

Publié le 2015-02-18 11:00:00

Never make radical changes when minimal adjustments will suffice. Too many websites undergo a major overhaul unnecessarily. While legitimate reasons exist for engaging in a redesign, the reality is that many problems you need to solve are isolated and can be fixed with smaller, incremental approaches. Look at the metrics rather than guess what needs to be changed. Allow data to help you determine the extent of the problem and apply the least amount of change necessary to solve it. Radical changes have a higher chance of inadvertently breaking something critical for users.

Radical Redesign or Incremental Change? (cache)

J’ai commencé un redesign avec plusieurs objectifs :

  • jouer avec les véritables (cache) small caps ;
  • davantage mettre en avant le stream et l’activité pro ;
  • simplifier la CSS et m’amuser avec le responsive pour les en-têtes et pieds de pages ;
  • améliorer les contrastes et la lisibilité ;
  • retirer le bruit (partages sociaux et support de webmention) ;
  • me challenger en retirant tous les id, class et images décoratives.

La peinture est fraîche et le restera :-).

[Biologeek] Écologie et contrôle

Publié le 2015-02-17 11:00:00

Par ailleurs, la « pétrolisation » permet de contourner les mouvements ouvriers, là où le charbon donnait aux mineurs le pouvoir d’interrompre le flux énergétique. À partir des années 1880, les grandes grèves minières ont contribué à l’extension du suffrage universel et à l’adoption des lois d’assurance sociale. Beaucoup plus intensif en capital qu’en travail, le pétrole est plus facile à surveiller. Son extraction requiert une grande variété de métiers et des effectifs très fluctuants, ce qui complique le contrôle ouvrier de la production — tout comme sa fluidité : pipelines et tankers réduisent les ruptures de charges. Structuré dans un réseau énergétique international, le capitalisme, dorénavant global, devient moins vulnérable aux revendications des travailleurs nationaux.

La longue marche de la crise écologique, Manuel d’histoire critique

Ce manuel édité par le Monde Diplomatique (cache) est vraiment une pépite. J’ai (re)découvert pas mal de choses qui étaient restées floues durant mes cours d’Histoire.

Remplacez « énergie » par « information », « ouvriers » par « développeurs » et vous comprendrez mieux mes réflexions sur la complexité des frameworks web. Nous devrions utiliser notre pouvoir à bon escient avant d’en être démunis…

[Biologeek] ★ Cours IUT : Frameworks Web

Publié le 2015-02-16 11:00:00

By now, the purpose of web frameworks should be clear: to hide the boilerplate and infrastructural code related to handling HTTP requests and responses. Just how much is hidden depends on the framework. Django and Flask represent two extremes. Django includes something for every situation, almost to its detriment. Flask bills itself as a "micro-framework" and handles the bare minimum of web application functionality, relying on third-party packages to do some of the less common web framework tasks.

Remember, though, that at the end of the day, Python web frameworks all work the same way: they receive HTTP requests, dispatch code that generates HTML, and creates an HTTP response with that content. In fact, all major server-side frameworks work in this way (excluding JavaScript frameworks). Hopefully, you’re now equipped to choose between frameworks as you understand their purpose.

What is a Web Framework? (cache)

Ce cours était une introduction aux frameworks web. Au départ on devait faire du PHP en essayant Laravel mais quand j’ai vu la complexité qu’il y avait dans ce framework (générer un projet de test c’est 18 Mo ?!) et le manque de documentation j’ai vraiment douté. Du coup on a commencé par (re)voir les bases avec les concepts (routing, controllers, models, ORM, views, templating, middlewares, etc) avant d’opter pour un framework JavaScript : SailsJS. Qui demandait l’installation de NodeJS ainsi que ses multiples dépendances. Autant dire qu’en environnement hostile (connexion plus que limitée) il est compliqué d’arriver à la première ligne de code pour tous…

Une fois les quelques machines coopérantes partagées, on a pu plonger dans le code et essayer de comprendre comment faire des choses simples à partir du gabarit de projet. Or l’exemple proposé ne sert qu’une page statique par défaut ! Il faut parcourir l’énorme arborescence générée pour trouver où placer les fichiers pour les controllers ou les templates ce qui est n’est vraiment pas intuitif pour un débutant qui essaye de comprendre les concepts sous-jacents. SailsJS nous aura au moins permis de discuter de la dualité framework front-end/back-end et de l’importance des données et des URLs en allant même vers du offline-first (cache). Au final j’aurais mieux fait de partir sur ExpressJS ou Flask. Cela ne résout pas le problème des dépendances pour autant.

C’est le moment où j’ai envie d’écrire mon propre framework. Portable. Copiable. Documenté. Hackable. Simple. Un générateur de sites statiques en somme :-p. L’enseignement est vraiment en train de m’ouvrir les yeux sur la complexité inutile créée par nos métiers. Complexité qui re-crée une pyramide de pouvoir et donc de contrôle. Au même titre que l’énergie.

[Biologeek] Sites obèses, support CSS et contrastes

Publié le 2015-02-16 11:00:00

Billet comportant les liens de veille technologique présentés aux étudiants dans le cadre d’une routine de mes cours.

I’m not trying to argue that the Majora’s Mask website is well developed. I haven’t looked under the hood. The point I want to make is that it might, just might, be acceptable to build a website over 1MB. There seems to be a prevailing rhetoric within our industry that if a website exceeds this magic number, it’s a failure.

When can a website be over 1mb? (cache)

Histoire de remettre le couvert sur les performances web.

Montrer l’existence de Can I use et Do I use qui permettent de se faire une idée a priori ou a posteriori du support par les divers navigateurs des fonctionnalités utilisées pour son site.

Enfin, Contrast Rebellion tombe à point après avoir sensibilisé les étudiants aux problématiques de lisibilité lors du dernier cours. À ce sujet, je n’ai pas trouvé mieux que Contrast Ratio pour vérifier rapidement un site de manière pertinente. Vous avez d’autres outils ?

Merci à Erick et Anthony de m’avoir tous les deux proposé Contrast Finder par email pendant le cours !

[AFPy Salt-fr] Compte rendu Salt Meetup Paris - février 2015

Publié le 2015-02-15 23:00:00

La communauté Salt française (ou plutôt francilienne) s'est réunie dans les locaux parisiens de Dailymotion pour son premier meetup de l'année, autour de trois présentations. Voici un compte rendu (très court) pour vous renvoyer vers les références.

Utiliser salt dans des docker

David Douard de Logilab a fait une rapide présentation sur l'utilisation de salt dans un conteneur docker, par exemple pour tester des configurations salt.

Cette présentation s'est déroulée en deux parties :

  • un présentation rapide de docker
  • une démonstration de l'utilisation de salt dans un docker, avec :
    • la configuration requise pour lancer un salt-master local pour piloter les minions lancés dans des conteneurs,
    • la présentation d'un Dockerfile qui produit une image docker minimal, basée sur une Debian jessie, avec un salt-minion installé et lancé par supervisord,
    • un exemple de test de configuration d'un apt-cacher à partir de la formula existante.

Découper ses states/pillar salt

Paul Tonelli, de Heuritech, nous a fait une présentation sur la bonne manière de sécouper ses states et pillars salt pour installer un salt-master chez un client, et a parlé des bonnes pratiques d'organisation du code salt.

Le support de sa présentation seront bientôt disponibles.

SaltPad

saltpad

Boris Feld de Tinyclues nous a refait une présentation rapide de son projet saltpad, une interface web pour piloter salt, sous forme d'une démonstration de l'outil.

Discussions

Des discussions se sont engagées suites à ces présentations, notament sur :

  • qui utilise, et comment, les environnements dans une configuration salt,
  • état et stabilité des modules dockerio récement arrivés dans salt,
  • état de la salt-api et utilisation des ACLs

Ces discussions pourraient être le sujet de présentations et de discussions plus avancées lors d'un prochain meetup.

Conclusion

Merci à Dailymotion d'avoir acceuilli et apporté à boire, et fourni les pizzas.

Pour le prochain meetup (avril), votez pour une date sur framadate et n'hésitez pas à inscrire une proposition de présentation ou de lieu sur le pad d'organisation.

[Biologeek] Signalétique wifi

Publié le 2015-02-15 11:00:00

Les accès wifi se multiplient et malheureusement les restrictions qui vont avec aussi. Il faudrait avoir une signalétique pour détailler ce qui est appelé wifi par les établissements :

  • niveau de sécurité
  • ports bloqués
  • sites bloqués
  • usages interdits
  • portails captifs
  • garanties de débit
  • garanties de disponibilité
  • etc

Du coup je me suis renseigné sur les accès nomades/4G et il y a des routeurs qui ne nécessitent pas de posséder un smartphone. Je vais tester ça.

[Biologeek] ★ Remember the Future

Publié le 2015-02-14 11:00:00

À tous ceux qui veulent apprendre, il faut donner accès aux ressources existantes, et ce, à n’importe quelle époque de leur existence. Il faut ensuite que ceux qui désirent partager leurs connaissances puissent rencontrer toute autre personne qui souhaite les acquérir. Enfin, il s’agit de permettre aux porteurs d’idées nouvelles, à ceux qui veulent affronter l’opinion publique, de se faire entendre.

Une société sans école, Ivan Illich

Texte rédigé dans le cadre d’un jeu sérieux qui consistait à « imaginer scopyleft en 2016 ». C’est une exercice que nous avions déjà réalisé à la création et qui permet la fantaisie tout en vérifiant l’alignement sur le cap à suivre par la discussion qu’il génère.

Scopyleft est devenu un réseau de personnes qui partagent les mêmes valeurs et qui se rencontrent plus ou mois ponctuellement autour de motivations communes. Les membres sont mobiles, découvrent de nouvelles pratiques, partagent leurs expériences avec le réseau. Scopyleft n’est plus/pas un gage de qualité mais une recherche constante de pertinence grâce à la collaboration.

2015 aura été l’année de la remotitude (sic) avec des explorations de territoires plus ou moins lointains. Vincent est devenu californien, Stéphane arpente les lieux innovants de France et d’Europe, David est tombé en amour avec le Québec. Cela nous a permis de travailler à distance et de réussir à organiser des événements/formations/sprints en s’hébergeant tour à tour.

Depuis peu, d’autres personnes sont intéressées par l’approche réseau et nous font des propositions pour connecter leurs propres cercles et étendre notre rayon d’action à des domaines comme la permaculture (cache) ou le sport. Les pratiques apprises nous permettent d’aider d’autres communautés ouvertes à la bienveillance et moins techniques.

Suite à des problèmes de trésorerie, nous avons trouvé d’autres moyens de financement. Nous organisons beaucoup de micro-événements payants qui réunissent une douzaine de personnes et qui apportent de la valeur sur le long terme. Nous accompagnons également des équipes dans leur changement de culture. Nous avons pivoté d’une expertise technique à de la facilitation sociale.

Nous codons maintenant uniquement pour le plaisir. On s’organise une semaine de sprint par trimestre pour jouer avec les technologies et produire de l’inutile, du futile et de la joie. Ces moments sont partagés avec la communauté qui est de plus en plus nombreuse à nous rejoindre.

[Biologeek] Tournure anglaise

Publié le 2015-02-14 11:00:00

We were told to surf the web, but in the end, the web serf’d us. Yet there’s a worse fate than digital serfdom, as Snowden’s ongoing NSA revelations suggest. This isn’t simply about the commodification of all human kinesis, it’s the psychological colonialism that makes the commodification possible.

DATAcide (cache)

Il y a des formules qui perdent leur beauté lors d’une traduction. Ce texte est magnifique.

[Biologeek] Offline-next et service workers

Publié le 2015-02-13 11:00:00

Rich offline experiences, periodic background syncs, push notifications— functionality that would normally require a native application—are coming to the web. Service workers provide the technical foundation that all these features will rely on.

Introduction to Service Worker (cache)

Je suis tombé hier sur un lien faisant part d’une expérience d’affichage des liens (cache) ou plutôt de non affichage. C’est une problématique à laquelle je réfléchis depuis pas mal de temps et je trouve leur solution élégante. Je pense qu’elle pourrait être généralisée avec un simple script JavaScript qui récupère le title d’un lien et le met en aside en fonction de la taille de la fenêtre.

Et puis ma réflexion se poursuit sur la possibilité de récupérer ces liens afin d’améliorer les performances via un prefetch et pourquoi ne pas les stocker pour un usage hors-ligne. Anthony me propose de regarder du côté des Services Workers, ce qui répond parfaitement à mon besoin (il y a des builds Firefox dédiés). Peut-être l’occasion de coder un petit truc pour rendre ce site un peu plus portable ?

[Biologeek] Python et namedtuples

Publié le 2015-02-12 11:00:00

Many functional programming articles teach abstract functional techniques. That is, composition, pipelining, higher order functions. This one is different. It shows examples of imperative, unfunctional code that people write every day and translates these examples to a functional style.

A practical introduction to functional programming (cache)

Dans les épisodes précédents, on a vu comment récupérer des billets voisins et parcourir des fichiers markdown. Il est temps de combiner les deux. Mais avant cela, commençons par gérer des objets par l’intermédiaire des namedtuples qui facilitent l’accès aux attributs :

Post = namedtuple('Post', ['content', 'author', 'date'])
def populate_post(content, metadata):
    # Divers traitements.
    return Post(title=title, date=date_, content=content)

Cette méthode va nous permettre de générer des posts à partir du contenu et des métadonnées de notre fichier markdown. On va ensuite vouloir récupérer une liste ordonnée par date :

def collection():
    """Retrieve all posts sorted by date desc."""
    posts = []
    for file_path in each_markdown_from(POSTS_PATH):
        content, metadata = parse_markdown(file_path)
        post = populate_post(content, metadata)
        posts.append(post)
    return sorted(posts, key=attrgetter('date'), reverse=True)

C’est cette liste dont on peut utiliser les voisins pour la génération du fichier HTML final :

for previous, post, next in neighborhood(collection(), last=thoughts):
    # On peut ici accéder à post.title, post.content, etc.

J’aurais pu rendre tout cela encore plus fonctionnel mais je préfère pouvoir vérifier facilement les étapes intermédiaires sans qu’il y ait trop d’imbrications incompréhensibles. C’est la fin de cette série, vous avez maintenant les outils pour créer votre propre moteur de blog statique !

[Biologeek] ★ Cours IUT : Performances Web

Publié le 2015-02-11 11:00:00

Le mobile first est l’héritier de la pensée « amélioration progressive » : délivrons très rapidement la promesse initiale, chargeons les fonctionnalité supplémentaires après et en fonction des capacités du client. Cela oblige à se poser la vraie question : quelles sont les priorités de chaque page ?

Cela s’intègre parfaitement avec un processus de conception moderne où designer et intégrateur web passent pas mal de temps l’un à côté de l’autre pour fignoler les maquettes sur les mobiles.

Le web mobile et la performance (cache)

Après avoir fait du JavaScript lors du dernier cours, on passe à quelque chose de plus léger avec les performances web. Vaste sujet. J’ai donné les grands principes lors du premier cours sur le web mobile et je leur ai demandé de venir avec un site d’exemple à analyser. J’ai pour ma part choisi celui de Bertrand Billard car il y a presque tous les éléments réunis pour montrer ce qu’il ne faut pas faire (à moins que vous ne souhaitiez faire subir un ironman à votre navigateur, huhu).

Premier outil indispensable, l’onglet réseau des outils du navigateur. Il permet de voir tout ce qu’il se passe pour votre configuration. (Mal)heureusement, beaucoup de vos utilisateurs n’ont pas la chance d’avoir une machine/connexion aussi performante (cache). Second outil, WebPageTest qui donne d’autres informations et qui permet de choisir le navigateur et la connexion.

Ces deux outils devraient suffire à alimenter la discussion pour un cours de 4 heures. Il sera question de compression, de workflows, de mesures, de minification, de chemin critique, de latence, de polices, de requêtes tierces, d’expérience utilisateur, de bande passante, de cache, de sprites, de rendu, de stratégie, etc. Ce sera l’occasion de leur présenter le livre d’Éric sur la performance web qui donne les directives suivantes :

  1. Réduire le nombre de requêtes HTTP
  2. Réduire le poids des composants
  3. Améliorer la parallélisation des téléchargements
  4. Améliorer le ressenti utilisateur
  5. Améliorer l’applicatif et les temps de traitement

On terminera peut-être avec quelques outils comme lazyload, picturefill, fastclick ou instantclick que j’ai mis en place sur ce site. Mais je ne veux pas non plus tomber dans la micro-optimisation, il s’agit plutôt de connaître les grands principes ET surtout de les appliquer.

[Biologeek] Veille techno, Flexbox et bonnes pratiques JS

Publié le 2015-02-11 11:00:00

Billet comportant les liens de veille technologique présentés aux étudiants dans le cadre d’une routine de mes cours.

J’ai tendance à attribuer de plus en plus d’importance aux retours d’utilisation plutôt qu’à l’aspect technique et fonctionnel de la techno.

Plutôt que de lire des tutoriels techniques, je préfère m’intéresser aux expériences des early adopters. Dans quels cas cette techno est-elle appropriée ou non ? Quels sont ses avantages et ses inconvénients ? Quelles sont ses forces et ses faiblesses ? Quels gains réels espérer, et à quelles galères s’attendre ?

Comment ne pas se laisser dévorer par la veille techno ? (cache)

Thibault nous parle de la veille avec son style inimitable. Parler de la veille dans sa propre veille, so meta.

I don’t blame people for finding Flexbox difficult to grasp. Most of the tutorials that exist on the web either show you a bunch of boxes that are completely abstract, or jump so far ahead that the only logical thing to do with Flexbox is to work backward from these magically simple layouts, and end up in a mountain of unmaintainable code. My own previous article was the former, I wrote it to understand Flexbox.

Experiment: Using Flexbox Today (cache)

Flexbox est dans notre backlog additionnel, l’occasion d’en reparler.

Au fil des formations, je remarque que de nombreuses bonnes pratiques que je signale en passant dans le code, par acquis de conscience, ne sont pas connues, ou pas comprises, ou juste surprenantes pour les stagiaires. C’est l’occasion de me souvenir que dans tous les domaines, ce qui peut paraître évident et « connu de tous » ne l’est pas forcément, et qu’il est toujours bon de remettre en lumière des savoirs dont on imagine, souvent à tort, qu’ils sont monnaie courante.

10 bonnes pratiques JavaScript (cache)

Pour faire suite au cours du lundi.

[afpyro] Afpy à Pau le mecredi 11 Février

Publié le 2015-02-11 00:00:00

Un afpyro aura lieu à Pau le 11 Février à 20h30.

Cela se tiendra au fablab MIPS 4 rue Despourrins au premier étage. (Il faut sonner à l’interphone)

jpcw nous fera une petite présentation sur les décorateurs en Python et on causera librement de différent sujets autour de python.

Voir la map

[AFPy Salt-fr] Annonce : Meetup Salt Paris chez Dailymotion - Fevrier 2015

Publié le 2015-02-10 23:00:00

Le meetup de février aura lieu dans les locaux de Dailymotion au 140 boulevard Malesherbes, Paris 17e, métro Wagram ou Malesherbes.

Dailymotion

David Douard de Logilab présentera "Faire du Salt dans et avec des docker".

Il reste encore des places pour faire des présentations éclairs. Contactez nous sur la liste pour nous faire une proposition de présentation.

Le meetup est gratuit mais il faut s'inscrire (limité à 50 places) sur meetup.com.


View Larger Map

[Biologeek] ★ L’oiseau bleu

Publié le 2015-02-10 11:00:00

J’ai découvert ton site via un tweet de Bastien Jaillot : un article nommé La non demande de devis. Article inspirant, tout comme d’autres posts. J’ai pris plaisir à te lire.

De ce fait, je m’abonne à toi sur Twitter ; Bêtement, puisque dans la seconde qui suit, je n’en vois qu’un. C’est dommage que tu n’utilises pas ce canal, même si via ton site on sent ta réticence envers ce réseau. Je raterais peut-être quelque chose à l’avenir. Je n’ai pas toujours le temps d’aller fouiner sur les sites. Twitter est mon RSS. A tort ou à raison. Le jour où ces pubs ciblées seront gênantes, je changerai peut être mon fusil d’épaule.

Richard PASQUIOU

Mon retrait de Twitter après plus de cinq années est militant. J’ai mis plus d’un an à me désintoxiquer et je suis même passé par une cure de 3 semaines sans grand effet. Depuis le premier janvier, je publie quotidiennement pour le plaisir. Sans aucune contrepartie, sans aucune réexploitation, juste un grand sentiment de liberté.

C’est un acte militant car je souhaite encourager les personnes comme Richard à réacquérir des outils décentralisés. Le confort et la popularité d’outils centralisés à la Twitter et consorts tuent le Web à petit feu. Je ne souhaite plus être un contributeur actif de sa destruction. Ce site est à l’image du Web que je veux voir grandir : des liens et des ressources distribuées. Des expériences et de l’acquisition de savoirs.

Je perds une partie de mon « lectorat » pressé ? Soit, j’ai le temps et mes écrits seront encore là dans quelques années. Je ne fais pas une course à l’audience. Quid de vos tweets ?

[Biologeek] Hypermedia et histoire

Publié le 2015-02-10 11:00:00

Hypermedia is not a new concept, it has been around in various forms since the 1960s.  However, in the past seven years there has been a significant resurgence of interest in the concept.  This blog post contains my reflections on the past few years, where we currently are and where we might be headed in the use of hypermedia for building distributed applications.

Hypermedia, past, present and future (cache)

Article très complet sur l’historique et les enjeux autour de l’hypermedia, il manque peut-être la dimension politique dans tout ça.

[carlchenet] Backup Checker 1.0, the fully automated backup checker

Publié le 2015-02-09 23:01:21
Follow me on Identi.ca  or Twitter  or Diaspora* Backup Checker is the new name of the Brebis project. Backup Checker is a CLI software developed in Python 3.4, allowing users to verify the integrity of archives (tar,gz,bz2,lzma,zip,tree of files) and the state of the files inside an archive in order to find corruptions or intentional of accidental…

[AFPy-Nantes] Un petit barcamp ?!

Publié le 2015-02-09 23:00:00

Après les conférences très appréciées du mois de janvier, qui nous ont permis de bien commencer l'année 2015, on continue avec un BarCamp mardi 24 février, encore et toujours à la Cantine !

L'idée sera donc de proposer puis de voter pour quelques thèmes qui deviendront des ateliers / tables rondes, auxquelles tout participant peut s'inscrire, peu importe son niveau de connaissance du sujet. Les différentes discussions pourront donner lieu à des petits compte-rendus afin que toute la communauté profite de ce qui s'est dit ou fait.

Comme d'habitude, ceux qui le souhaitent pourront prolonger l'évènement autour d'un verre en centre ville de Nantes.

Si vous avez des questions ou des remarques concernant nos meetups, rejoignez-nous sur le chan IRC de l'AFPy Nantes ou inscrivez vous sur la liste de diffusion . Vous pouvez aussi nous suivre sur Twitter via notre compte @PythonNantes :)

N'hésitez pas à vous inscrire ici pour que nous ayons un aperçu du nombre de participants : inscription au meetup.

À bientôt !

[Biologeek] ★ Cours IUT : Comprendre JavaScript

Publié le 2015-02-09 11:00:00

Code reviews are a perfect opportunity to continue learning and improving your coding style. I work with a team of experienced developers, so I don’t see many really glaring errors. But when I am called on to review third-party code, I’ve noticed certain bad practices crop up over and over again. Some of these may seem obvious, but hopefully there will be a useful tip or two here for JavaScript developers of every skill level. All examples are based on real production code I’ve reviewed, although (variable) names have been changed to protect the innocent.

Real-World JavaScript Anti-Patterns (Part One) (cache)

Le dernier cours a été difficile. Les étudiants voulaient essayer AngularJS sans avoir fait préalablement de JavaScript, ce qui s’est soldé par un échec pour faire un petit exercice suite au tutoriel. Après discussion, on a enchaîné sur un autre exercice uniquement JavaScript. Mais un peu trop compliqué, second échec de la matinée et moral en berne avant de se quitter. C’était malgré tout une bonne chose. Expérimenter l’échec fait partie de l’apprentissage, je pense qu’ils sont maintenant davantage conscients de leurs limites. Et ils sont frustrés de ne pas pouvoir essayer AngularJS par leur manque de connaissance, pas par le choix arbitraire du prof. Ça leur a donné envie de comprendre JavaScript.

J’avais commencé lors du cours sur JavaScript avec l’autre partie de la classe à accumuler des scripts à leur faire comprendre/commenter/enrichir. Je me suis résolu à en faire un dépôt sur Github qui pourrait être réutilisé. J’essaye de commenter au maximum et ça me permet de comprendre moi aussi pas mal de choses à ce langage. Vous pouvez participer avec votre propre expérience et corriger mes exemples en suivant les contraintes du README.

Les ressources qui m’ont été utiles pour reprendre JS de zéro ou presque :

La lecture de ces 3 séries m’a vraiment aidé à comprendre JavaScript, si vous en avez d’autres je suis preneur.

[Biologeek] Server-side, CSS et UX

Publié le 2015-02-09 11:00:00

Billet comportant les liens de veille technologique présentés aux étudiants dans le cadre d’une routine de mes cours.

Say what you will about server-rendered apps, the performance of your server is much more predictable, and more easily upgraded, than the many, many different device configurations of your users. Server-rendering is important to ensure that users who are not on the latest-and-greatest can see your content immediately when they click a link.

You’re Missing the Point of Server-Side Rendered JavaScript Apps (cache)

Ainsi que la réponse (cache) qui considère Angular comme étant le Bootstrap de JavaScript ♥ (merci la veille de Makina par Simon Georges). Pour aborder la génération de pages côté serveur.

An extensive CSS reference with all the important properties and info to learn CSS from the basics

CSS Reference

Plutôt bien fait et l’article sur Flexbox est relativement complet.

A login form with two fields, two buttons, and a link on it seems simple, right? Bog standard. It is, until you consider all the ways the simple act of logging in with those two fields can go wrong for the user. Let’s think.

The God Login (cache)

Ils sont intéressés par l’UI/UX donc c’est l’occasion d’engager la discussion.

[Biologeek] Google et Open-Source

Publié le 2015-02-08 11:00:00

In general, Google has a massive set of awesome tools for everything from deployment to monitoring; and a broad codebase with libraries that can do everything under the sun. However, that means that when you go outside of the Google environment, you’re suddenly stuck a bit out in the cold — the tools that you use inside Google can’t be used outside, so you have to have a completely separate infrastructure (both literal infrastructure, and code infrastructure).

Learning new things (cache)

À comparer avec Facebook qui a libéré React et Flux. Et qui s’apprête à publier React Native (cache), GraphQL et Relay. Chacune de ces technologies lui donnant un avantage compétitif non négligeable.

[Biologeek] Historique de travail

Publié le 2015-02-07 11:00:00

We assume everything we publish online will be preserved. But websites that pay for writing are businesses. They get sold, forgotten and broken. Eventually, someone flips the switch and pulls it all down. Hosting charges are eliminated, and domain names slip quietly back into the pool. What’s left behind once the cache clears? As I found with that pitch at the end of 2014, my writing resume is now oddly incomplete and unverifiable.

All My Blogs Are Dead (cache)

C’est également le cas pour les développeurs web. La plupart des sites sur lesquels j’ai travaillé n’ont pas été archivés et ont tout simplement disparus.

[raspberry-python] from python import tourism

Publié le 2015-02-06 21:06:00
 Quel est le lien entre Python et le tourisme? On explore le thème sur 3DFutureTech.

Francois
@f_dion

[carlchenet] Backup Checker 1.0, the fully automated backup checker

Publié le 2015-02-06 18:08:21
Follow me on Identi.ca  or Twitter  or Diaspora* Backup Checker is the new name of the Brebis project. Backup Checker is a CLI software developed in Python 3.4, allowing users to verify the integrity of archives (tar,gz,bz2,lzma,zip,tree of files) and the state of the files inside an archive in order to find corruptions or intentional of accidental…

[Biologeek] Accompagnement, non-devis et produits essentiels

Publié le 2015-02-06 11:00:00

Eh bien, on a mis en œuvre un mode de fonctionnement, dans lequel le joueur n’est plus dans l’attente de consignes. Avant, on tirait l’écran, on passait la vidéo, et on disait : "Dans telle situation, toi, tu dois jouer comme ça". Et puis un jour, entre 2007 et 2008, avant de se lancer dans la préparation des JO de Pékin, j’en ai eu ma claque de faire le maître d’école.

Je leur ai dit : "Voyez cette situation, d’habitude, je vous disais comment vous deviez la jouer ; eh bien là, vous allez me dire comment vous souhaitez la jouer". L’idée pour moi était de passer du jeu de l’entraîneur au jeu de l’équipe. De ne plus avoir des joueurs assis, qui se défaussent en cas d’échec sur le staff, mais des joueurs debout, prenant leur responsabilité dans l’aventure collective.

Claude Onesta : "Le handball est un sport un peu à part" (cache)

J’ai mis en ligne une page sur l’accompagnement qui a demandé l’écriture d’une autre sur les non-demandes de devis et enfin sur les produits essentiels. Tous les retours sont les bienvenus avant que je rende ces pages plus visibles.

[afpy.org] PyconFR'15 : Où nous emmèneras-tu cette année ?

Publié le 2015-02-06 07:55:43

[Biologeek] SNCF, retards et wifi

Publié le 2015-02-05 11:00:00

N’a-t-on pas besoin plutôt d’installer des prises qui fonctionnent dans tous les trains ? D’améliorer la maintenance de la signalisation pour éviter les retards ? De financer des formations du personnel à la communication de crise ?

Le wifi dans le TGV, une promesse depuis 2003, jamais tenue (cache)

Je me disais la dernière fois dans le train qu’en offrant le wifi lorsque le train est en retard ou arrêté il y aurait probablement moins de mécontentement.

[Biologeek] Des carottes et des poneys

Publié le 2015-02-04 11:00:00

Django Carrots est un atelier de programmation. Le temps d’un week-end, notre objectif est d’apprendre à des développeurs et développeuses, de niveau débutant à intermédiaire, les bases de la programmation en Python et de la création de sites Internet à l’aide de Django.

Atelier Django Carrots

Dommage que je ne sois pas sur Paris à ce moment là. J’aime ces initiatives non discriminantes.

[Biologeek] Markdown et Python

Publié le 2015-02-03 11:00:00

Suite des utilitaires utilisés pour générer ce site.

J’ai une arborescence de fichiers markdown que je transforme en fichiers HTML. Je commence donc par les récupérer :

def each_markdown_from(source_dir, file_name='index.md'):
    """Walk across the `source_dir` and return the md file path."""
    for root, dirnames, filenames in os.walk(source_dir):
        for filename in fnmatch.filter(filenames, file_name):
            yield os.path.join(root, filename)

Ce petit utilitaire parcoure un dossier et retourne le chemin d’accès s’il contient index.md. J’ai une seconde fonction qui me permet de parser un fichier markdown et de compiler le contenu avec ses méta-données :

def parse_markdown(file_path, extensions=None):
    """Parse an md file and returns its converted content and metadata."""
    if extensions is None:
        extensions = ['meta', 'codehilite']
    parser = markdown.Markdown(extensions=extensions)
    with codecs.open(file_path, 'r', 'utf-8') as source:
        content = parser.convert(source.read())
        return content, hasattr(parser, 'Meta') and parser.Meta or None

En combinant les deux, on obtient la boucle suivante :

for file_path in each_markdown_from(POSTS_PATH):
    content, metadata = parse_markdown(file_path)

Dans un prochain épisode, on verra comment utiliser les namedtuples à bon escient.

[Biologeek] ★ Cours IUT : Composants Web

Publié le 2015-02-02 11:00:00

Transmettre, apprendre : ces deux mots condensent le problème intellectuel de l’école aujourd’hui.
Ils indiquent d’abord un ordre de succession : apprendre a supplanté transmettre. La transformation fondamentale que l’école a connue au cours du dernier demi-siècle a constitué dans la substitution d’un système culturel centré sur la transmission à un système culturel centré sur l’acte d’apprendre, où tout est supposé se jouer entre l’individu et le savoir qu’il a le désir ou le besoin d’acquérir.
C’est cette révolution culturelle silencieuse qu’il s’agissait d’abord de comprendre.
Ses attendus pédagogiques sont archiconnus : l’école traditionnelle s’est trompée, elle a voulu transmettre des connaissances détenues par un maître en les inculquant à des élèves passifs. Cette pédagogie de l’imposition ne marche pas. Il faut lui substituer une pédagogie active faisant de l’enfant l’acteur de la construction de ses savoirs.

Transmettre, apprendre de Marie-Claude Blais, Marcel Gauchet et Dominique Ottavi

Je pensais qu’il suffirait de dépiler le backlog pour ce cours mais cela s’est avéré plus compliqué que prévu. Je suis en proie au doute depuis une semaine sur la position à adopter. Dérouler sur AngularJS comme demandé serait la solution de facilité mais j’ai l’impression qu’ils sont partis là-dessus par méconnaissance des alternatives (le marketing Google fonctionne assez bien). Du coup, je compte m’accorder une petite heure pour commencer sur les Web Components et sur les deux approches possibles (cache) avec d’autres détails plus techniques :

J’ai déjà écrit sur les web components et même expérimenté différentes approches pour une conférences. Cette extensibilité souffre de certaines critiques (cache) que je trouve parfaitement légitimes mais standardisée ou non la machine est en marche. Une bonne façon d’aborder également la discussion sous un angle politico-stratégique avec Google et Facebook pour rappeler l’importance du W3C. On débroussaillera aussi les différentes solutions sous l’angle de la performance, des mauvaises habitudes qu’ils pourraient apprendre avec AngularJS (cache) et des faux espoirs qu’ils pourraient avoir avec ReactJS (cache).

Une fois les bases posées, je compte leur laisser le choix de partir sur l’une des quatre solutions pour continuer et explorer les composants web. S’ils souhaitent ne faire finalement que du AngularJS sans approfondir spécifiquement les directives je suis d’accord aussi, à ce moment on explorera ensemble et je leur conseillerai pour la suite un livre sur le sujet écrit par des personnes de confiance qui n’hésitent pas à nous donner quelques astuces sur les directives et leurs tests (cache) justement.

Au niveau des petits items qui viennent compléter le backlog principal, ce sera l’occasion d’introduire Bootstrap avec notamment UI Bootstrap et React Bootstrap. L’un des participants à la formation m’a déjà fait part de son scepticisme vis-à-vis de Bootstrap en m’envoyant cet article (cache). Encore une discussion intéressante en perspective :-).

[Biologeek] Code, objectif et intelligence

Publié le 2015-02-02 11:00:00

Billet comportant les liens de veille technologique présentés aux étudiants dans le cadre d’une routine de mes cours.

Programming as it exists now forces us to model, but it does so in an unnatural way. And while teaching ourselves how to program will help us learn how to break systems down, it does so at the risk of focusing on the wrong things. We don’t want a generation of people forced to care about Unicode and UI toolkits. We want a generation of writers, biologists, and accountants that can leverage computers.

Coding is not the new literacy (cache)

J’aimerais bien avoir leur avis sur la pertinence de l’introduction du code à l’école.

And so, its purpose has become even more vague. People don’t know what a personal site is for anymore, so they go through the motions. They put the same things everyone else puts on there. A giant photo of a city. Something that says “Hi, I’m Dave.” Fancy scrolling effects. A bunch of social media icons. An unintelligible skills chart. A quickly neglected blog.

Asking why (cache)

Pour engager la discussion sur les portfolios classiques que je trouve relativement creux. Où est l’expérience ? Où sont les difficultés rencontrées ?

Les ingrédients les plus importants (l’équité de parole, l’empathie, la sur-représentation féminine) sont demeurés les facteurs décisifs (sur tous les autres) indépendamment du mode d’interaction employé. Les meilleures équipes étaient celles qui communiquaient beaucoup, d’une manière équitable et qui possédaient de bonnes compétences en compréhension des émotions des autres.

Pourquoi certaines équipes sont-elles plus intelligentes que les autres ? (cache)

Leur donner quelques pistes pour travailler ensemble sachant qu’ils préfèrent a priori se débrouiller seuls en cours.

[Biologeek] Popularité, stress et décentralisation

Publié le 2015-02-01 11:00:00

Why does it all happen? I think the major problem lies in the fact that we became the consumers of high volume of information and we can’t process all of it. There is too much noise and we don’t have time to properly analyze the content we are served and check where it comes from. And our brains work faster, if we feed them with clear numbers. On the other hand, having a big number of followers is just tempting for authors.

Popularity-driven development (cache)

L’un des avantages de ne plus utiliser un service centralisé comme Twitter au profit de RSS/Atom est de ne plus pouvoir avoir de statistiques sur les lecteurs. Publier pour le plaisir de partager uniquement.

[Biologeek] FinishUp Weekend

Publié le 2015-01-31 11:00:00

Join writers, designers, developers, photographers, engineers and other awesome people to finish what you’ve already started.

FinishUp Weekend

Je suis presque jaloux de ne pas avoir inventé ce concept. Les anti-hackathons ?

[afpyro] AFPyro à Bruxelles (BE) - le 31 Janvier

Publié le 2015-01-31 00:00:00

Dear Pythonista friends, write down in your agenda the date of the next AFPyro!

The next Aperos Python Belgium will take place on saturday, January 31st in Brussels, during the FOSDEM conference that takes place at ULB from 31st January to 1st February.

In addition to the regulars of AFPyro, we are also pleased to meet the attendees of FOSDEM using Python.

As usual, you can come just for drinking and sharing one (or many) drinks or if you wish, you can also register for the meal that follows, in a near place, at “Chez Léon” for 20:30, rue des Bouchers 18, B-1000 Brussels.

Meeting from 19:45, on first floor of Delirium cafe, Impasse De La Fidélité 4, 1000 Brussels.

If you are a FOSDEM attendee, you can meet us at the Python devroom, after the end of lightning talks, (H.1301 room) to go to Delirium cafe together.

Please sign up in order to book the place: http://doodle.com/ngdeesgbr6dcx3f5

Further information about the next AFPyros in Belgium: Aperos Python Belgium


Amis Pythonistes, notez dans vos agendas la date du prochain AFPyro !

Le prochain Aperos Python Belgium se tiendra le samedi 31 Janvier à Bruxelles, lors du FOSDEM qui se tient à ULB du 31 Janvier au 1 Février.

En plus des habitués de l’AFPyro, nous attendons également avec plaisir les participants du FOSDEM qui utilisent Python.

Comme chaque fois, vous pouvez venir juste pour l’apéro et partager un (ou des) verres, ou si vous le souhaitez, vous inscrire également pour le repas qui suivra, “Chez Léon” à 20h30, rue des Bouchers 18, B-1000 Bruxelles.

Rendez-vous à partir de 19h45, au premier étage du Délirium café, Impasse De La Fidélité 4, 1000 Brussels.

Si vous participez au FOSDEM, nous vous donnons rendez-vous à la salle Python-devroom, après la fin des lightning talks, (salle H.1301), afin d’aller au Délirium café ensemble.

Pour dimensionner au mieux la réservation, merci de vous inscrire sur: http://doodle.com/ngdeesgbr6dcx3f5

Toutes les infos des prochains AFPyros en Belgique: Aperos Python Belgium

[Biologeek] Langages d’apprentissage

Publié le 2015-01-30 11:00:00

It’s with all of this in mind that my recommended language for teaching beginners is now Javascript. I know, I know, it’s quirky and sometimes outright weird, but overall it’s decent and modern enough. More importantly it’s sitting on top of an unprecedentedly ubiquitous cross-platform toolkit for layout, typography, and rendering. Want to display UI elements, images, or text? Use HTML directly. Want to do graphics or animation? Use canvas.

Retiring Python as a Teaching Language (cache)

Je ne pense pas qu’il ne faille apprendre qu’un seul langage, bien au contraire. Apprendre Python pour découvrir la programmation et les algorithmes de bases est intéressant, apprendre C pour découvrir les notions de ressources bas niveau est intéressant, apprendre HTML/CSS/JS pour faire des interfaces est intéressant aussi. Évitons de partager nos propres œillères.

[Biologeek] Concepteurs utilisateurs

Publié le 2015-01-29 11:00:00

Il faudrait que les concepteurs soient contraints d’utiliser leurs réalisations pendant quelques mois. Spéciales dédicaces aux architectes de la gare SNCF de Montpellier et de la Villa Méditerranée marseillaise.

[Biologeek] ★ Prospective Python

Publié le 2015-01-28 11:00:00

J’ai retrouvé un vieux brouillon de mon intervention aux rencontres Django (novembre 2012) donné sous le titre « Pourquoi je ne veux plus utiliser Django ? ». Je le publie en l’état et je reviens dessus à la fin.

Titre clairement provocateur pour cette intervention aux rencontres Django de Toulouse qui est né d’un ressenti que j’ai depuis quelques mois/années. Je vais essayer de détailler les doutes que j’ai sur le futur de Django et Python. Je vois plusieurs défis majeurs pour les mois à venir :

Python 3

Python 3.0 est sorti il y a 4 ans quasiment jour pour jour (3 décembre). Qui l’utilise aujourd’hui ? Qui a un projet web en production qui repose sur cette version ? Très peu. Principalement car la rétro-compatibilité n’a pas été conservée pour cette version ce qui pose clairement des problèmes de mise à jour des bibliothèques sans lesquelles un projet ne peux pas se faire aussi rapidement qu’en 2.X. C’était un risque énorme qui a été pris et la communauté en paye le prix fort. Combien faudra-t-il encore d’années pour que cela change ? Quels sont les gains réels ? Qu’en est-il de Pypy ?

Et quitte à réapprendre une partie du langage, est-ce qu’il ne faudrait pas aller voir ce qui se fait ailleurs ?

Node.js

Node.js is a tumor on the programming community, in that not only is it completely braindead, but the people who use it go on to infect other people who can’t think for themselves, until eventually, every asshole I run into wants to tell me the gospel of event loops. — Ted Dziuba, Fibonacci’s lover

Phénomène de mode ou futur proche ? Il y a énormément de côtés plaisants à Node.js : notion de callbacks, promesse d’une validation des données partagée entre le client et le serveur, performances, etc. Par contre le manque de maturité est vite bloquant aussi : traceback incompréhensibles, outils insuffisants, manque de bonnes pratiques et de retours d’expériences, etc. Certains ont clairement fait le choix de s’engager dans cette voie mais ça me rappelle bien trop l’engouement autour de Ruby on Rails il y a quelques années auquel j’ai résisté et dont je me félicite aujourd’hui (ce n’est pas une critique de RoR sans lequel Django ne serait très certainement pas ce qu’il est aujourd’hui).

Flask

OH: "Microframework (n): A small amount of crap. See also Framework (n): A large amount of crap." — @nikita_ppv

Django se complexifie. Release après release. L’héritage des class-based views est assez symptomatique du problème (disclaimer : j’ai participé à ce sac de nœuds…) de la généralisation à outrance qui nuit au framework. Les alternatives comme Flask sont alléchantes mais il y a des frameworks basés sur Node.js qui arrivent aussi et qui apportent des réponses aux problématiques de temps-réel, ou plutôt…

Temps-humain

J’ai abandonné le terme temps-réel qui ne veut pas dire grand chose au profit de celui-ci qui repose sur la perception humaine de rapidité que l’on peut avoir avec une interface et qui me semble beaucoup plus proche de la réalité. Il est toujours relativement compliqué d’utiliser les websockets avec Django et même Python. Comment développer les applications interactives de demain ?

Et après ?

It’s so much easier to talk about how something sucks than to talk about how it could be awesome. Negativity is for the lazy. — @defunkt

Parlons d’avenir et de web. Il y a eu 2/3 évolutions ces dernières années dans les implémentations et leurs usages (car les standards existent depuis un moment) permettant d’introduire de nouveaux paradigmes dans le développement d’applications. Voici quelques exemples de pistes à explorer :

  • API-first : le modèle MVC a pris du plomb dans l’aile avec la multiplication des périphériques et des moyens de consommation des données, il faut repenser la gestion de la donnée ;
  • asynchronicité : certaines requêtes mettent plus de temps que d’autres mais ce qui importe c’est la perception qu’à le visiteur de la réactivité de votre application, il manque des outils permettant de gérer ces cas aux limites qui font pourtant parfois la valeur réelle de l’application ;
  • single page apps : de plus en plus de sites se développent en n’utilisant qu’une seule page, il y a même un livre dédié à ce concept, or les frameworks ont bien souvent un contrat unique de requête/réponse par page qui répond mal aux exigences d’une mise à jour partielle de page ;
  • mobilité : le web est dans de plus en plus de poches, à portée de doigts, avec une inégalité des accès au réseau en fonction de la localisation. Il faudrait que les frameworks soient adaptés à ces nouveaux usages avec du stockage local et de la synchronisation, avec des rendus adaptés aux vitesses de connexion, avec des concepts moins gourmands en énergie et en bande passante.

J’espère que ces pistes seront partie prenante des discussions relatives à Django 2.0 ou de nouveaux frameworks que j’espère en Python. Ces nouveaux paradigmes me redonneraient à coup sûr l’envie de développer en utilisant Django ;-).

Retour en 2015

Malheureusement, 2 ans plus tard, j’ai toujours les mêmes doutes sur le futur de Python/Django. J’expérimente avec ReactJS depuis maintenant un an. Relire ce tweet me fait sourire de naïveté :

ReactJS is to Web Components what microformats were to Semantic Web. And I can’t conclude anything from that.

Il y a une effervescence dans la communauté JavaScript qui serait grisante si elle ne cessait de réinventer la roue. Plusieurs fois. Mais force est de constater qu’il y a des pistes intéressantes dans ReactJS : ils ont justement « repensé la gestion de la donnée » avec Flux, ils permettent l’asynchronicité, on peut faire des SPA sans se prendre la tête, ils expérimentent avec la mobilité (React Native et GraphQL/Relay ont été annoncés ce jour). Autant d’approches que je n’ai pas vues dans la communauté Python. Je ne compte pas dire au revoir à Python (cache) car je prends toujours beaucoup de plaisir à coder avec mais je commence à me poser de sérieuses questions sur sa pertinence pour des projets Web réactifs (huhuhu).

[Biologeek] Merci pour votre attention

Publié le 2015-01-28 11:00:00

If you’re in the audience at a scientific conference, what do you really want? For me, that’s quite simple: understanding the papers that seem relevant to me. So as a speaker, focus not on what you want, but what the audience wants. Your personal goal is to get your message across to those researchers for whom it is relevant. Note in particular that attention is not a part of your goal. Sure, in order to understand a message, people will likely need to pay attention, but solely capturing (or stealing) that attention does not reach your goal. Furthermore, if people get your message without paying attention, that seems like a win–win situation. Therefore, instead of focusing on getting attention, focus on maximizing the use of the attention you get.

Thank you for your attention (cache)

Remarques intéressantes sur l’attention et la clôture d’une intervention.

[afpyro] AFPyro à Lyon - mercredi 28 janvier

Publié le 2015-01-28 00:00:00

Un Afpyro aura lieu le mercredi 28 janvier à partir de 19h à l’Antre Autre - 11 rue Terme - 69001 Lyon.

Une présentation sur l’utilisation et les dernières fonctionnalités de Radicale sera donnée par Guillaume Ayoub.

L’Antre Autre est un lieu où nous pouvons discuter autour d’un verre, et, pour ceux qui le souhaitent, prendre un repas.

Pour se rendre à l’Antre Autre :

  • en métro : arrêt Hôtel de Ville
  • en bus : lignes C13 et C18 arrêt Mairie du 1er ou lignes 19, C14 et C3 à l’arrêt Terreaux
  • en vélo’v : stations Place Sathonay, Carmélites Burdeau, Place de la paix

[tarek] Charity Python Code Review

Publié le 2015-01-27 19:23:00

Raising 2500 euros for a charity is hard. That's what I am trying to do for the Berlin Marathon on Alvarum.

Mind you, this is not to get a bib - I was lucky enough to get one from the lottery. It's just that it feels right to take the opportunity of this marathon to raise money for Doctors without Borders. Whatever my marathon result will be. I am not getting any money out of this, I am paying for all my Marathon fees. Every penny donated goes to MSF (Doctors without Borders).

It's the first time I am doing a fundraising for a foundation and I guess that I've exhausted all the potentials donators in my family, friends and colleagues circles.

I guess I've reached the point where I have to give back something to the people that are willing to donate.

So here's a proposal: I have been doing Python coding for quite some time, wrote some books in both English and French on the topic, and working on large scale projects using Python. I have also gave a lot of talks in Python conferences around the world.

I am not an expert of any specific fields like scientific Python, but I am good in "general Python" and in designing stuff that scales.

I am offering one of the following service:

  • Python code review
  • Slides review
  • Documentation review or translation from English to French

The contract (gosh this is probably very incomplete):

  • Your project have to be under an open source license, and available online.
  • I am looking from small reviews, between 30mn and 4 hours of work I guess.
  • You are responsible for the intial guidance. e.g. explain what specific review you want me to do.
  • I am allowed to say no (mostly if by any chance I have tons of proposals, or if I don't feel like I am the right person to review your code.)
  • This is on my free time so I can't really give deadlines - however depending on the project and amount of work I will be able to roughly estimate how long is going to take and when I should be able to do it.
  • If I do the work you can't back off if you don't like the result of my reviews. If you do without a good reason, this is mean and I might cry a little.
  • I won't be responsible for any damage or liability done to your project because of my review.
  • I am not issuing any invoice or anything like that. The fundraising site however will issue a classical invoice when you do the donation. I am not part of that transaction nor responsible for it.
  • Once the work will be done, I will tell you how long it took, and you are free to give wathever you think is fair and I will happily accept whatever you give my fundraising. If you give 1 euro for 4 hours of work I might make a sad face, but I will just accept it.

Interested ? Mail me! tarek@ziade.org

And if you just want to give to the fundraising it's here: http://www.alvarum.com/tarekziade

[Biologeek] Systèmes réactifs

Publié le 2015-01-27 11:00:00

We believe that a coherent approach to systems architecture is needed, and we believe that all necessary aspects are already recognised individually: we want systems that are Responsive, Resilient, Elastic and Message Driven. We call these Reactive Systems.

The reactive manifesto (cache)

Je me demande dans quelle mesure ce type de système est atteignable sans introduire une trop grande complexité/intelligence.

[AFPy-Nantes] Compte-rendu des conférences : Pyramid, Générateurs et co-routines

Publié le 2015-01-26 23:00:00

Pour ce premier meetup de janvier, deux sujets ont été présentés devant une quarantaine de personnes visiblement intéressées et attentives. Vous trouverez dans cet article un résumé de ce qui a été proposé, ainsi que les liens vers les présentations.

Pyramid

Intervenant : Gaël

Pyramid est un framework web développé en Python. On peut le classer entre Bottle (plus minimaliste) et Django (plus gros et plus monolithique). Il est nativement WSGI, facilement extensible et laisse beaucoup de souplesse dans les choix techniques et la conception.

Vous verrez dans les slides qu'un classique "Hello World", servi en HTTP, est très simple à réaliser.

Le premier composant à appréhender est le configurateur, qui permet de configurer une application Pyramid (et notamment de gérer les routes).

Le routeur a la particularité de pouvoir fonctionner de deux manière différentes :

  • par mapping des URLs sur des vues
  • en mode traversal (les différents fragments de l'URL permettent traverser des classes).

Le routeur permet aussi classiquement de faire de la résolution d'URL, ce qui évite à avoir à répéter des URLs dans les templates par exemple.

Un autre concept assez intéressant du framework est l'utilisation des exceptions. Il est notamment possible de lever des exceptions HTTP ce qui permet de gérer les erreurs sous forme de codes du protocole HTTP (500, 403).

Le concept de factory permet de récupérer/travailler sur un objet avant qu'une vue ne soit invoquée, ce qui rend le code de la vue plus simple. Une factory peut être factorisée et utilisée dans plusieurs vues.

Le rendu d'une vue se fait via par l'intermédiaire d'une renderer et une vue peut être associée à plusieurs renderer (par exemple un rendu json et un rendu HTML via une template). On pourrait aussi avoir plusieurs renderers utilisant des moteurs de templates différents (Chameleon, Jinja, Mako, ...). Il est aussi possible de créer son propre renderer (par exemple pour renvoyer un fichier csv, un pdf, ...).

Le concept de tween permet d'intercepter une requête, puis la réponse pour analyser ou modifier l'une ou l'autre. Un cas pratique classique est l'utilisation d'une barre de debuggage permettant d'analyser le comportement de l'application.

Un système d'évènements permet d'associer une fonction à un évènement. Par exemple : BeforeRender est déclenché avant le rendu d'une template et laisse la possibilité d'injecter des données dans le context passé à la template.

Par ailleurs, Pyramid est modulaire et peut être facilement étendu via la fonction magique includeme. Il est aussi possible d'étendre l'objet request pour lui ajouter des méthodes par exemple, ce qui peut s'avérer pratique dans certains cas.

Beaucoup de modules supplémentaires sont fournis nativement :

  • Gestion de l'authentification et d'autorisations
  • Gestion et service des fichiers statiques
  • Gestion des sessoins
  • Gestion du cache HTTP
  • Gestion de prédicats de vue
  • Gestion de trasaction étendue (par exemple pour éviter un envoi de mail si une requête SQL a précédemment échoué)
  • ...

L'écosystème de Pyramid est assez riche et varié ; plus de 250 packages sont indiqués comme étant compatibles Pyramid sur pypi.

Il existe entre autres des CMS basés sur Pyramid : notamment substanced (basé sur la ZODB) et kotti.

Les slides de la présentation sont disponibles ici : Présentation de Pyramid

Générateurs et coroutines

Intervenant : Hugo

Les itérateurs / iterables

Le concept d'itérable est simplement une généralisation du concept de séquence ou de liste. Un itérable est défini par le fait qu'il est possible d'itérer dessus, par exemple dans une boucle for ... La syntaxe [] permet de définir ce qu'on appelle une liste en compréhension. L'iterable est un concept pratique mais il a le défaut de stocker tous ses éléménts en mémoire.

Les générateurs

Un générateur est un itérable qui a la particularité de générer les résultats à la volée. Syntaxiquement une expression génératrice peut s'écrire de la même manière qu'un itérable classique, en remplaçant les [] par des ().

Dans un générateur, on utilise le mot clé yield à la place de return. La première différence est que l'appel de la fonction renverra non pas un résultat mais un générateur, sans que la fonction soit exécutée. La fonction est exécutée à partir du moment où on itère sur le générateur. Le premier appel à la méthode next permet d'exécuter la fonction jusq'au premier yield. À l'exécution du yield, le générateur rend la main à la fonction appelante et s'arrête (mais l'état de son exécution est enregistré). Dans la fonction appelante, chaque appel de la méthode next relance donc une exécution du générateur, de l'état où il s'était arrêté jusqu'au yield suivant.

Plusieurs intérêts notables :

  • l'évaluation paresseuse limite l'allocation mémoire
  • elle permet aussi de travailler avec une vision "flux de données" (en chainant plusieurs générateurs comme on chaine des commandes unix par exemple cat foo.txt | grep bar)
  • possibilité de faire du pseudo-asynchrone de manière synchrone

Les co-routines

Une co-routine est à peu prêt la même chose qu'un générateur à la différence près qu'elle dispose d'une méthode supplémentaire send qui permet à la fonction appelante d'envoyer des données à la co-routine. Cela permet d'influer sur son comportement depuis la fonction appelante.

La vision est inversée : dans une chaine de co-routines, la fonction appelante pousse les données vers la fonction appelée. Il est aussi possible de diffuser des données à plusieurs co-routines.

L'application principale des co-routines est de faire de la programmation pseudo-asynchrone tout en gardant une lisibilité proche du code synchrone classique. L'autre avantage est que la co-routine est "maitre" de son état et sait à quel endroit et dans quel état elle peut être interrompue et reprendre son exécution.

Le mot clé yield from, arrivé en Python 3, permet de faire de la délégation de générateurs, c'est à dire de créer une sorte de tunnel bidirectionnel entre un générateur et un sous-générateur.

Les slides de la présentation sont disponibles ici : Générateurs et co-routines

Merci à tous pour votre présence, on se retrouve au prochain barcamp le 24 mars !

[Biologeek] ★ Cours IUT : Construction collaborative

Publié le 2015-01-26 11:00:00

Aider chaque élève à organiser ses connaissances et à progresser dans sa formation, à devenir compétent, c’est lui apprendre à créer des ensembles, des groupes, à prendre conscience de l’existence de patterns. La première activité cognitive, quelque soit le niveau scolaire ou la discipline, est de Trier-Classer-Ranger.

Faire toujours la même chose à bon escient, c’est être compétent. (cache)

On a débuté le cours avec un IceBreaker (mad, sad, glad) qui apporte beaucoup d’informations au final sur le caractère des participants dès le premier échange. J’ai ensuite formé trois colonnes sur le tableau en les invitant à venir les compléter avec des post-it :

  • Compétences
  • Expériences
  • Appétences

Des choses intéressantes sont sorties comme une forte envie de développer mais aussi de créer une agence web avec des compétences allant de monter un réseau à scrum en passant par Prestashop, Joomla ou Wordpress. Cette fois les niveaux semblent plus proches mais les horizons différents ce qui m’intéresse beaucoup en termes de partage de cultures et d’entraide.

J’ai ensuite proposé que l’on définisse ensemble ce que l’on mettait derrière Web Mobile avec trois nouvelles colonnes :

  • Web Mobile
  • ?
  • !Web Mobile

Cela a permis de discuter de pas mal de concepts, allant du paiement sans contact au streaming vidéo en passant par Objective-C ou PhoneGap. Cette tentative de définition était avant tout un prétexte à la discussion. J’ai pu expliquer certains des concepts qui n’étaient pas forcément maîtrisés par tous comme les API natives ou les latences réseaux. J’ai essayé d’encourager certains à expliquer aux autres ce qu’ils entendaient par les termes qu’ils énonçaient. Contrairement à mon positionnement de sachant lors du premier groupe, je souhaite plus aller vers de la facilitation et de la discussion cette fois-ci, j’estime qu’ils ont les bases suffisantes pour cela.

Une fois gagné en fluidité, on est passé à « ce que l’on veut faire ensemble », sans aucune contrainte de ma part. On a simplement listé ce dont ils avaient envie pour ce cours. J’ai donné une approximation des tailles relatives entre les cartes pour qu’ils puissent ensuite les classer par priorité descendante en connaissance de cause. Nous sommes arrivés au backlog suivant :

  1. AngularJS
  2. Performance Web
  3. PHP-MySQL
  4. Canvas
  5. NodeJS
  6. UI/UX

Avec une listes additionnelle de petits items à insérer au moment fortuit ou dans les temps-morts :

  1. AJAX/JSON
  2. Bootstrap
  3. Flexbox
  4. Veille techno
  5. Mobile-First
  6. SASS/LESS

Au final, ça n’a pas tout a fait à voir avec le Web Mobile (ni mes compétences !) mais l’expérience m’intéresse pour voir ce que cela produit en termes d’implication et de curiosité.

On a terminé par établir clairement les règles du jeu. S’il y a une seule chose que j’ai retenu de l’intervention de Dan Mezick c’est qu’il est important de définir des règles claires dès le début et il se trouve que j’ai toujours une profonde aversion pour les notes. En combinant les deux, j’ai proposé aux élèves d’établir leur propre système de notation. Leur choix s’est porté vers l’auto-évaluation (après avoir hésité sur un projet suivi qui demandait de regrouper l’ensemble des technologies quitte à produire un patchwork artificiel).

Ils repartent avec trois tâches à effectuer pour la fois prochaine :

  • je vais essayer de mettre en place une routine (voir lien en extrait) de veille technologique en leur proposant de revenir avec 3 liens par séance à commenter pour commencer le cours ;
  • j’ai expliqué pour chaque carte la matière avec laquelle il fallait arriver en cours (avoir lu le tutoriel d’AngularJS, avoir fait une pré-analyse des performances pour un site de leur choix, etc) ;
  • m’envoyer par email l’une de leurs réalisations.

[Biologeek] Menace commune

Publié le 2015-01-26 11:00:00

If killing large numbers of civilians does not have a military impact, then what, Wilson asks, is the purpose of keeping nuclear weapons? We know they are dangerous. If they turn out not to be strategically effective, then nuclear weapons are not trump cards, but time bombs beneath our feet.

Why did Japan surrender? (cache)

Les faits, aussi récents qu’anciens, nous montrent qu’il faut une menace commune pour que les peuples se soudent et œuvrent ensemble. Or nous en avons deux : le nucléaire et le changement climatique. Quelles chances pour l’Humanité ! L’Homme est semble-t-il aussi la première espèce terrestre qui peut sciemment décider de sa survie…

One answer to the Fermi paradox is that nobody makes it through — that climate change is fate, that nothing we do today matters because civilization inevitably leads to catastrophic planetary changes.

Is a Climate Disaster Inevitable? (cache)