Categories
Bidouillability Technology

Contrôler un Lego EV3 avec une API Web

Vous aussi vous voudriez commander votre robot avec une simple API Web? Par exemple pour embêter le chat ou surveiller votre domicile à distance (avec une arme sur son épaule il pourrait impressionner un cambrioleur et ressemblerait même à Johnny 5).
Dans ce cas, vous devez tester ceci et me dire ce que vous en pensez.

Il s’agit d’un micro serveur Web destiné à être installé sur un Lego Mindstorms EV3 avec le système ev3dev (basé sur Debian). J’ai simplement utilisé Flask afin de définir quelques endpoints correspondants aux différentes actions (avancer, reculer, tourner à droite, tourner à gauche et stopper).

Le README explique les quelques étapes nécessaires pour l’installation ainsi que l’utilisation. C’est vraiment simple. L’exemple ci-dessous ordonnera au robot d’avancer indéfiniment.

$ GET http://192.168.1.16:5000/move/forward
{"message": "OK", "direction": "forward", "action": "move"}

Le robot se stoppera dès qu’il recevra une requête GET sur l’endpoint /move/stop. Évidemment d’autres paramètres sont fournis par ev3dev. Je vais essayer de les rendre accessibles via l’API de manière simple. Par exemple demander au robot de se déplacer sur une distance ou de faire une rotation de x degrés. Il faudra prendre en compte la nature du sol ainsi que le niveau de charge de la batterie.

Je vais également ajouter au serveur une petite page Web avec du JavaScript qui permettra de contrôler le robot avec des boutons directionnels. Ce sera pratique pour commander le robot depuis un smartphone.

Categories
Steganography

Première contribution sur PyPI

Et voici ma première contribution sur le «Python Package Index». Le petit moment de fierté de la soirée.

J’ai récemment eu besoin de cet ancien code que je maintiens à jour de temps à autre. À cette occasion je m’étais dit que ce petit projet pourrait très bien avoir sa place sur PyPI. D’autres modules Python de stéganographie existent, mais ne sont généralement plus maintenus (ou ne supportent pas Python 3) et sont moins originaux.

Je serai aussi content que ce code puisse servir à quelqu’un. Voir attirer des contributeurs.

Il faut maintenant que j’améliore la documentation, afin que vous puissiez tranquillement exécuter la commande:

$ sudo pip install Stegano
Categories
Programming

Une nouvelle version majeure de pyAggr3g470r pointe son nez

pyAggr3g470r a vraiment bien évolué ces dernières semaines. Ceci grâce à d’excellentes contributions. Je dois dire que je suis très content de la tournure de ce projet. Il a atteint un très bon niveau de maturité avec une base de code bien structurée et solide. Et par-dessus tout, il s’agit d’un projet avec des contributions externes conséquentes.

Bref, listons ci-dessous les changements les plus notables.

Les filtres

La grosse nouveauté. Il est maintenant possible de créer des filtres sur les flux. La capture suivante illustre bien la fonctionnalité. Vous pouvez définir une correspondance (exacte ou avec des expressions régulières) entre une chaîne et le contenu d’un article. Si il y a correspondance au moment de la récupération du nouvel article du flux en question, l’article sera par exemple automatiquement marqué en tant que favori.

feed-filters

L’ajout de flux

L’ajout de flux est maintenant possible en fournissant l’adresse du flux ou du site. Dans le dernier cas pyAggr3g470r se chargera de trouver le flux automatiquement, lorsque c’est possible. Le bookmarklet fonctionne de la même manière (et utilise le même code en fait). Vous pouvez donc bookmarker une page Web quelconque.

add-a-feed

La recherche

La recherche est maintenant vraiment bien intégrée avec le reste. Elle prend en compte le flux courant (ou l’ensemble des flux), l’onglet courant (Tous les articles, Lus et Non lus) ainsi que le nombre maximum d’articles à afficher sur la page.

search

Les favoris

Le style de la page des favoris est également mieux intégré. Vous pouvez constater que les diverses listes de l’interface peuvent être triées sur les différentes colonnes.

Les favicons des flux sont récupérés. Par soucis de respect de la vie privée de l’utilisateur, pyAggr3g470r stock les favicons dans sa base de données.

