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

[afpyro] AFPyro à Lyon - mercredi 24 septembre

$
0
0

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

Une présentation sur les docstrings sera donnée au cours de cette soirée.

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

[afpyro] AFPyro à Montreal - le 12 Avril

$
0
0

A l’occasion de Pycon U.S., l’AFPy organise son premier AFPyro à Montréal ! Venez échanger autour d’une bonne bière artisanale avec la comunauté francophone python !

AFPy is organizing its first AFPyro at PyCon U.S. in Montreal! Come and meet the french python community around a good craft beer!

Quand ? When ?

Le Samedi 12 Avril, vers 19h

Saturday 12th of April at 7PM

Ou ? / Where ?

Le Benelux Sherbrooke (map)

25, rue Sherbrooke Ouest

Montréal, QC H2X 1X7

[logilab] Lancement du blog de la communauté salt francaise

$
0
0

La communauté salt est bien vivante. Suite au meetup de septembre, elle s'est doté d'un petit site web :

http://salt-fr.afpy.org
http://www.logilab.org/file/266455/raw/Screenshot%20from%202014-09-25%2014%3A32%3A27.png

Nous éspérons pouvoir continuer à rassembler les enthousiasmes autour de salt lors de ces rendez-vous tous les 2 mois. J'ai donc publié le compte rendu du meetup sur ce site.

[AFPy-Nantes] Retour sur le meetup du 09 avril 2014

$
0
0

Lors de ce premier meetup Python, où plus d'une vingtaine de personnes étaient présentes, Raphaël Braud nous a présenté GrapheekDB, une base de données de graphe libre !

Ce premier rendez-vous était surtout l'occasion de nous rencontrer et de discuter de l'organisation de nos prochaines rassemblements.

À bientôt, et en attendant ... respectez la PEP8 :)

[AFPy-Nantes] Rencontre et key signing party 24 mai 2014

$
0
0

Après le meetup-pilote qui nous a permis de découvrir GrapheekDB, cette rencontre avait pour principal objectif de faire connaissance et préparer les prochains évènements.

Il en est sortie l'idée d'organiser un meetup par mois en alternant conférences et barcamps.

Quelques sujets potentiels de présentations ont déjà émergés :

  • Initiation à Python ou comment écrire du code pythonesque pour ceux qui viennent d'autres langages
  • Retour d'expérience sur migration vers Python3
  • Python legacy avec Zope, Grok, etc.
  • Demo d'IPython Notebook avec un peu de dataviz
  • Programmation un Raspberry PI avec Python
  • Présentation/Introduction à Django
  • Retour d'expérience sur apps Django et bibliothèques sympas
  • Sites et blogs statiques avec Pelican
  • Générateurs et co-routines

La key signing party organisée par Pablo a permis d'animer la suite du meetup, en attendant la bière !

rencontre et key signing party

À bientôt, et en attendant ... respectez la PEP8 :)

[AFPy-Nantes] Barcamp estival du 29 juillet 2014

$
0
0

Notre premier barcamp, animé par Georges nous a permis d'aborder différents sujets en groupes de 3 à 5 personnes pendant 45 minutes environ.

Les comptes-rendus sont ci-dessous, rendez-vous à la prochaine rencontre !

barcamp estival du 29 juillet 2014

Outils Python pour les adminsys/devops

Participants : Florent, Antoine et Pablo

Rapporteur : Pablo

L'idée était de discuter des outils Python disponibles pour les adminsys.

Les point abordés étaient :

  • Les outils pour disponibles pour le déploiement/provisioning, comme Fabric http://www.fabfile.org/, Ansible http://www.ansible.com/home ou Saltstack http://www.saltstack.com/
  • Les nouvelles façons de travailler entre développeurs et administrateurs systèmes, Antoine nous a raconté son expérience avec Fabric et Puppet (Ruby) chez Wikipedia, nous avons évoqué la problématique du stockage/versioning de donnés sensibles et partagées dans une même équipe
  • Les outils de monitoring comme Graphite http://graphite.wikidot.com/ et ElasticSearch/Logstash/Kibana (Java) pour les métriques des apps/activités
  • L'utilisation de Sentry https://getsentry.com/ pour le tracking des erreurs/exception dans une application Python

Pour résumer, la discussion a été ouverte et variée. De plus, c'était la première fois que nous nous rencontrions et les échanges ont permis de mieux connaître l'intérêt et l'expérience de chacun sur le sujet, le tout dans une très bonne ambiance.

Django

Participants : Mathieu F., ?, ?, ?

Rapporteur : Mathieu F.

Nous avons évoqué les serveurs web et leurs modes "FastCGI" et WSGI".

FastCGI :

WSGI :

