Quantcast
Channel: AFPy's Planet
Viewing all 3409 articles
Browse latest View live

[Biologeek] S’adapter à la luminosité ambiante

$
0
0

Ambient light detection is one of those features that looks great in simple demos, but which we struggle to put to practical use. It’s not new – many satnav systems automatically change the contrast for driving at night or in tunnels, and our laptops may alter the screen brightness or keyboard backlighting to better adapt to our surroundings. Using web technologies we can adapt our presentation to be better suited to ambient light levels.

Making Sites More Responsive, Responsibly (cache)

Je vous ai déjà parlé de f.lux (prenez 2 minutes pour lire les conditions d’utilisation quand même) pour adapter la luminosité/le rendu de votre écran. Il se trouve qu’il existe aussi des plugins pour changer le thème de votre éditeur. Ça me donne envie d’essayer les événements de lumière ambiante en JavaScript (uniquement disponible sous Gecko/Firefox à ce jour).


[Biologeek] Acheter des polices

$
0
0

Je connaissais le livre Practical Typography de Matthew Butterick depuis un moment et j’apprécie vraiment le travail qu’il a fait à la fois en terme de fond et de forme. Aussi lorsque j’ai voulu le remercier il m’a semblé naturel de me tourner vers ses polices comme il le recommande. Vous pouvez retrouver Equity sur ce site et Triplicate pour l’histoire familiale.

Je suis allé plus loin en utilisant Equity pour mon éditeur de textes longs, mes mails et mon agrégateur. Puis Triplicate pour mon éditeur de code, mon terminal et IRC (il y a une variante pour le code). Je suis vraiment très satisfait du résultat.

P.S. : J’ai découvert que les typographes sont des perfectionnistes lors des rencontres de Lure… et à quel point la réalisation d’une police demande du travail.

Mise à jour : à la demande de Nicolas Charlery, une capture avec Equity et une autre avec Triplicate.

[Biologeek] Esthétique et API

$
0
0

Je n’ai finalement pas pu résister à une réécriture partielle de mon outil dans le but d’avoir une API plus jolie tirant partie des dernières possibilités de fabric :

$ fab -l
Available commands:

    generate_all     GENERATE ALL THE THINGS!!! WARNING: boolean param.
    caches.generate  (Re)generate caches MD files into HTML files.
    caches.new       Cache the given `url` into a MD and a HTML file.
    family.generate  Generate the family history.
    notes.generate   Generate notes and archives for the stream.
    notes.new        Generate the template file to post a note.
    notes.publish    Publish the daily note after generating the feed.
    pages.generate   Generate all static pages.
    posts.generate   Generate posts and archives for the blog.
    posts.publish    Publish the article after generating the feed.
    server.commit    Add/rm files and then commit with the `message`.
    server.deploy    Push/pull the repository from the production server.
    server.errors    Display latest 200 errors lines from production.
    server.infos     Display infos (mail+web) about disk usage in prod.
    server.log       Display access logs continuously from production.

Pour initier cette note :

$ fab notes.new:"Esthétique et API"
[larlet@ssh.alwaysdata.com] Executing task notes.new
[localhost] local: open -a "iA Writer" "larlet.fr/david/stream/2015/01/16/index.md"

Done.

Pour la déployer :

