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

[logilab] Astroid 1.0 released!

$
0
0

Astroid is the new name of former logilab-astng library. It's an AST library, used as the basis of Pylint and including Python 2.5 -> 3.3 compatible tree representation, statical type inference and other features useful for advanced Python code analysis, such as an API to provide extra information when statistical inference can't overcome Python dynamic nature (see the pylint-brain project for instance).

It has been renamed and hosted to bitbucket to make clear that this is not a Logilab dedicated project but a community project that could benefit to any people manipulating Python code (statistical analysis tools, IDE, browser, etc).

Documentation is a bit rough but should quickly improve. Also a dedicated web-site is now online, visit www.astroid.org (or https://bitbucket.org/logilab/astroid for development).

You may download and install it from Pypi or from Logilab's debian repositories.


[sciunto] Euroscopy 2013 : tuto, conf et coding party

$
0
0
Fin août aura lieu Euroscipy 2013 à Bruxelles. Au programme, conférences, tutoriels pour débutants et confirmés sur les outils et bibliothèques python utiles pour des usages scientifiques. Les vidéos des conférences de la sessions US de cette année sont disponibles sur le site. J’ai particulièrement apprécié les conférences sur le recherche reproductible dont dexy que […]

[carlchenet] Vrac de mini-messages n°12 : Builbot, Brebis, Git, Gnupg, PyPy, Openjdk, Mercurial et Zabbix

$
0
0
Suivez-moi aussi sur Identi.ca ou sur Twitter  Comme chaque semaine, voici les dents/tweets intéressants de la semaine dernière que j’ai publiés sur Identi.ca ou sur Twitter, revus et augmentés d’éventuels  commentaires et observations mûris au cours de la semaine passée. Au menu : buildbot, brebis, git, gnupg, pypy, openjdk, mercurial et zabbix. C’est parti ! mise à jour vers #buildbot 0.8.7p1 Un peu surpris par le changement (0.8.1) mais l’aide dans […]

[rcommande] Les tests avec Factory_boy

$
0
0

Les données de test: les fixtures

Il est courant de peupler la base de données afin de disposer de tout ce qu'il faut pour éxécuter les tests. Ce n'est pas forcement l'étape la plus drôle d'un développement logiciel, surtout si l'on doit faire ça à la main à chaque fois.

Heureusement pour nous, la majorité des frameworks dignes de ce nom fournissent un mécanisme de fixtures. Difficile d'en donner une définition tellement cela dépend du framework ou des modules utilisés.

Pour Django, il s'agît de données sérialisées en JSON ou XML représentant les objets de modèle que le framework va injecter dans la base de données avant chaque tests.

L'alternative: les fabriques

Il existe une alternative aux fixtures, les fabriques. Pour les personnes qui ne sont pas à l'aise avec ce pattern, il y a même une page qui lui est dédiée. Personnellement je préfère leurs usages aux fixtures car:

  • Les fabriques, c'est du code! Et en tant que développeur, c'est ce que je préfère manipuler.
  • Plus de fichiers de JSON ou XML dans tous les sens, je met en général toutes mes fabriques dans un fichier "factories.py" à la racine de mon projet ou du module de tests. C'est bien plus simple pour s'y retrouver.
  • Les tests sont plus lisibles. Pour un test, je n'instancie que les objets dont j'ai besoin.
  • Le modèle va peut être changer. C'est plus simple de mettre à jour une fabrique de quelques lignes plutôt que des données sérialisées éparpillées dans différents fichiers.

Factory_boy

Je vais donc présenter un petit module Python bien pratique pour simplifier la mise en oeuvre des tests en utilisant des fabriques Factory_boy. Il a été développé par Mark Sandstrom et est actuellement maintenu par Raphaël Barrois. Il ne s'agit que d'une boite à outils permettant d'écrire très facilement des fabriques. Pour cela, factory_boy fourni différents outils dont les plus utiles sont:

  • Les séquences, qui permettent d'instancier des objets avec des attributs différents à chaque instance.
  • Les Attributs paraisseux (ou LazyAttributes) dont la valeur ne sera évaluée qu'au dernier moment et, qui pouront donc être déterminés en fonction d'autres attributs.
  • L'héritage de fabriques. Bien connu des fénéants développeurs à l'aise avec la programmation objet permettant d'en faire plus en écrivant moins.
  • Les sous-fabriques (ou SubFactories) permettant d'instancier des objets liés entre eux via des clés étrangères.
  • Certainement plein d'autres choses que je vous laisse découvrir.

Nativement, Factory_boy fonctionne avec Django et Mogo (MongoDB). J'ai donc effectuer une petite contribution au projet pour le rendre compatible avec mon ORM préféré: SQLAlchemy. Tout cela est disponible depuis la version 2.1.

J'ai découvert ce petit projet au boulot sur un projet Django (merci Axel !). Maitenant cela fait parti de ma petite boite à outils indispensables à tout projet Python.

Factoy_boy en action

Pas besoin de longs discours. Voici un exemple simple permettant de mettre en place Factory_boy avec SQLAlchemy:

pip install factory_boy sqlalchemy

Comme je suis un flémard informaticien, j'ai repris directement l'exemple de la documentation (rédigé par mes soins, alors je suis a moitier pardonné) que je vais bricoler commenter:

from sqlalchemy import Column, Integer, Unicode, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import scoped_session, sessionmaker

session = scoped_session(sessionmaker())
engine = create_engine('sqlite://')
session.configure(bind=engine)
Base = declarative_base()

Rien de particulier ici, on change tout ce qu'il faut pour faire fonctionner notre projet avec SQLAlchemy en utilisant une base de données SQLite en mémoire.

Je créé aussi une session SQLAlchemy, c'est super important de l'avoir sous le coude étant donné qu'il faudra la communiquer à notre fabrique par la suite (c'est spécifique au fonctionnement de SQLAlchemy)