Nous avons ensuite rapidement parlé de Gunicorn (http://gunicorn.org/), un serveur web conçu pour Python et WSGI.

Puis Django :

  • framework de développement web
  • permet d'architecturer le code selon le modèle MVC
  • permet de définir une liste d'URL (exemple pour "www.monsite.fr" : /login, /blog, /admin, /voirArticle et d'associer une action / un script à chacune (ce que Symfony appelle des routes, dans le monde PHP ;-)
  • fournit une commande shell "manage.py" permet des actions de debug, initialisation, lancement du serveur web en local, etc
  • Django permet de créer un back office très light (CRUD) de manière presque automatique

Les "virtualenv" :

  • permettent de faire cohabiter des logiciels écrits en Python ayant des prérequis différents. Par exemple : le logiciel "Toto" requiert la lib "libA" en version 12, alors que le logiciel "Truc" requiert la lib "libA" en version 10
  • sont utiles (indispensables !) à la fois en environnement de dév et en prod
  • voir commandes "virtualenv", "virtualenvwrapper" et "venv"

Déploiement d'applis Django :

Hébergement :

Python 2.7 ou Python 3.x ? (troll inside ;-)
==> A ce jour, la seule raison de commencer un développement en 2.7 plutôt qu'en 3.x serait d'avoir un besoin impératif d'une lib non dispo en Python 3 (et dont le portage n'est pas envisagé). De très nombreuses libs ont été mises à jour, donc ce cas de figure devrait se raréfier.

Depuis la version 1.6, Django (https://www.djangoproject.com/) supporte Python 3.

Pour terminer, un petit lien vers un blog TRES intéressant sur Python (mais pas que ;-) :

Bonnes pratiques et outils python

Participants : Reine, Nicolas, Yoann

Rapporteur : Yoann

Tout d'abord, nous avons discuté de maisons d'édition chez qui paraissent des livres intéressants pour de la doc ou de l'outillage (Python/Linux mais pas que) : Packt, O'Reilly, Apress, No starch press. Nous avons aussi parlé de sites plus orientés Linux : TLLTS (The Linux Link Tech Show:podcasts sur youtube), Linux Luddites, distrowatch.

Ensuite, nous avons abordé la démarche générale à suivre dans les projets pour en venir plus particulièrement à l'outillage : en fonction des besoins du projet on choisit les technologies, puis vient le choix des outils. Avec Python, la référence permet généralement comprendre rapidement comment utiliser les librairies.

Enfin, nous avons parlé des virtualenv qui permettent d'avoir plusieurs environnements bien séparés sur une machine physique (et donc de disposer de différentes versions des librairies, voire de Python) ainsi que les importer/exporter grâce à pip, par l'intermédiaire d'un fichier listant les dépendances du projet.

Regards croisés sur des projets python

Participants : Jean D., Georges G., Jean-Baptiste, ?

Rapporteur : Jean D.

Python est recherché pour simplifier et debugger des développements existants. D'un accès facile sur le Web, il est également rapide d'apprentissage. Il permet de réduire la taille d'un développement classique. L'ordre de grandeur de cette réduction peut-être de 75 % du temps. Ceci grâce à 2 atouts principaux : son "moteur" performant ses nombreuses fonctionnalités.

[AFPy-Nantes] Fin des vacances, Nantes se replonge dans Python :)

$
0
0

Tout le monde est bien reposé, il est de temps de se replonger dans le bain. Rien de tel qu'un meetup de rentrée !

Deux sujets de présentations vous seront proposés:

  • « Introduction à Django, le framework de développement web pour les perfectionnistes sous pression. »
  • « Écrire du code python selon les règles de l’art. »

La suite du meetup et de la soirée nous laissera le temps de discuter librement et d'aller boire un verre pour profiter de cette fin de période estivale.

Que vous soyez experts Python, débutants ou simplement curieux de découvrir ce langage, nous serons heureux de vous compter parmis nous !

L'évènement est publié sur le site de la Cantine: Meetup Python #4.

À bientôt, et en attendant ... respectez la PEP8 :)

[AFPy-Nantes] 40 pythons, 1 conférence et des trolls

$
0
0

Nous étions nombreux mardi dernier aux conférences. À la louche, une quarantaine. Un groupe assez hétérogène composé de curieux comme d'experts.

Deux sujets ont donc été abordés, merci à Florent et Alex pour leur préparation :).

Ci-dessous, le compte-rendu de près de 2h de conférence :).

Django, framework web

Intervenant : Florent

Les slides de la présentation sont disponibles ici : Introduction à Django

chapter Part I: Django Django

Présentation

Django est donc un framework pour le web développé dans l'optique d'être rapide à configurer et déployer. Ainsi, il présente un haut niveau d'abstraction. Étant un projet open-source, il est assez facile de l'étendre.

La dernière release est 1.6 et celle à venir, 1.7, devrait présenter des mises à jour de fond, tel un système de migration intégré : django-migrations.