$ fab notes.publish
[larlet@ssh.alwaysdata.com] Executing task notes.publish
Done: http://larlet.dev:8089/david/stream/2015/
Done: http://larlet.dev:8089/david/
Feed:  Livre et diffusion (2015-01-07)
Feed:  Cours IUT : jQuery et Bonus (2015-01-06)
Feed:  Publier, enseigner et cultiver (2015-01-03)
Feed:  Rétrospective Mozilla (2014-12-27)
Feed:  Père Noël (2014-12-22)
Feed: Acheter des polices (2015-01-15)
Feed: Sadapter à la luminosité ambiante (2015-01-14)
Feed: Régulateur de consommation (2015-01-13)
Feed: Teenagers, AirDrop et P2P (2015-01-12)
Feed: Code et écriture (2015-01-11)
Feed: Devenir conférencier (2015-01-10)
Feed: Unanimisme émotionnel (2015-01-09)
Feed: Kilian Jornet et Aconcagua (2015-01-08)
Feed: Bouncer IRC et backlog (2015-01-07)
Feed: Résister à la généralisation (2015-01-06)
Feed: Cacher le Web (2015-01-05)
Feed: Illettrisme technologique (2015-01-04)
Feed: Écoutés en 2014 (2015-01-03)
Feed: Économie de partage vs. économie de location (2015-01-02)
Feed: Publication quotidienne (2015-01-01)
[localhost] local: hg addremove
adding larlet.fr/david/stream/2015/01/15/index.html
adding larlet.fr/david/stream/2015/01/15/index.md
[localhost] local: hg ci -m "Add new note"
[localhost] local: hg push
pushing to ssh://hg@bitbucket.org/david/larlet.fr
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 5 changes to 5 files
[larlet@ssh.alwaysdata.com] run: hg pull -u -R /home/larlet/www
INFO:ssh.transport:Connected (version 2.0, client OpenSSH_5.5p1)
INFO:ssh.transport:Authentication (publickey) successful!
INFO:ssh.transport:Secsh channel 1 opened.
[larlet@ssh.alwaysdata.com] out: pulling from ssh://hg@bitbucket.org/david/larlet.fr
[larlet@ssh.alwaysdata.com] out: searching for changes
[larlet@ssh.alwaysdata.com] out: adding changesets
[larlet@ssh.alwaysdata.com] out: adding manifests
[larlet@ssh.alwaysdata.com] out: adding file changes
[larlet@ssh.alwaysdata.com] out: added 1 changesets with 5 changes to 5 files
[larlet@ssh.alwaysdata.com] out: 5 files updated, 0 files merged, 0 files removed, 0 files unresolved

Done.
Disconnecting from ssh.alwaysdata.com... done.

Une doc. Deux lignes. Futile ? Certainement, mais c’est comme un changement de police, ça contribue à l’amélioration d’une expérience d’écriture en la rendant plus fluide.

[Biologeek] ★ Formations et explorations

$
0
0

Je trouve que les formations techniques traditionnelles apportent très peu de valeur. Se retrouver entre 4 murs pendant 7/8h sur 4 jours n’apprend pas grand chose, ni sur la techno, ni sur ses pairs. Au mieux cela donne des pistes qu’une personne très motivée pourra explorer par la suite. Seule. En essayant de se raccrocher à un support de cours forcément insuffisant.

Partant de ce constat, partagé par les membres de l’équipe, on explore différents formats. Vincent teste les formations en immersion (la première est à Naples début mars), Stéphane cherche des lieux pour accueillir des formations itinérantes a.k.a. WalkingDev et pour ma part je souhaite explorer les formations continues. J’ai pu observer les bénéfices de travailler sur un temps plus long :

  • Les concepts peuvent être intégrés entre les sessions, il n’est pas impératif de tout comprendre immédiatement. Cela demande une plus grande implication de la part des participants mais les résultats sont là.
  • Les problèmes concrets sont rencontrés, on ne reste pas confinés à des exemples théoriques ou des problématiques tirées de ma propre expérience, il s’agit de discuter de contraintes propres à chaque participant.
  • La formation est réajustée plus facilement en fonction des besoins, cela donne une certaine flexibilité d’une séance sur l’autre pour s’adapter en fonction des niveaux et des appétences.
  • L’étalement dans le temps rend la répétition moins fastidieuse, et la répétition (combinée à la pratique) reste la base de l’apprentissage. Elle rend possible les interactions entre participants sur la durée pour progresser ensemble.

A priori, le coût d’une telle formation n’est pas plus élevé qu’une formation ordinaire. Ce ne sont plus 4 jours mais 8 demi-journées réparties sur 2 mois par exemple. Reste la problématique de la logistique car il est plus simple de trouver une salle sur un temps court et qu’il est plus économique (et écologique) de limiter les déplacements aussi. La seule réponse que j’ai à cela est de travailler avec des petits groupes qui ne nécessitent pas d’avoir forcément une salle dédiée et de rester sur des déplacements locaux.