favorites

Voilà, et je ne parlerai pas ici de toutes les améliorations du code (notamment du crawler client qui utilise l’API).

Categories
Programming

Évolutions récentes de pyAggr3g470r

pyAggr3g470r évolue vraiment bien ces derniers temps.

L’interface est maintenant plus homogène et plus rationnelle. Les articles favoris sont affichés sur la page principale ainsi que les résultats des recherches (avec le même template). Les différents filtres et tris peuvent ainsi être appliqués à ces vues.
Le menu principal a aussi été simplifié.

Cependant l’essentiel des évolutions réside dans les couches inférieures comme les controllers, l’API, la recherche (qui fonctionne maintenant sur Heroku), les deux crawlers (je rappel que pyAggr3g470r dispose d’un crawler pouvant être exécuté par le client et tirant parti de l’API de pyAggr3g470r).
Le module responsable de charger les variables de configurations a également largement été amélioré.
Dorénavant un flux de nouvelles qui rencontrera 6 erreurs consécutives de récupération sera automatiquement désactivé. Évidemment l’utilisateur a la possibilité de le réactiver.

Merci au contributeur sans qui pyAggr3g470r n’aurait pu bénéficier de toutes ces améliorations.

Vous pouvez tester les évolutions.

Categories
Programming

Déploiement simplifié de pyAggr3g470r

$ git clone https://bitbucket.org/cedricbonhomme/pyaggr3g470r.git
$ cd pyaggr3g470r/
$ ./install.sh postgres

Difficile de faire plus simple.

Il est aussi possible déployer l’application au sein d’une machine virtuelle avec Vagrant. Je viens de tester et ça fonctionne très bien. Vous pouvez utiliser SQLite au lieu de PostgreSQL.

Vous trouverez ici les différentes méthodes de déploiement.

Categories
Programming

Une nouvelle vue pour pyAggr3g470r

pyAggr3g471r-history

La version 6.4 introduit cette «nouvelle» vue qui permet de naviguer chronologiquement dans votre base d’articles. J’ai abandonné l’idée d’utiliser d3.js pour cette fonctionnalité. Finalement, rien de bien impressionnant. Mais j’aime bien le résultat.

Categories
Programming

Version 6.3 de pyAggr3g470r

pyAggr3g470r-fetch-error

La version 6.3 de pyAggr3g470r est officiellement sortie. Voici le changelog. Un grand merci au contributeur à l’origine de cette nouvelle version.

Parmi les nouveautés majeures nous avons un nouveau crawler qui tire parti de l’API RESTful. Il peut donc être exécuté par le client et insérer les nouveaux articles sur la plateforme.

Les erreurs lors de la récupération des flux sont maintenant comptées et le flux est désactivé à partir de la troisième erreur (voir la capture d’écran).

Categories
Programming

pyAggr3g470r 6.1

La nouvelle version de pyAggr3g470r est arrivée!
Voici le changelog ainsi que la nouvelle documentation.

La prochaine version devrait pointer son nez bientôt.

Categories
Programming

Guido van Rossum: The Early Years of Python

Guido van Rossum sur les débuts de Python. Très intéressant.

Categories
Programming

pyAggr3g470r a 5 ans

Et pour son anniversaire il passe en version 6.0!

La nouvelle version a été testé sur Heroku avec un runtime Python 3.4.2 et Python 3.3.2 sur mon ordinateur (Python 3 était en fait déjà supporté à une époque, lorsque j’utilisais CherryPy). Pour information, voici ce qu’il suffit de faire pour changer de runtime sur Heroku. Les dépendances sont alors automatiquement réinstallées au prochain push. Il n’y a vraiment rien d’autre à faire.

La grande nouveauté est surtout l’utilisation du PEP 3156 pour le module chargé de télécharger les flux de nouvelles. C’est en fait ce qui ma principalement motivé pour passer à Python 3.4. Cette partie du code est maintenant plus moderne et simple. Gevent est ainsi remplacé par asyncio qui fait partie de Python 3.4. Nous avons donc moins de dépendances externes.

Pour le moment, je n’ai pas constaté de problème d’encodage. Mais je vais quand même faire une passe sur le code pour vérifier.