class User(Base):
    """ A SQLAlchemy simple model class who represents a user """
    __tablename__ = 'UserTable'

    id = Column(Integer(), primary_key=True)
    name = Column(Unicode(20))

Base.metadata.create_all(engine)

C'est notre objet de modèle pour la démonstration. Oui, je sais, je ne me suis pas foulé. C'est juste une classe qui représente un utilisateur avec un identifiant et un nom...

class UserFactory(SQLAlchemyModelFactory):
    FACTORY_FOR = User
    FACTORY_SESSION = session   # the SQLAlchemy session object

    id = factory.Sequence(lambda n: n)
    name = factory.LazyAttribute(lambda a: 'User {0}'.format(a.id))

Bon voila ce l'on attendait: la fabrique. C'est une classe qui hérite de SQLAlchemyModelFactory, la classe de base à toute fabrique utilisant SQLAlchemy. Il est possible choisir celle qui conviendra en fonction de l'ORM utilisé (DjangoModelFactory, MogoFactory).

Détaillons un peu les attributs:

  • FACTORY_FOR: on précise quel type objet sera créé par la fabrique. Ici on veut des instances de "User".
  • FACTORY_SESSION: ça c'est du spécifique SQLAlchemy. Il faut passer l'objet de session SQLAlchemy que vous voulez utiliser pour communiquer avec votre base de données.

C'est fini pour la configuration, place au fonctionnel de la fabrique:

  • id: dans cette exemple, l'attribut "id" est une séquence, c'est à dire qu'il sera à chaque création d'instance de "User". Cela prend ne paramètre un fonction appelé pour constuire le contenu. Ici, on utilise une fonction lambda qui ne fait que renvoyé l'incrément 'n'.

Le premier aura donc l'id "1", le second "2", etc... À noter que cela prend en compte les éléments déjà présents en base en commançant à partir du dernier id. Pratique !

  • name est un attribut paraisseux (LazyAttribute), c'est à dire qu'il sera évalué au dernier moment et peut donc s'appuyer sur d'autres attributs pour être calculé. Là, le nom sera calculé en fonction de l'identifiant. On obtiendra donc 'User 1', 'User 2', etc...

A l'usage, notre nouveau joujou n'est vraiment pas contraignant à manipuler:

>>> session.query(User).all()  # Je triche pas et il n'y a rien dans la base de données
[]

>>> UserFactory()  # Je veux un utilisateur. UserFactory, à la rescousse!
<User: User 1>

>>> session.query(User).all()  # Tadaaaa! L'utilisateur est bien en base!
[<User: User 1>]


>>> UserFactory.build()  # Parfois on veut l'instance, mais pas besoin de la mettre en base
[<User: User 2>]

>>> session.query(User).all()  # Non je ne ment pas! Toujours un seul utilisateur en base
[<User: User 1>]

>>> user = UserFactory(name='Romain')  # Parfois, on a besoin d'attributs spécifiques
>>> user.name
'Romain'

Ce n'est qu'une très petite introduction. J'invite tous les curieux à se rendre sur la doc du projet factory_boy pour voir toute les possibilités qu'offre ce module bien sympa.

[logilab] Pylint 1.0 released!

$
0
0

Hi there,