Qui serait motivé et par quoi ? Je peux me déplacer sur Paris, Lyon, Marseille, Montpellier ou autour d’Arles. Je peux transmettre/partager sur Python/Django (avancés), HTML5/CSS3/ES6 (basiques), Performances web (mobile), Workflows de travail (tactique) et Lean (stratégique). L’idéal serait une ou deux petites équipes qui souhaitent améliorer la qualité de leurs produits ou monter en compétence sur une technologie. Je reste ouvert à d’autres propositions.

[Biologeek] Effacez mes (méta-)données

$
0
0

Mais ce qui constitue la vraie nouveauté, l’information principale du programme PRISM et de ses suites, c’est que l’information recherchée n’est pas ce que nous disons, mais à qui nous le disons. Le contenu de nos conversations reste intéressant bien sûr (surtout pour les entreprises qui ont intérêt à tout savoir de nos vies), mais pas tellement pour les états. Ce que veulent les états, c’est tout savoir de nos réseaux.

[…]

C’est pour cette raison que j’ai beaucoup de mal à supporter les réponses habituelles à La Grande Question du Je N’ai Rien À Cacher. Parce que la question n’est plus « pourquoi doit-on se protéger », mais bien « pourquoi doit-on protéger ceux avec qui on échange ».

Rien à cacher (cache)

C’est une requête que je souhaite faire depuis longtemps à mes correspondants : veuillez effacer nos échanges s’ils ont eu lieu sur des plateformes comme Gmail, Twitter (incluant DM) ou n’importe quel service centralisé. Ces échanges ne servent plus qu’à des algorithmes qui nous profilent tous les deux. Merci.

[Biologeek] Améliorer un produit

$
0
0

Your job is to improve our product for our users. If you want to get technical about it, your job is to improve our product for our users in a way that improves the key metrics of the company. But honestly, you don’t always have a lot of control over that second bit. You do, however, have an enormous amount of control over the first bit!

Your Job Is Not to Write Code (cache)

C’est la raison pour laquelle j’ai du mal à me rapprocher de tous ces mouvements craftsmanship qui consistent à se regarder le nombril. Votre code est beau, testé et déployé dans la minute. Soit. Et il sert à quoi au fait ?

[Biologeek] Squatting et transit

[Biologeek] Automatisation et topographie

$
0
0

David Mentré réagissait par mail à ma précédente note sur le régulateur de consommation (vous êtes d’ailleurs invités à le faire pour l’instant, je ne sais pas encore si je vais ouvrir la liste de diffusion aux notes).

« régler la vitesse entre 105 et 120 sans dépasser les 5 litres aux 100 kilomètres »

Bonne idée. Mais les accélérations rendraient cela probablement impossible (car trop de consommation). Et même si c’est possible, cela aurait probablement des impacts sur la sécurité (accélération impossibles), même si on peut envisager des débrayages automatiques en cas d’appui violent sur une pédale (comme pour les régulateurs actuels).

« Au passage, je ne comprends pas qu’il puisse y avoir une telle diversité dans les formes de voitures alors qu’il ne devrait y en avoir qu’une par catégorie dont l’aérodynamisme est optimal… »

Ce serait un peu monotone non ? Je ne suis pas spécialement pour la société de consommation actuelle, mais un soucis écologique n’empêche pas design et originalité.

Considérant que le GPS de ma voiture connait la topographie du trajet ainsi que les limitations de vitesses, il est possible qu’il arrive à avoir des accélérations raisonnées (plus longues, plus utiles aussi, prise d’élan, etc).

Pour ce qui est du design et de l’originalité, je suis persuadé qu’il y a déjà bien à faire sans avoir à modifier la forme (habillage et éclairage par exemple mais aussi interactions entre véhicules proches).


[sciunto] Don du mois : archlinux

$
0
0