Le projet est développé selon les philosophies KISS (Keep It Shot & Simple) et DRY (Don't Repeat Yourself). Si le premier objectif est bien rempli, il semble que le second soit sujet à débat. On notera différents avantages à django, notamment son installation très facile ainsi que son excellente documentation. Il dispose également d'une communauté très active.

Sous le capot ?

Concernant les aspects techniques, l'environnement classique est une version 1.6 du framework sous python 2.7. Django est compatible python 3 mais ce n'est pas le cas de tous les modules qui peuvent s'y ajouter. Pour la partie serveur, il semble qu'il s'intègre correctement derrière tout et n'importe quoi (apache, nginx,...). Du côté base de données (BDD), django fonctionne essentiellement avec SQL (MySQL, PostgreSQL, SQLite). Il est possible de l'interfacer avec des bases NoSQL, mais il faut garder en tête que tout le framework est pensé pour intéragir avec des bases de données relationnelles.

Pour ce qui est de la création de site, Django repose sur un modèle type MVC (modèle-vue-contrôleur) qui sera appelé MTV (modèle-template-vue). Les modèles, qui décrivent les objets stockés en base, sont écrits en Python. Cela rend la configuration intuitive. Il est à noter que le moteur de template, semblable à Jinja en terme de syntaxe, est réputé comme étant lourd et lent.

En pratique...

Après toute cette théorie, démonstration rapide avec la mise en place d'un site pour recenser les coins à champignons. C'est l'occasion d'observer la rapidité avec laquelle il est possible de déployer un nouveau site (environ 4 commandes ^^). Cerise sur le gâteau, Django génère automatiquement une interface d'administration contenant formulaire et tout ce qu'il faut pour gérer le contenu de la BDD (opérations CRUD). L'administration d'un projet se fait essentiellement via le script manage.py.

Django sépare les modules métiers sous forme d'applications. Chacune contenant un fichier models.py, views.py, admin.py et tests.py (pour vous encourager à créer des tests unitaires). Les modèles se déclarent sous forme de classes Python dont les champs sont des colonnes en base. Il est possible d'étendre facilement les types de champs pour créer des types spécifiques, autre que ceux de SQL.

Concernant la définition des routes, comme souvent, elle se fait via l'utilisation de schémas et d'expressions régulières. Ici, on découvre avec plaisir que Django repère automatiquement lorsqu'un fichier est modifié et redéploie.

Aller plus loin

Les bases de Django en poche, on évoque rapidement les fonctionnalités avancées. Notamment de l'héritage sur les modèles, à la fois puissant mais rapidement complexe. Des mécanismes similaires existent sur les vues et les templates.

Django présente aussi des fonctionnalités d'internationnalisation, tant pour les URL que pour le contenu.

Pour la gestion des login, la notion de groupes, d'utilisateur et de droits est pré-intégrée et est aisément personnalisable.

Il est ressorti des questions que Django possède un système de rétro-spécification, capable de définir les fichiers modèles nécessaires décrivant une BDD pré-existante, très utile quand combiné avec des modules de migration, type south (c.f. ci-après).

Les modules

Que serait un framework (open-source) sans ses plugins & modules ? La communauté étant active, il existe de nombreux modules très utiles, il ressort de la conférence :

  1. South. Un outil pour effectuer des migrations de base de données. Un exemple de cas d'utilisation : l'intervenant devait migrer une vieille application vers Django. Parmi les problèmes, il faisait face à la structure SQL de très mauvaise qualité (du genre clé étrangère non unique...). A l'aide de l'outils de rétro-spécification de Django, il a été capable de récupérer les définitions des modèles et de corriger la BDD grâce à South. Hallelujah ! Comme mentionné plus haut, la version 1.7 de Django intègre un tel module (essentiellement basé sur South). Cela peut également être très utile pour manipuler différentes bases sur différents serveurs (dev, prod, pre-prod,...).
  2. django-extensions: utilitaire pour manage.py ajoutant des commandes pour faciliter l'administration.
  3. django-debug-toolbar: outil pour faire du profiling dans le navigateur.
  4. factory-boy: création de grappes de données pour le test (Déclaration de factory). Par rapport à l'utilisation de fixtures, il permet un maintien plus facile des données de test. De plus, la gestion des clés étrangères est très pratique.
  5. Un module shop très différent de prestashop. Beaucoup plus modulaire que ce dernier (donc pas solution out of the box).

Conclusion & commentaires

Ce petit tour d'horizon nous aura permis de constater l'extrême rapidité de développement qu'offre Django. Énorme avantage également, sa large bibliothèque de modules.

Concernant la question du choix du framework web, il existe des alternatives à Django. Pour choisir ce dernier, c'est l'usage final qui est déterminant. Bien que Django soit rapide et efficace, il est en revanche très monolythique. Si vous comptez utiliser un autre ORM par exemple, un framework plus modulaire serait Pyramid. Enfin, il existe des framework très léger comme Flask.

L'inévitable comparaison avec d'autres langages tels que PHP était plutôt sans appel (l'occasion pour certains templiers/trolls de partir en croisade contre Symfony :)). PHP est jugé (très) lourd et peu efficace. Il y avait d'ailleurs parmi nous 3 personnes qui souhaitaient quitter l'univers PHP au profit de Python.

Finalement, Django présente quelques points noirs, tels que la personnalisation de l'interface d'administration ou bien la gestion de pages multi-formulaires. Si ces dernières se complexifient, leur maintien devient vite très difficile.

Quelques liens pour se documenter :

Questions

Les questions ont fait ressortir les points suivant.

Il est aisé de définir plusieurs environnements (prod, pre-prod, dev) via les fichiers de configuration. Le script settings.py (configuration générale) se charge ensuite de sélectionner la configuration appropriée en fonction de l'environnement.

Pour les tests unitaires, les capacités de test de Python sont très utiles. Ainsi que le module LiveServerTestCase pour tester les requêtes réellement à travers de réelles requêtes HTTP.

Il est possible d'utiliser Django sans installer un SGBD relationnel sur son poste, grâce à SQLite. L'utilisation du framework sans base de donnée du tout se limitera à l'utilisation du routage d'URL, des vues et des templates. Dans un tel cas d'utilisation, un coup d'oeil à un framework plus léger comme Flask (c.f. plus haut) est conseillé.

Python, les bonnes pratiques.

Intervenant : Alex

Les slides de la présentation sont disponibles ici : Écrire du code vraiment pythonique

Vous voulez coder en Python ? D'accord, mais pas n'importe comment ! Les bonnes pratiques facilitent la relecture du code et le maintien que cela soit par un tier ou par son auteur lui-même. Il ne faut pas oublier qu'on laisse parfois nos projets personnels un peu en suspend, et lorsqu'on les reprend, on est alors un étranger dans sa propre maison. Au cas où, mieux vaut baliser le terrain ;).

Notre intervenant commence par quelques généralités sur Python, sa syntaxe et sa philosophie. "Python essaie d'être élégant", voilà une des premières choses qu'on entend. Par rapport à d'autres langages (e.g. Ruby) qui recherchent en plus la pureté. Pour le développeur Python, la pureté n'est pas une fin en soi. c.f. The Zen of Python que je cite " Special cases aren't special enough to break the rules. Although practicality beats purity". En bref, un mot très important : pragramatisme (practicality).

Coder proprement, ça ne s'invente pas, encore moins quand on débute et les gens qui travaillent avec Python y réfléchissent. Du coup il existe un guide de références définissant les bonnes pratiques, on l'appelle le PEP8. Derrière ce terme à l'apparence obscure de PEP (Python Enhancement Proposals) se cache tout simplement des propositions d'amélioration du langage, qu'elles soient techniques ou formelles.

Pour ce qui est de la mise en pratique du PEP8, je me permets de vous renvoyer aux slides de la présentation qui seront plus clairs et exhaustifs. Cependant, durant la présentation, quelques points sont ressortis plus que d'autres. Je continue donc avec une liste non exhaustive...

D'abord, il existe des outils pour suivre les lignes directrices (guide lines) comme flake8 qui vérifie le respect du PEP8 (il en existe d'autres !). Mais plus simple encore, l'easter egg (introduit par le PEP20) du import this qui affiche le Zen of Python.