I'm very pleased to announce, after 10 years of existence, the 1.0 release of Pylint.

This release has a hell long ChangeLog, thanks to many contributions and to the 10th anniversary sprint we hosted during june. More details about changes below.

Chances are high that your Pylint score will go down with this new release that includes a lot of new checks :) Also, there are a lot of improvments on the Python 3 side (notably 3.3 support which was somewhat broken).

You may download and install it from Pypi or from Logilab's debian repositories. Notice Pylint has been updated to use the new Astroid library (formerly known as logilab-astng) and that the logilab-common 0.60 library includes some fixes necessary for using Pylint with Python3 as well as long-awaited support for namespace packages.

For those interested, below is a comprehensive list of what changed:

Command line and output formating

  • A new --msg-template option to control output, deprecating "msvc" and "parseable" output formats as well as killing --include-ids and --symbols options.
  • Fix spelling of max-branchs option, now max-branches.
  • Start promoting usage of symbolic name instead of numerical ids.

New checks

  • "missing-final-newline" (C0304) for files missing the final newline.
  • "invalid-encoded-data" (W0512) for files that contain data that cannot be decoded with the specified or default encoding.
  • "bad-open-mode" (W1501) for calls to open (or file) that specify invalid open modes (Original implementation by Sasha Issayev).
  • "old-style-class" (C1001) for classes that do not have any base class.
  • "trailing-whitespace" (C0303) that warns about trailing whitespace.
  • "unpacking-in-except" (W0712) about unpacking exceptions in handlers, which is unsupported in Python 3.
  • "old-raise-syntax" (W0121) for the deprecated syntax raise Exception, args.
  • "unbalanced-tuple-unpacking" (W0632) for unbalanced unpacking in assignments (bitbucket #37).

Enhanced behaviours

  • Do not emit [fixme] for every line if the config value 'notes' is empty
  • Emit warnings about lines exceeding the column limit when those lines are inside multiline docstrings.
  • Name check enhancement:
    • simplified message,
    • don't double-check parameter names with the regex for parameters and inline variables,
    • don't check names of derived instance class members,
    • methods that are decorated as properties are now treated as attributes,
    • names in global statements are now checked against the regular expression for constants,
    • for toplevel name assignment, the class name regex will be used if pylint can detect that value on the right-hand side is a class (like collections.namedtuple()),
    • add new name type 'class_attribute' for attributes defined in class scope. By default, allow both const and variable names.
  • Add a configuration option for missing-docstring to optionally exempt short functions/methods/classes from the check.
  • Add the type of the offending node to missing-docstring and empty-docstring.
  • Do not warn about redefinitions of variables that match the dummy regex.
  • Do not treat all variables starting with "_" as dummy variables, only "_" itself.
  • Make the line-too-long warning configurable by adding a regex for lines for with the length limit should not be enforced.
  • Do not warn about a long line if a pylint disable option brings it above the length limit.
  • Do not flag names in nested with statements as undefined.
  • Remove string module from the default list of deprecated modules (bitbucket #3).
  • Fix incomplete-protocol false positive for read-only containers like tuple (bitbucket #25).

Other changes

  • Support for pkgutil.extend_path and setuptools pkg_resources (logilab-common #8796).
  • New utility classes for per-checker unittests in testutils.py
  • Added a new base class and interface for checkers that work on the tokens rather than the syntax, and only tokenize the input file once.
  • epylint shouldn't hang anymore when there is a large output on pylint'stderr (bitbucket #15).
  • Put back documentation in source distribution (bitbucket #6).

Astroid

  • New API to make it smarter by allowing transformation functions on any node, providing a register_transform function on the manager instead of the register_transformer to make it more flexible wrt node selection
  • Use this new transformation API to provide support for namedtuple (actually in pylint-brain, logilab-astng #8766)
  • Better description of hashlib
  • Properly recognize methods annotated with abc.abstract{property,method} as abstract.
  • Added the test_utils module for building ASTs and extracting deeply nested nodes for easier testing.

[sciunto] rss2email : nouveaux contributeurs, nouvelles versions

$
0
0
J’ai déjà eu l’occasion de parler sur ce blog de ma méthode pour suivre les flux rss avec rss2email (voir ce billet), un petit code python qui permet d’héberger sa solution en deux minutes. Le projet avait été lancé par Aaron Swartz. J’avais gardé dans ma liste d’entreprendre un nettoyage du code de ce logiciel, […]

[gvaroquaux] Scikit-learn 0.14 release: features and benchmarks

$
0
0
I have tagged and released the scikit-learn 0.14 release yesterday evening, after more than 6 months of heavy development from the team. I would like to give a quick overview of the highlights of this release in terms of features but also in term of performance. Indeed, the scikit-learn developers believe that performance matters [...]

[Biologeek] HTML et sémantique

$
0
0

La sémantique ce n'est pas très compliqué. C'est un contrat qui permet à un groupe (plus ou moins grand) de communiquer ensemble. On établit des conventions qui permettent d'échanger des éléments qui font que nous allons nous comprendre. Mais tout cela n'est finalement pas très important. Ce qui me dérange un peu plus, c'est le détournement de la signification de id et class par la nouvelle génération.

Un HTML avec class et des id, Karl Dubost

Voilà qui me place dans la « nouvelle génération » (chouette !), je me suis longtemps conformé à avoir des id/class qui respectent une certaine logique sémantique avant de me rendre compte du peu de sens que l'on pouvait attribuer aux contenus avec ces attributs. Les class et id sont la sémantique HTML du pauvre.

Or il existe des outils permettant d'introduire de la sémantique au sein du HTML : RDFa, microdata ou les microformats (je garde les microformats qui pourtant s'appuient uniquement sur des class car les préfixes en version 2 vont clairement au-delà d'une simple utilisation de classes HTML). Ces façons d'introduire du sens au sein d'un contenu permettent d'exprimer une complexité beaucoup plus proche des besoins que j'ai pu rencontrer ainsi qu'une réutilisation rendue possible grâce à la standardisation des vocabulaires employés.

Malheureusement aucune de ces solutions n'est aujourd'hui exploitable à l'échelle du Web et la promesse de pouvoir requêter/aggréger des données par ce biais là n'a pas été tenue. C'est la raison pour laquelle je me suis éloigné de tout ce qui avait trait au Web Sémantique ces derniers mois. Comme le précise Karl, il s'agit avant tout d'une question de taille de groupe. Mais comment faire « passer à l'échelle » une intelligence collective ?


[Biologeek] Souffrance ou plaisir

$
0
0

Je relis souvent l'avant-propos de Kilian Jornet :

Ce sont les phrases que je lisais tous les matins avant de partir m'entraîner. Pendant toutes ces années, elles sont restées collées sur la porte d'un vieil appartement où j'ai vécu.

« Kiss or kill. Embrasser ou tuer. » Le manifeste du Sky-Runner

Tu embrasses le succès et la gloire, ou bien tu meurs. Perdre, c'est mourir ; gagner c'est sentir. La lutte, c'est ce qui différencie une victoire ou un gagnant.

Combien de fois t'est-il arrivé de pleurer de rage et de douleur ? Combien de fois as-tu perdu la mémoire, la voix et tout jugement parce que tu n'en pouvais plus ? Et Combien de fois dans la même situation as tu pensé : Essaie encore ! Encore quelques heures ! Une autre montée ! La douleur n'existe pas, elle est simplement dans ta tête. Contrôle-la, détruis-la, élimine-la, et continue. Fais souffrir tes rivaux. Tue-les ! Je suis égoïste, non ? Le sport est égoïste, il faut être égoïste pour savoir lutter et souffrir, pour aimer la solitude et l'enfer. S'arrêter, tousser, avoir froid, ne pas sentir ses jambes, avoir des nausées, vomir, avoir mal à la tête, des bleus, du sang qui coule… Est-ce que vous avez mieux à proposer ?

Le secret, ce ne sont pas les jambes. C'est avoir le courage de sortir et de courir lorsqu'il pleut, lorsqu'il y a du vent et de la neige. Lorsque les éclairs s'en prennent aux arbres, lorsque les flocons de neige ou l'averse de glace te cinglent les jambes et le corps et te font pleurer. Pour poursuivre, tu dois essuyer les larmes pour voir les pierres, les murs ou le ciel. Renoncer à quelques heures de fête, à des dizaines de remarques, dire non à une fille, aux draps qui te recouvrent le visage. Envoyer tout au diable et sortir sous la pluie jusqu'à ce que tes jambes soient en sang après être tombé et te lever encore pour continuer à monter… Jusqu'à ce que tes jambes hurlent : ça suffit ! Et que tu restes abandonné en plein milieu d'un orage dans les sommets les plus éloignés, jusqu'à la mort.

Les collants trempés par la neige poussée par le vent qui te gifle le visage et gèle la sueur. Corps léger, jambes légères. Sentir comme la pression de tes jambes, le poids de ton corps se concentre sur les métatarses de tes doigts de pied et exerce une pression capable de rompre les pierres, détruire les planètes et déplacer les continents. Comme les deux jambes suspendues dans l'air, flottant comme le vol d'un aigle et courant plus vite qu'un guépard. Ou bien en descendant, lorsque tes jambes se dérobent dans la neige et la boue, juste avant de te pousser en avant pour que tu te sentes libre de voler, de crier de rage, de haine et d'amour au coeur de la montagne, où seuls les rongeurs les plus intrépides et les oiseaux peuvent devenir tes confesseurs, blottis dans leur nid, sous les rochers. Ils sont les seuls à connaître mes secrets et mes peurs. Parce que perdre, c'est mourir. Et on ne peut pas mourir sans avoir tout donné, sans cesser de pleurer à cause de la douleur et des blessures, on ne peut pas abandonner. Il faut lutter jusqu'à la mort. La gloire, c'est ce qu'il y a de plus grand, on ne peut qu'espérer l'atteindre ou bien se perdre en chemin après avoir tout donné. Il faut lutter, souffrir et mourir. Sans cela, rien ne vaut la peine. L'heure de souffrir est arrivée, l'heure de la lutte est arrivée, l'heure de gagner est arrivée. Embrasser ou mourir.

Courir ou mourir, Kilian Jornet

Non pas pour m'en inspirer mais plutôt pour qu'il me serve de garde-fou. Ce n'est pas ce à quoi j'aspire et même lorsque je me trouve en forme je me restreins à ne pas dépasser certaines limites. Je ne prépare pas l'UTMB, ni même un ultra d'ailleurs. Je prends du plaisir à aller gambader dans la nature et à découvrir de nouveaux sentiers, à me perdre et à partager des bouts de chemins. Je m'entraîne en ce moment pour être en capacité d'aller faire un tour sur le Mont-Blanc mais ça reste très léger : quelques exercices de qualité (trail + vélo) associés à des week-ends chocs™ seront — je l'espère — suffisants.

Je me suis rendu compte au cours de ce programme qu'il ne s'agissait finalement pas de développer le physique mais bien le mental en apprivoisant progressivement la douleur associée à un effort prolongé. En prenant conscience de ses limites pour les repousser de façon raisonnée.

Reste la question de l'acclimatation, j'essaye d'aller aussi souvent en altitude que je le peux mais c'est difficile lorsque l'on vit dans la commune la plus plate (et basse) de France. Je mise tout sur les 2/3 jours précédant l'ascension et sur une bonne hydratation. En espérant que la météo soit clémente :-).

[carlchenet] Vrac de mini-messages n°13 : openjdk, iceweasel, pylint, python, whoosh, brebis bazaar

$
0
0
Suivez-moi aussi sur Identi.ca ou sur Twitter  Comme chaque semaine, voici les dents/tweets intéressants de la semaine dernière que j’ai publiés sur Identi.ca ou sur Twitter, revus et augmentés d’éventuels  commentaires et observations mûris au cours de la semaine passée. Au menu : Openjdk, Iceweasel, Pylint, Python, Whoosh, Brebis et Bazaar. C’est parti ! Debian just switched default Java to OpenJDK 7 (via Sylvestre Ledru) => très intéressante news qui […]

[carlchenet] Infrastructure logicielle derrière un projet libre

$
0
0
Suivez-moi aussi sur Identi.ca ou sur Twitter  Après mon billet décrivant un exemple d’infrastructure derrière un site web moderne, je vais continuer dans cette veine en décrivant un exemple d’infrastructure servant au développement d’un projet de Logiciel Libre, à savoir ici le projet Brebis, un vérificateur de sauvegarde (nombreux types d’archives, fichiers plats) dont j’ai déjà parlé de nombreuses […]

[carlchenet] Vrac de mini-messages n°14 : Debian, Python, django, veille techno, startup et communauté FOSS

$
0
0
Suivez-moi aussi sur Identi.ca ou sur Twitter  Comme chaque semaine, voici les dents/tweets intéressants de la semaine dernière que j’ai publiés sur Identi.ca ou sur Twitter, revus et augmentés d’éventuels  commentaires et observations mûris au cours de la semaine passée. Attention cette semaine, beaucoup de contenu suite à une actualité plutôt chargée Au menu : Debian, Python , Django, de la veille technologique, le monde des startups et les communautés […]

[sciunto] euroscipy 2013 tuto conf et coding-party

$
0
0

Fin août aura lieu Euroscipy 2013 à Bruxelles. Au programme, conférences, tutoriels pour débutants et confirmés sur les outils et bibliothèques python utiles pour des usages scientifiques.

Les vidéos des conférences de la sessions US de cette année sont disponibles sur le site. J'ai particulièrement apprécié les conférences sur le recherche reproductible dont dexy que j'ai trouvé particulièrement convaincant. L'esprit est tout à fait en accord avec ce que je qualifie de bon outil (ceux qui suivent ce blog connaissent mes goûts). Le nombre de conférences est impressionnant, je n'ai pas encore tout vu.

Pour faire un peu de pub et un appel à contributeur en herbe, un sprint (ou coding party) aura lieu le dernier jour. Des personnes de Sage, numpy, scipy et scikit-image seront présentes. C'est un bon endroit pour se faire aider à l'usage des outils (git, github, tâches accessibles aux débutants...). Pour ma part, je serai présent au sprint.

[sciunto] rss2email nouveaux-contributeurs-nouvelles versions

$
0
0

J'ai déjà eu l'occasion de parler sur ce blog de ma méthode pour suivre les flux rss avec rss2email (voir ce billet), un petit code python qui permet d'héberger sa solution en deux minutes. Le projet avait été lancé par Aaron Swartz.

J'avais gardé dans ma liste d'entreprendre un nettoyage du code de ce logiciel, notamment parce que j'ai été confronté à un bug mystérieux qui a ensuite disparu, et vu l'état du code, c'était peine perdu que de comprendre pourquoi.

Finalement, d'autres contributeurs m'ont épargné cette réécriture pour laquelle le temps me manquait. Voici le nouveau dépôt du projet, et ils ont réalisé tout ce que je voulais faire :) (fichier de configuration, stockage des données, sections pour les flux, etc) et même plus car rss2email est maintenant capable de dialoguer en imap comme feed2imap.

Puisque l'auteur demande de faire passer le mot, je m'empresse de le faire. Je suis heureux de voir que ce petit logiciel reprend de la vigueur.

[raspberry-python] Nouvelle version de Brython: 20130817-141536

$
0
0

Téléchargement de Brython


Une nouvelle version de Brython, Brython-20130817-141536, est maintenant disponible sur la page des téléchargement
 

Changements

Depuis la version précédente :

- import amélioré , on peux utiliser les packages : "import X.Y", "from X.Y import Z [as A]", "from . import X" (corrige le bogue 123)
- le protocole des itérateurs utilise maintenant les méthodes __iter__() et __next__() pour tous les types
- "for" les utilisent aussi
- implémentation des compréhensions améliorée : utilise les dictionnaires global et local (corrige le bogue 129)
- améliorations a la console interactive : http://brython.info/tests/interactive_mode.html
- ajout du type "bytes" (incomplet)
- ajout de balises HTML5 et événements DOM manquants
- ajouts a la documentation en français, ajout d'une section pour les modules spécifiques a Brython ; autres parties traduites
- Bouton sur la page de tests pour exécuter tout les tests et retourner les erreurs
- amélioration du module markdown : les _ et * génèrent du HTML différent, tout comme __ et **
- le mot clé del : utilise la méthode __del__() si elle existe


Bogues

  • - Corrections :
. #78 : map() and filter() return iterator objects, not lists
. #124 : support of CSS attribute "float"
. #125 : add methods copy() and clear() to lists
. #126 : escaped quotes inside strings
. #127 : DOMNode instances comparison methods (__eq__ and __ne__)
. #128 : class inheritance
. conversion des JS objects dans json.js et $JS2Py
. problème avec les itérations sur instances DOMNode



Autres


  • réorganisation : déplacement de JSObject du fichier py_dom.js au fichier py_utils.js
  • galerie : ajout d'un jeu de solitaire qui utilise SVG et le glisser - déposer


Vos retours


L’équipe Brython espère vos retours sur cette version, autant pour nous laisser savoir si vous trouvez  des bogues mais aussi au niveau de votre expérience avec Brython, en joignant et participant aux forums Brython.

De plus nous aimerions entendre parler de vos projets (actuels ou futurs) avec Brython sur appareils mobiles (tablettes, etc) et informatique embarquée (Raspberry Pi, Beaglebone black, Cubieboard, etc), surtout au niveau des écrans tactiles, car nous y travaillons en ce moment. Alors, n’hésitez pas a joindre le forum ou a me contacter directement sur mon blog ou sur twitter.

François
@f_dion

[carlchenet] Brebis 0.6 : contrôle automatisé de vos sauvegardes

$
0
0
Suivez-moi aussi sur Identi.ca ou sur Twitter  La version "Articule" 0.6 de Brebis, le vérificateur de sauvegarde, a été publiée le 15 août. Pour rappel le projet Brebis est un logiciel libre (GPLv3) de contrôle automatisé de vos sauvegardes (archives et arborescences de fichiers plats) déjà présenté sur ce blog. Quoi de neuf dans Brebis ? Après une grosse version 0.5 apportant […]

[afpyro] AFPyro à Bruxelles (BE) - le 22 Août

$
0
0

English

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

The next Aperos Belgium Python will take place on thursday, August 22th in Brussels, during the EuroSciPy conference that takes place at ULB from 21st to 24th August.

In addition to the regulars of AFPyro, we are also pleased to meet the attendees of EuroSciPy using Python in scientific fields.

As usual, you can come just for drinking and sharing one (or many) drinks. And if you wish, you can register for the meal that follows, in a near place, to be determined.

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

Please sign up in order to book the place: http://framadate.org/studs.php?sondage=6kykm2pwyd7i8woi


Français

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

Le prochain Aperos Python Belgium se tiendra le jeudi 22 Août à Bruxelles, lors de la conférence EuroSciPy qui se tient à ULB du 21 au 24 août.

En plus des habitués de l’AFPyro, nous attendons également avec plaisir les participants de la conférence EuroSciPy qui utilisent Python dans des problématiques scientifiques.

Comme chaque fois, vous pouvez venir juste pour l’apéro et partager un (ou des) verres, et si vous le souhaitez, vous inscrire pour le repas qui suivra, dans un lieu proche encore à déterminer.

Rendez-vous à partir de 19h30, au rez-de-chaussée du Délirium café, Impasse De La Fidélité 4, 1000 Brussels.

Pour dimensionner au mieux la réservation, merci de vous inscrire sur: http://framadate.org/studs.php?sondage=6kykm2pwyd7i8woi

[sciunto] contribution

$
0
0

Je ne veux pas tomber dans la fausse modestie, ni dans la prétention, mais je pense pouvoir affirmer que je contribue. Je contribue, c'est-à-dire que je participe bénévolement à tout un tas d'activité. Je ne suis nullement le premier, et pas moins le dernier non plus. Certains sont plus philanthropes, d'autres moins. Par contre, je peux remarquer que ces actions passent majoritairement par un outil : l'internet.

Ma première connexion à internet, ce fût il y a presque 15 ans maintenant. Cette étape a sans doute changé le sens que je donnais au monde. Avant, je ne contribuais pas, mais j'étais sans doute trop jeune, quoique... Il est possible qu'internet est apparu comme un moyen facilitant la contribution.

Contribuer, je l'ai fait rapidement, et dans un parcours d'action que je trouve incroyable. Je me souviens de mes débuts sur des fora scientifiques où j'ai notamment pris une petite responsabilité d'animer une section proposant des exercices et où on aidait les gens à les résoudre. Quand je suis résolument rentré dans ma formation scientifique, j'ai cessé cette activité, mais j'en ai trouvé une autre. Découvrant GNU/Linux de zéro, je me suis mis à améliorer le doc de ma distribution. C'est un travail titanesque, presque sans fin, et très prenant. Ensuite, j'ai lentement glissé vers l'aide au débutant quand je me suis senti plus à l'aise, mais loin d'être un expert. Souvent, je ne connaissais pas la réponse, je la cherchais presque à la place de l'interlocuteur. Il fût un moment où j'ai eu envie de changer d'air, ce qui a correspondu à l'apparition de ce blog, toujours pour partager et dans l'idée de creuser des sujets plus techniques. Après mûres réflexions, j'ai rejoins l'April où je me suis fait attrapé par un autre wiki que j'ai maintenu jusqu'à ces derniers temps. J'ai suivi les activités de l'April (je les suis toujours), parfois j'ai essayé de participer lorsque c'était possible. Depuis plusieurs années, j'avais envie de participer à l'écriture de codes. Peu importe l'objectif. C'est ce que je fais désormais. D'abord avec des petits projets persos, pour se faire la main, et des projets collaboratifs comme scikit-image.

Il y a des invariants dans chacune de ces étapes. Remarquons déjà qu'à chaque fois, je prends une activité, je la maintiens, puis je me désengage. Finalement, pourquoi est-ce que je contribue ? Est-ce un pur don de soi ? Non, ça n'est jamais le cas. A chaque étape, j'ai cherché quelque chose. Apprendre la pédagogie en rédigeant, en aidant. Apprendre à utiliser un outil; quoi de mieux que de résoudre des problèmes pour apprendre ? Apprendre à travailler ensemble. S'ouvrir l'esprit en rencontrant des personnes que je ne verrais pas autrement. Et ces gens sont sacrément intéressants !

Les motivations sont là. Contribuer, c'est avant tout se nourrir, acquérir. Ce qui est bon, c'est qu'on donne en même temps, car l'autre est nécessaire, il permet la réflexivité. C'est le miroir qui renvoie les erreurs. Si je fini par me détourner d'un engagement, ce n'est pas qu'il ne vaut plus la peine ; c'est que j'ai le sentiment que je dois apprendre autre chose, et que je ne pourrai pas l'apprendre là. Alors, j'avance.

Je disais plus haut, "peu importe l'objectif". Je dois préciser. Si l'objectif final n'est pas le plus important à mes yeux, il se doit de respecter une certaine éthique. La première est que quelqu'un doit en bénéficier, à un moment ou à un autre. Plus le nombre de bénéficiaires augmente, plus la cause semble crédible. Je me renseigne aussi au préalable du positionnement de la communauté car une large partie des contributions se font à plusieurs. Là, ma principale question est de savoir si je vais m'embarquer dans un projet qui réinvente la roue ou si elle tente de combler une lacune.

Il en résulte que je pense pouvoir affirmer aujourd'hui que mon bénévolat a un retour significatif sur ma vie personnelle et professionnelle. Chaque jour, j'utilise des savoirs, des compétences issues de mes contributions.

L'internet n'est pas étranger dans cette expérience. Si sans lui, j'aurai pu m'engager dans telle ou telle activité, le pas vers la contribution aurait-il été aussi facile ? Aurais-je réussi à trouver des projets qui me permettait de développer cette compétence très pointue ? Michel Serres dit qu'internet change notre espace. Dans le monde matériel, nous sommes dans un espace euclidien ; dans le monde de l'internet, tout est proximité. Les distances sont rompues. Quelle invention ! Si à mes ancêtres je leur avais annoncé que nous construirions un outil capable d'abolir les distances entre les humains, j'aurais été pris pour un fou ou un rêveur. Je suis devenu un contributeur.

Un billet récent pouvant éclairer celui-ci : * http://www.davidmanise.com/les-5-qui-prennent-soin-du-monde/

[Biologeek] Photographie et exclusion

$
0
0

On me demande régulièrement si j'ai « arrêté » la photographie et j'ai mis un moment à reconnaître que oui, c'est effectivement le cas. En fait il m'a fallu prendre conscience de la nécessité de sortir d'une scène pour pouvoir la saisir. Le photographe devient observateur, presque étranger au moment immortalisé. S'il y a certains avantages à pouvoir s'en extraire, il reste un petit goût amer : celui de ne pas l'avoir vécu pleinement. Celui de s'être concentré sur l'image au détriment des émotions personnelles.

Par ailleurs, la multimédiation de la société me fait peur et je ne souhaite pas être acteur de cette auto-exclusion collective. Je ne vais plus aux concerts pour cette raison depuis un moment mais cette lame de fond prend progressivement une ampleur plus locale — intime même — qu'il est très difficile d'éviter. On y retrouve des motifs récurrents qui sont en désaccord avec mes valeurs : instantanéité au détriment de la qualité et diffusion globale remplaçant l'échange local.

Au long de cette petite centaine de pages, les auteurs passent en revue les différents aspects qui composent notre vie privée. Un terme si simple et si évident, qu’on en vient rapidement à oublier à quel point ce qu’il regroupe est dense, complexe et changeant. Chapitre après chapitre, tout est fait pour nous rappeler, pour inscrire une bonne fois pour toutes dans nos réflexions, que la notion de vie privée n’est pas unique et immuable. Qu’elle évolue selon le contexte et peut se transformer au passage des frontières.

Les contours flous de la vie privée, Pep.

J'ai de moins en moins envie de faire partie de cette culture numérique qui nous regroupe sans nous individuer, qui nous profile sans nous épanouir, qui nous encourage à partager sans échanger.

[afpyro] AFPyro à Lyon - le 29 août 2013

$
0
0

Un Afpyro aura lieu le jeudi 29 août à partir de 19h au Tooley’s - 7 quai Fulchiron - Lyon 5éme (probablement sur la terrasse côté rue Monseigneur Lavarenne).

Aucune présentation n’est prévue, mais nous pourrons discuter autour des dernières actualités sur Python autour d’un verre.

Pour se rendre au Tooley’s :
  • en métro : arrêt Vieux Lyon
  • en vélo’v : stations Place Crépu, Saint Jean, Place Gourjus
  • en bus : bus 31 ou C20, arrêt Saint Georges
Viewing all 3409 articles
Browse latest View live