Je trouve intéressante l'idée de Sam et Max de présenter les organisations pour lesquelles on a donné quelques euros (il n'y a pas de petit don). Je me lance donc aussi dans l'idée.

Ce mois-ci, ce fût archlinux, $5. Les raisons sont les suivantes :

  • Grande qualité et rapidité des mises à jour, je n'ai jamais eu de problème majeure, au pire quelques petits désagréments qui se sont résolus très vite.
  • Wiki clair et à jour, on y trouve beaucoup d'informations pertinentes et de qualités.
  • Forum agréable, mes rares questions ont trouvé réponse, les dev de la distribution prennent le temps de répondre.
  • Enorme choix de paquets, notamment grâce à AUR auquel je participe. Pouvoir faire mes propres paquets est une raison qui motive mon choix pour cette distribution.
  • J'utilise cette distribution depuis 4 ou 5 ans maintenant. L'installation n'est faire qu'à l'achat de ma machine.
  • J'ai la dernière version de tous les composants, je ne me pose aucune question lorsque j'utilise une lib ou un soft pour mon travail.

Je donne donc à archlinux pour cette satisfaction quotidienne.

Pour donner à archlinux.

[Biologeek] Bloquer les publicités

$
0
0

Here’s a lovely bit of irony for you: Adblock Plus, which is by far the most popular add-on for Firefox and Chrome, is actually increasing the amount of memory used by your web browser, rather than decreasing it. Furthermore, ABP also increases the amount of time (and CPU cycles) required to render a website. Instead of making web surfing more responsive, ABP actually makes your surfing experience slower.

Iframe irony: Adblock Plus is probably the reason Firefox and Chrome are such memory hogs (cache)

Suite à ce billet, j’ai commencé à expérimenter ce qu’il est possible de faire en jouant avec le fichier /etc/hosts. Emmanuel me demandait quels étaient mes retours sur ce changement (attention tout ce qui suit est purement du ressenti) :

  • une plus faible consommation de mémoire, rien d’extraordinaire mais quand on a beaucoup de tabs ça finit par jouer ;
  • des iframes qui s’affichent avec des pages d’erreurs Firefox, ça pourrait être résolu avec un serveur local (cd /tmp && touch index.html && sudo python3 -m http.server 80) sauf pour celles affichées en https (ce qui est normal) ;
  • moins de publicités bloquées, le filtre utilisé doit être plus permissif que celui d’AdBlock ;
  • en application sur tous les navigateurs à la fois :-).

Ce n’est donc pas l’idéal non plus, il faudra que je teste uBlock à l’occasion.

[Biologeek] Optimisation de lecture

$
0
0

“Small screens are getting bigger, big screens are getting smaller and you know what? It’s going to end up looking like a book. We found out 500 years ago that the book is the optimal size for reading,” he says. “The best size fo a page is the spread of my hand,” says Spiekermann, holding a spry example in the air. “You put 50 characters in a column and you have your point size, and each language has its own easiest fonts. That all defines it. The eye, the hand, the language. Not technology.”

Recopié depuis l’image d’un tweet

C’est la raison pour laquelle l’évolution des ordiphones vers un écran de 5,5 pouces est inéluctable. Pour un produit en lecture seule :-).

[Biologeek] Payez ce que vous pouvez

$
0
0

Pay-as-you-can!

We want to provide everyone the opportunity to come, so we kindly ask everyone to give as much as s/he can afford. What does that mean? We have four levels of pricing. Please choose the one that suits your budget.

  • base: can be 0, if you cannot afford otherwise
  • reasonable: covers basic costs of food and lodging
  • nice: all costs covered, including infrastructure and tools
  • supporter: you support others that cannot afford their travel, stay and food

Budget and Pricing - hillhacks (cache)

Je ne l’avais encore jamais vu à l’œuvre sur une conférence mais j’apprécie beaucoup le principe qui demande bien sûr une grande transparence sur les frais et les recettes (plutôt bien fait sur la page en question). Inspirant.

[Biologeek] Luxe, espace et temps

$
0
0