Concernant les entrées d'un programme, une bonne habitude est de traiter les données en deux fois :
  1. Normaliser l'entrée
  2. Traiter la donnée normalisée

Cela permet de simplifier le code, notamment celui du traitement qui est du coup toujours le même. Donc, évitez d'avoir à gérer trop de cas d'erreurs (excpetions) dans le code de traitement. On notera ici la phrase célèbre de Jon Postel : "Be liberal in what you accept, and conservative in what you send". Qu'on pourrait traduire par : soyer souple pour vos entrées, intransigent pour vos sorties.

On a aussi parlé des tuples, structure de données constantes (immutable) très pratique pour passer de la donnée à une fonction. Attention cependant à ne pas en abuser. Si de nombreux traitements sont inhérents à vos tuples, vous avez peut-être besoin d'un objet (classe) pour mieux gérer tout ça (e.g. points en mathématique...). Pour un type point en Mathématiques, peut-être qu'une classe est plus adaptée. VOus pourrez alors profiter de la surcharge d'opérateur pour implémenter les opérations spécifiques.

A plusieurs reprises nous avons mentionné les dictionnaires, c'est un synonyme de tableau associatif, i.e. un ensemble clé-valeur.

Autre point fort, les ContextManager, ces objets qu'on utilise grâce au mots clés with-as. Ils sont une fonctionnalité très importante du langage qui permet de bien maîtriser la portée des variables. Par exemple pour l'ouverture et la fermeture d'un fichier, ou encore pour la création et l'excécution d'une requête dans Django :).

A propos des lambda functions, ces petits bouts de code très courts qui n'acceptent qu'une expression pour seule opération, rappel qui a son importance : pas de unpacking de tuple dans les paramètres (c.f. slydes et tuples pour la notion de unpacking).

Le mot de la fin

Les slides des deux présentations sont disponibles ici:

On a vu et appris plein de choses, c'était super ! A la prochaine fois, et d'ici là, codez bien !


[AFPy-Nantes] Un barcamp pour bien terminer l'été indien

$
0
0

Suite au succès du dernier meetup, et pour bien finir ce mois de septembre ensoleillé, nous sommes heureux de vous proposer un nouveau BarCamp, le mardi 30 septembre, 19 heure, à la Cantine numérique Nantaise.

Le concept sera de se retrouver autour de plusieurs ateliers, et de participer collectivement, chacun étant invité à présenter ses trouvailles, à poser ses questions, etc.

Que vous soyez pythoniste confirmé, ou simple curieux, le format du barcamp devrait donc répondre à vos attentes : la découverte, l'échange, le collaboratif.

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

Pour vous inscrire à l'évènement, cliquez ici.

Pour vous tenir informé du contenu exact de l'évènement, ou pour faire part de vos suggestions, n'hésitez pas à vous inscrire à la liste de diffusion des pythonistes nantais.

Vous pouvez aussi nous rejoindre sur le chan IRC de l'AFPy Nantes. :)

[Biologeek] 10 ans

$
0
0

C’est difficile à décrire la naissance d’un site, ce qu’on voulait faire, ce que l’on a finalement fait, les doutes, les satisfactions, l’incompréhension de certains, les encouragement d’autres, parfois les mêmes d’ailleurs (normal c’était une surprise). Et le résultat est là, sous vos yeux ébahis : merci à vous, visiteur !

Ouverture de rideau, 30 septembre 2004

Dix années de présence, plus ou moins régulière, plus ou moins pérenne. C’est passé par de la bio-informatique, la création d’ubuntu-fr, la découverte de Python, des réflexions sur la liberté, des essais en CSS, des billets personnels, de l’énergie avec django-fr, des coups de gueule, le grand saut en freelance, quelques photos, un peu de sport, du web sémantique, le montage d’événements, une année au Japon, la co-création de scopyleft, de la philo de comptoir et enfin la paternité. Plein de projets avortés, pas mal de discussions stériles, des rencontres toujours un peu spéciales, des rides numériques partagées. Dix années à tisser ma propre toile. Des liens sans intentions, par affinités au hasard des rencontres. Une audience suffisamment limitée pour ne pas prendre la grosse tête ou être dérangé dans mon intimité.

Cet espace de publication m’aura tout appris de mon métier : l’importance des données et de leurs liens. Je l’ai appris dans la douleur : le design a changé 6 fois, les URLs 5 fois, les données 4 fois, le nom de domaine 1 fois. Ce lieu m’a permis d’expérimenter et de prendre du plaisir à ça, d’être corrigé et de capitaliser itérativement. J’ai offert un cadeau à mes écrits dernièrement en utilisant les polices Fira Sans et Equity afin de vous préserver des mouchards d’Adobe/Typekit (et le gain niveau performances est impressionnant). J’ai d’ailleurs rafraichit un peu tout ça, en utilisant TinyTypo et LESS. Je voulais notamment mettre en avant les citations qui débutent les billets, ça reste très minimaliste pour l’instant et il reste les finitions.

Et pour ces 10 prochaines années ? Peut-être du son, peut-être de la vidéo, peut-être du papier, peut-être la page blanche. J’espère avoir toujours de l’énergie pour explorer et partager de nouveaux centres d’intérêts. Avec vous ?

[AFPy Salt-fr] Hello World

[AFPy Salt-fr] Annonce : Meetup Salt Paris - Septembre 2014

$
0
0

Voici notre petit sélection pour démarrer notre meetup de la semaine prochaine (mardi 23 septembre 2014 à 19h dans les locaux de de Mozilla Paris) :

  • Retour d’expérience déploiement Salt chez Webedia (Cyril Lavier - Webedia)
  • Génération de fichiers de zone internes par salt (Paul Tonelli - Logilab)
  • Construire du monitoring de serveurs avec Salt et du HTML/javascript (Feth Arezki - Majerti)

Si un certain nombre de personnes de l'assistance ne connaissent pas Salt, on pourra se charger d'une petite introduction (avec des vieux slides).

N'oubliez pas de vous inscrire sur http://framadate.org/u85rt2y3iz1krhys c'est important car Mozilla a besoin d'un nombre d'inscrits pour des questions de sécurité (et pour offrir à boire).

Pour rappel les locaux de Mozilla Paris c'est au :

16 Bis Blvd. Montmartre Paris 75009 France

[AFPy Salt-fr] Rencontres Salt à Mozilla Paris

$
0
0

Pour ce 4ème meetup parisien des utilisateurs de Salt, nous étions acceuilli dans le luxe des locaux de Mozilla Paris, merci à eux!

Pour la partie du public qui découvrait salt, Arthur Lutz de Logilab a fait une introduction à Salt.

Arthur Lutz

Cyril Lavier nous à présenté l'utilisation de Salt chez Webedia. Voici les slides : /presentations/webedia-salt.pdf.

Cyril Lavier

Paul Tonelli nous a présenté une utilisation de la mine salt pour gérer des fichier de zone automatiquement avec salt. Voici les slides: http://docs.logilab.org/salt_dns/

Feth Arezki de Majerti a présenté samba_report_module qui produit du json utilisé par le projet samba_report_html.

Feth Arezki

Nicolas Pierron nous a montré une autre facon de penser la gestion de configuration en nous présentant la distribution linux NixOS.

Nicolas Pierron

Forcément, nous avons fini la soirée autour d'une pizza payée par Logilab et quelques boissons fournies par Mozilla. Merci à eux !

Pizza!

Pour les prochains meetups n'oubliez pas le document collaboratif d'organisation sur lequel vous pouvez faire des propositions de présentations. Vous pouvez aussi voter pour la date du meetup de novembre 2014.