This doesn’t mean I’ll be liveblogging a lot of ham-fisted attempts to turn “everything” off. But it does mean making mindful decisions about the quality of any input that I check repeatedly – as well as any “stuff” I produce. Everything. From news sources to entertainment programming, and from ephemeral web content down to each email message I decide to respond to. The shit has to go, inclusive.

Better - Merlin Mann (cache)

Je me suis rendu compte récemment qu’après avoir expérimenté le luxe de réduire mes besoins matériels, jeté ma télévision par la fenêtre©, foutu mon portable aux chiottes©, j’ai aujourd’hui le luxe d’avoir peu de contraintes d’espace et de temps. C’est une chance que j’apprécie chaque jour. Je suis avec intérêt les aventures de Thomas pour réduire son empreinte (cache).

[Biologeek] Voisinage en Python

$
0
0

J’ai besoin de connaître les articles précédents et suivants pour le blog et maintenant pour ces notes, je suis arrivé à la version suivante en Python qui produit un générateur à partir d’un itérable grâce au mot-clé yield :

def neighborhood(iterable, first=None, last=None):
    """
    Yield the (previous, current, next) items given an iterable.

    You can specify a `first` and/or `last` item for bounds.
    """
    iterator = iter(iterable)
    previous = first
    current = iterator.next()  # Throws StopIteration if empty.
    for next in iterator:
        yield (previous, current, next)
        previous = current
        current = next
    yield (previous, current, last)

Il me fallait surtout la possibilité de spécifier un premier/dernier item pour avoir un lien sur le premier article publié vers les pensées plus anciennes ou les tweets archivés.

[Biologeek] ★ Cours IUT : Web Mobile

$
0
0

The more I build for the web, the more the term ‘device-agnostic’ endears itself to me.

I used to think it merely dealt with basing responsive breakpoints on content rather than particular devices, but there’s more to devices than the size of their screens. A device-agnostic approach also takes into account infinite combinations of screen resolution, input method, browser capability, and connection speed. With such a wide range of possibilities, the sensible thing to do is to zero in on the harshest conditions (or toughest things to deliver) and build from there. Like cars designed to perform in extreme heat or on icy roads, websites should be built to face the reality of the web’s inherent variability. In my mind this approach addresses the following from the beginning:

  • Hostile browsers
  • Tiny screens
  • Slow connection speeds
  • Touch inputs

Device-Agnostic (cache)

Je démarre un cours intitulé Web Mobile avec une nouvelle classe demain, j’ai 28 heures réparties en matinées. La première séance de découverte sera l’occasion de définir ensemble ce que l’on entend par Web Mobile car je n’ai pas de définition, je ne suis même pas sûr que ça veuille vraiment dire quelque chose (mais bon c’est moi qui ait proposé le titre à la responsable alors mea culpa).

Je compte pour cela faire usage d’outils à base de sujets/concepts, de priorisation, de réajustement et de flux. Toute ressemblance avec des outils liés à l’agilité serait forcément fortuite. Ce n’est pas encore tout à fait clair pour moi et c’est une bonne chose, ce sont des outils que je souhaite inventer/adapter/tordre/jeter avec les participants. Mon objectif est qu’ils arrivent à exprimer leurs connaissances actuelles et leurs souhaits pour ce cours. Afin que l’on puisse ensuite décider ensemble de ce que l’on va traiter tout en réajustant en cours de route s’il le faut.

Il devrait y avoir une douzaine de personnes plus techniques que la dernière fois, ce qui donne une inertie de groupe moins importante. De quoi explorer de nouvelles façons de partager et de produire collectivement. On va forcément parler de mobile-first (cache) et de challenges pour les web designers (cache), je suis curieux et impatient de voir ce qu’ils vont me proposer en retour…


[Biologeek] Menace commune

$
0
0

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)

[Biologeek] ★ Cours IUT : Construction collaborative

$
0
0

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] Systèmes réactifs

$
0
0

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.

[tarek] Charity Python Code Review

$
0
0

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

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

$
0
0

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 !

Viewing all 3409 articles
Browse latest View live