[hautefeuille] RaspberryPI, NAS Synology et NFS

$
0
0

Introduction

L’objectif de ce billet est d’installer le système de fichiers Raspbian sur un répertoire partagé d’un NAS Synology par l’intermédiaire du protocole NFS.

Cette installation permet de soulager la carte mémoire. Celle-ci n’est en fait nécessaire que pour le démarrage de la carte RaspberryPI.

Prérequis

Il faut disposer d’une carte mémoire avec le système Raspbian déjà installé et configuré. Internet regorge de tutoriels sur l’installation de Raspbian.

L’adresse ip du serveur NAS est 192.168.0.3, l’adresse ip de la carte RaspberryPI est 192.168.0.199.

Il faut disposer d’un réseau local rapide car les fichiers du sytème de la RaspberryPI transiteront par le réseau.

J’ai également pu remarquer des problèmes de connection NFS lorsqu’une MTU trop élevée était utilisée.

Je n’utilise donc pas les “Jumbo frame” dans la configuration réseau du NAS Synology.

MTU

Préparation du NAS Synology

On crée tout d’abord un répertoire partagé.

share

On autorise ensuite le partage par NFS, sans mapping, en lecture / écriture. Le dossier exporté par NFS est donc le suivant : /volume1/rasp0.

share

192.168.0.199 correspond à l’adresse ip de la carte RaspberryPI.

Préparation de la carte mémoire

Dans un premier temps, nous allons monter le partage réseau NFS sur la carte RaspberryPI puis nous allons copier le système de fichiers sur cet emplacement réseau.

sudo mount -t nfs -o rw 192.168.0.3:/volume1/rasp0 /mnt
cp -axv /. /mnt/.
cp -axv /dev/. /mnt/dev/.

Préparation des fichiers du partage réseau

On édite ensuite le fstab du partage réseau auquel on ôte le point de montage de la carte mémoire, ici il s’agit de /dev/mmcblk0p2.

proc            /proc           proc    defaults 0 0
/dev/mmcblk0p1  /boot           vfat    defaults 0 0
none            /tmp            tmpfs   defaults 0 0
none            /var/run        tmpfs   defaults 0 0
none            /var/lock       tmpfs   defaults 0 0
none            /var/tmp        tmpfs   defaults 0 0
192.168.0.3:/volume1/rasp0  /   nfs     rw       0 0

La dernière ligne de la configuration est facultative puisqu’on va renseigner également cette information dans le fichier de boot dans la suite de ce billet.

On édite le fichier /etc/network/interfaces du partage réseau pour y désactiver toute référence à du DHCP.

#iface eth0 inet dhcp

Préparation de la séquence de boot (fichier sur la carte mémoire)

On édite le fichier de la carte mémoire /boot/cmdline.txt.

On y ajoute des informations complémentaires sur la même ligne que la ligne d’origine. Si vous êtes en DHCP, mettez ip=dhcp.

root=/dev/nfs rootfstype=nfs nfsroot=192.168.0.3:/volume1/rasp0,udp,vers=3 smsc95xx.turbo_mode=N ip=192.168.0.199:192.168.0.3:192.168.0.1:255.255.255.0
  • 192.168.0.199 est l’adresse de la carte RaspberryPI,
  • 192.168.0.3 est l’adresse du NAS Synology avec le partage NFS,
  • 192.168.0.1 est l’adresse de la passerelle,
  • 255.255.255.0 est le masque réseau.

Vous pouvez enfin rebooter la carte RaspberryPI.

Optimisations

Enfin pour soulager la carte mémoire, nous allons bouger la swap de la carte mémoire vers un loop device à travers le réseau.

sudo apt-get remove --purge dphys-swapfile
sudo rm /var/swap
sudo rm /etc/init.d/dphys-swapfile
sudo update-rc.d dphys-swapfile remove

sudo dd if=/dev/zero of=/var/swap bs=1M count=1024
sudo losetup /dev/loop0 /var/swap
sudo mkswap /dev/loop0
sudo swapon /dev/loop0

On édite ensuite /etc/rc.local du partage réseau pour y rendre les changements permanents.

echo "swap settings"
sleep 2
losetup /dev/loop0 /var/swap
mkswap /dev/loop0
swapon /dev/loop0

Liens

[hautefeuille] Yify-pop dans un conteneur Docker

$
0
0

L’objectif de ce billet est de constituer un fichier Docker qui va construire un conteneur basé sur une Ubuntu 14.04, installer le logiciel Yify-pop et démarrer le serveur Nodejs. Il est nécessaire d’être déjà aguerri avec les commandes Docker.

Création du fichier Docker

On indique dans ce fichier Docker les actions suivantes :

  • On se base sur une image Ubuntu 14.04,
  • On met à jour la liste des paquets,
  • On met à jour le système,
  • On installe les paquets Nodejs,
  • On télécharge le logiciel Yify-pop,
  • On compile le logiciel,
  • On démarre le démon,
  • On expose les ports 4000 et 8889 de l’application.

Contenu du fichier yifydock :

FROM ubuntu:14.04
MAINTAINER Julien Hautefeuille <julien@hautefeuille.eu>
RUN apt-get update
RUN apt-get -y upgrade
RUN apt-get -y install npm
RUN apt-get -y install git
RUN cd /opt && git clone https://github.com/yify-pop/yify-pop.git
RUN npm -g install geddy
RUN npm -g install peerflix
RUN ln -s /usr/bin/nodejs /usr/bin/node
RUN cd /opt/yify-pop && npm install && geddy
EXPOSE 4000 8889

Construction de l’image

Lancer la commande de build :

docker build -t jhautefeuille/yify-pop:v1 https://raw.githubusercontent.com/jhautefeuille/dockerfiles/master/yify-pop/yifydock

Cette commande va construire le conteneur et le lancer.

Lancement du conteneur Yify-pop

Pour lancer l’application Yify-pop :

docker run -d --publish 4000:4000 --publish 8889:8889 jhautefeuille/yify-pop:v1

[Biologeek] Triathlon

$
0
0

Ils y sont donc surmontés par le Triathlon, synthèse idéale, trinité dont la perfection tend vers le divin, et dont les trois disciplines consubstantielles épousent parfaitement les trois cotés du triangle sacré formant le sommet de la Grande Pyramide. Car si à l’image des Vrais Sports, le Triathlon forge de par son exigence un mental d’acier pour ses pratiquants les plus aguerris, il est également le seul sport qui réussit à réconcilier et synthétiser les exigences et idiosyncrasies antagonistes des trois Vrais Sports majeurs, nous faisant tendre vers le modèle de l’Athlète Idéal, celui de l’Honnête homme, idéal de modération et d’équilibre dans l’usage de toutes ses facultés, aux proportions harmonieuses et exemptes d’excès. Ultime satisfaction, l’exigence extrême de ce sport garantit sa relative confidentialité, ce qui le sauve, en éloignant irrémédiablement le spectre de l’argent facile, et en garantissant une pratique noble et désintéressée, pour le pur goût de l’effort, et dans le mépris des valeurs matérielles inhérentes à ce siècle.

La pyramide des sports

Les copines de boulot vont faire un triathlon, t’es motivé ? Mmh, pourquoi pas. A priori rien ne m’attire dans cet univers : esprit de compétition, culte de soi et atteinte de ses limites. Mais il y a tout de même des côtés à creuser : expérimentations au niveau matériel, sports complémentaires et gestion de l’effort. Challenge accepté. Me voilà embarqué dans la préparation d’un triathlon en 2 mois sans savoir nager le crawl… mais avec une petite base en trail et quelques tours occasionnels en vélo.

Après tout le mal que j’avais lu des triathlètes, il fallait que je me fasse mon propre avis :-)

Tatoué, pucé, étiquetté, on se retrouve dans un parc à vélos tous plus affûtés les uns que les autres (je parle des vélos bien entendu). L’ambiance est plutôt tendue mais la sono à fond permet de faire le vide en enfilant la combinaison qui doit m’aider à ne pas me noyer. Je laisse partir les hors-bords et je me jette doucement à l’eau avec une brasse sacrément lente, conséquence des 6 petites séances en piscine (finalement cette combi me freine plus qu’autre chose !). Je n’ai pas fait 100m que je sens déjà la puce accrochée à ma cheville qui se fait la malle — oups — demi-tour pour finalement l’accrocher au poignet et me rendre compte qu’il n’y a plus grand monde derrière moi :-D

Arrivé enfin sur la plage, je m’extirpe tant bien que mal de la combinaison avant de me rendre compte que je ne suis pas devant mon vélo — re-oups — changement de rangée et je perds 30 sec à enfiler des chaussettes avec les pieds mouillés. J’enfourche mon vélo pour 10 kilomètres de montée qui n’en finissent pas. Toute la difficulté est de ne pas rester dans le rythme imposé pour remonter les nombreuses places perdues lors de la natation. J’y arrive tant bien que mal mais je suis surpris par la longueur, j’aurais mieux fait de repérer un brin le parcours avant… ou d’emporter un compteur mais calculer c’est tricher™. C’est parti pour la descente où je force autant que faire se peut en oubliant de m’hydrater. Je prends pas mal de plaisir à enchaîner les virages avec vue sur le lac lorsque je ne baisse pas la tête dans le guidon pour ressembler à un coureur. J’essaye de rester dans ma course malgré les motos, les voitures, les drones, les accidents, les fausses indications des spectateurs, etc. J’ai les épaules qui tétanisent un peu à force d’être crispé sur la guidoline mais je sais que je n’en aurais pas besoin pour la suite.

La transition vers la course est celle que j’appréhendais le plus mais elle se passe finalement mieux que prévu et je continue à jouer à pacman avec les coureurs me précédant. Je me rends compte que j’arrive au niveau d’une des amies faisant le triathlon avec moi, génial on va pouvoir finir ensemble ! J’essaye d’être moteur le kilomètre suivant et c’est là où ça se gâte, je sens le muscle de ma cuisse droite qui se contracte un peu trop dans les montée et il reste un escalier… [J’apprendrais un peu trop tard que les guidons de triathlètes qui permettent de poser les coudes servent justement à éviter ce genre de crampes.] Je monte avec peine mais j’arrive quand même à reprendre la course et à finir à bonne allure en duo \o/\o/ 1h45 d’effort pour un objectif à moins de 2h, plutôt content.

Au final, c’est une expérience bien différente des challenges que j’ai pu m’imposer par le passé. L’univers de la compétition n’est définitivement pas fait pour moi mais ça reste intéressant en termes de logistique. À refaire. Peut-être. Ou pas. Je préfère quand même de loin me retrouver seul ou en petit comité pour me faire plaisir. Et les triathlètes ? Ils ont l’air de trouver ça marrant sans faire trop de dégâts. À part peut-être dans leur livret A. Pourquoi pas après tout.

Il va vraiment falloir que j’écrive ce billet sur les pyramides.

[tarek] New Blog: Foule.es

$
0
0

Dear French reader. I have just launched a new blog in French about running.

=> http://foule.es <=

It'll probably talk about writing software from time to time, but it's basically about running.

[logilab] Petit compte rendu du meetup postgresql d'octobre 2014

$
0
0

Hier soir, je suis allé au Meetup PostgreSQL intitulé "DBA et Développeurs enfin réunis". Après quelques bières et pizza (c'est la tradition de le faire dans ce sens), nous avons écouté 4 présentations autour de PostgreSQL après une courte introduction de Dimitri Fontaine et des sponsors (Mozilla et Novapost).

http://www.logilab.org/file/266939/raw/BzcR8UOIQAAdFMh.jpg

Jean-Gérard Pailloncy nous a parlé d'aggrégation temporelle sous contrainte d'IOPS (page wikipedia pour IOPS, au cas où). Malgré le temps court de présentation, c'était une synthèse très bien déroulée d'un projet avec des flux de données ambitieux pour des plateformes "entrée de gamme". Quelques "petites" astuces que chacun pourrait appliquer à ses projets.

Flavio Henrique Araque Gurgel nous a parlé du partitionnement de tables et des mythes qui entourent ce sujet. Dans quels cas dois-je partionner ? Beaucoup de cas de figure sont possibles, les métriques qui permettent de prendre ce genre de décisions sont nombreuses et nécessitent une bonne compréhension du fonctionnement interne des bases de données Postgresql. Il s'agissait principalement d'amener les praticiens de postgresql à se poser les bonnes questions lors de la conception de leur base de données.

Thomas Reiss et Julien Rouhaud nous ont présenté POWA (PostgreSQL Workload Analyzer). Il s'agit d'une extension C pour postgresql (à partir de 9.3) et une interface en Perl and Mojolicious. Un projet prometteur (bien que l'on puisse être supris qu'il soit écrit en Perl) pour maîtriser les performances de sa base de données postgresql.

http://www.logilab.org/file/266940/raw/safe.png

Enfin, Dimitri Fontaine a prêché la bonne parole pour rapprocher les développeurs des administrateurs de bases de données. L'idée était de faire penser aux développeurs que le SQL dans leur code est du code, pas juste des chaînes de caractères. Quelques exemples autour des "window functions" et de "common table expressions" plus tard, on espère que les développeurs feront une partie de leurs calculs directement dans PostgreSQL plutôt que dans leur application (en évitant de balader des tonnes de données entre les deux). Petit conseil : il est recommandé de rajouter des commentaires dans les requêtes SQL. "SQL c'est un language de programmation en vrai."

Les slides devraient être publiés sous peu sur le groupe meetup, que vous pouvez rejoindre pour être informés du prochain meetup.

À Logilab nous utilisons beaucoup Postgresql que ce soit sur des projets clients (données métier, GIS, etc.) mais aussi extensivement dans CubicWeb, framework web en python orienté web sémantique.

Le format de 20 minutes par présentation est pas mal pour toucher rapidement à un grand nombre de sujets, du coup souvent il s'agit de pistes que chacun doit ensuite explorer. Les meetups sont toujours aussi sympathiques et accueillants.

[Biologeek] Rapatriement d’articles

$
0
0

Link to everything you create elsewhere on the web. And if possible, save a copy of it on your own blog. Things disappear so quickly, and even important work can slip your mind months or years later when you want to recall it. If it’s in one, definitive place, you’ll be glad for it.

15 Lessons from 15 Years of Blogging

J’y pense depuis un moment et il était temps d’être en accord avec les principes énoncés par ailleurs. Je commence à récupérer les articles que j’ai semé un peu partout ces dernières années. Ce n’est pas de la duplication mais de la sauvegarde distribuée ;-).

J’ai procédé au rapatriement des 3 articles/tribunes de FaitMain : semences et données, écologie et données, éduquer et militer. Ainsi que l’initiative scopyleft écrit pour l’ANAS et un Web orienté composants pour le train de 13h37. Bonne lecture !

Note pour plus tard : ne publier que des articles sous une licence permettant la conservation à long terme sur ce site.

[anybox] Python comme langage d'intégration universel

Viewing all 3409 articles
Browse latest View live