MakeMake The Dwarf Planet is a feed agregator.

Usage du gitea pour micro-projet

by ThierryP from AFPy discuss

Salut à tous,
dans le cadre d’un projet en cours, on utilise Python pour des traitements d’un objet “pluviomètre”. Il est possible cependant qu’on utilise PHP pour certains bouts de code.
Sachant que
1) nous ne sommes pas des développeurs professionnels, juste des bricoleurs amateurs
2) il peut y avoir des traces de PHP dans certains bouts de code (mais restera a majorité du Python)
3) le projet sera mis sous licence libre
est-il possible d’utiliser le Gitea pour partager entre nous du code?
(Je crois comprendre que oui mais je préfère vérifier avant :slight_smile: )

Merci à vous
Thierry

5 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

Je n'arrive pas à accéder à la page Methode GET

by mino60 from Linuxfr.org

J'ai fait un script python… le site utilise une requête get pour afficher les données iptv de action iptv-info.php la requête avec des paramètres est une option de connexion le problème est que je ne peux pas obtenir les données iptv juste une source de page ou un fichier vide :

https://pastebin.com/UuAV9KYP

une chose que je n'ai pas compris c'est qu'après avoir lancé la requête get from action iptv-info.php les données iptv apparaissent sur la page ./iptv.php je suppose que les paramètres des données ne sont pas corrects

il y a aussi un bouton input dont je ne vois pas le name qui correspond à la valeur de value="Custom List Option".

<input type="button" onclick="myFunctiona5()" class="btn btn-default btn-sm" value="Custom List Option"

import requests 
s = requests.Session()
LINKFILE= '/tmp/link'
URL = "https://cp.fcccam.com/userpanel/iptv-info.php"

def get_clipmails():
    Post_Hdr={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/81.0',
              'Accept':'*/*',
              'Accept-Language':'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3',
              'Connection':'keep-alive',
              'Content-Type':'application/x-www-form-urlencoded',
              'Host':'cp.fcccam.com',
              'Referer':'https://cp.fcccam.com/index.php',
              'Accept-Encoding':'gzip, deflate, br'}

    post_data='login=salem&pass=123456&pass_conf=123456&email=012@gmail.com&submit= Register Account '
    post_account=s.post('https://cp.fcccam.com/index.php?action=register',headers=Post_Hdr,data=post_data,verify=False,allow_redirects=True).text
    post_data2='login='+NAME_TARGET+'&pass='+RND_PASS+'&submit=Login In'
    post_account=s.post('https://cp.fcccam.com/index.php?action=login',headers=Post_Hdr,data=post_data2,verify=False,allow_redirects=True).text
    params='bid=5&plan=11&conx=1&category_9=Custom List Option&myfsrc1=Search in channels categories..&myfsrc2=Search in movies categories..&myfsrc3=Search in series categories..&mych[]=submit=submit'
    html_data=s.get(URL,headers=Post_Hdr,data=params,verify=False,allow_redirects=True).text
    with open(LINKFILE, "a") as f: f.write(html_data)
Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

EuroPython 2023 Call For Proposals is closing soon.

by artcz from AFPy discuss

Hi everyone!

I’m Artur, one of the people responsible for EuroPython Conference in Prague this year. Some of you might remember me from pycon.fr in Bordeaux a month ago.

For everyone who participated in EuroPython before – this year we’re planning even bigger and better conference, and it’s happening in July, in Prague, you can find all the details on our website https://ep2023.europython.eu

For everyone who never been to EuroPython – it’s a 7 days long conference (two days of Tutorials, three days of Talks and other Conference activities, then two days of Sprints). It’s been travelling around Europe for the last 20+ years, and this year it’s going to happen in the Czech Republic.
During Conference days we’re planning 6 parallel tracks, about ~150 talks and we’re expecting more than a thousand people during the conference days.
The overall layout would be very similar to last year, so you can check https://ep2022.europython.eu to get a better idea of what you can expect.

If you’d like to speak at EuroPython – Call For Proposals is still open for the next few days (until Monday noon CEST), and you can find all the details here: https://ep2023.europython.eu/cfp

As part of our programme selection we run Comunity Voting – where everyone who has the ticket or attended EuroPython in the last few years can vote on their favourite talks.
Separately we gather feedback from experts in the field. We would like to ask for your help with the review. If you have some spare time over the next week or two, and would be kind enough to share your opinion please sign up here https://forms.gle/abeyB5pJMJKyZcS26 and we will explain everything in more detail once the review process starts next week.

I hope to see all of you in Prague, and that this post will motivate some of you who haven’t submitted their proposals yet to send them this weekend. :slight_smile:

Thanks,
Artur

P.S. Dear admins – I’m not sure if I put in a correct category. Please move it somewhere else if it’s a wrong one :slightly_smiling_face:

As a new user I couldn’t add more than two clickable links so I just put them in quotes if you could please convert them to clickable links it would be greatly appreciated. Thank you!

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

PyConFr 2023 ou 2024?

by freezed from AFPy discuss

Hopla :wave:
Bon comme j’ai passablement flood mon manager au sujet de notre participation (mon employeur et moi) à cette PyConFr, il me demande (déjà) des info sur la prochaine éditions.
Rien n’est fais, mais j’aimerai beaucoup proposer du sprint.

Je sais que la date limite du questionnaire est au 15 avril (je fais le mien ce WE) du coup je suis probablement trop en avance… Sait-on déjà si la prochaine PyConFr restera sur la période de février ou va-t-on changer de période pour revenir en automne?

5 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Meetup Py Clermont #5 à Clermont Ferrand

by drigaudie from AFPy discuss

Bonjour,

Meetyp Py Clermont #5

2023-03-29 19:00 (Europe/Paris) → 2023-03-29 21:30 (Europe/Paris)

Le 29 mars 2023 à 19h venez découvrir 3 talks de 15 minutes sur les sujets suivants :

  • La gestion des websockets par Damien AUTRUSSEAU
  • Sujet mystère par Nastasia FOURET
  • Développer une librairie d’entrainement de modèle d’IA appliquée à la computer vision compatible MultiGPU et AzureML par François PONCHON

Nous serons accueilli par la société Becoms

42B Rue Joseph Desaymard 63000 Clermont Ferrand

Inscription obligatoire sur py.clermont #5 Billets, Le mer 29 mars 2023 à 19:00 | Eventbrite

Au plaisir de se voir la semaine prochaine

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Workflow as Code en Python

by maelropars from AFPy discuss

Bonjour à tous,
je travaille chez l’éditeur Temporal qui s’occupe d’un projet opensource de “workflow as code” qui permet de réaliser facilement des executions longues. Par exemple un traitement qui dépend de services externes pour lesquels il faudrait gérer un timeout, des rejeux en cas d’erreur, paralléliser les appels, attendre x jours pour continuer…

Le SDK python de Temporal est sorti récemment et donc nous sommes preneurs de retours de la part de développeurs Python.

Je partage deux liens pour en savoir plus :
Article sur la réalisation d’une application en python

Lien vers le SDK GitHub - temporalio/sdk-python: Temporal Python SDK

J’espère que cela vous intéressera !

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Contributions à des logiciels libres par l'équipe Yaal Coop durant l'hiver 2023

by Éloi Rivard <eloi@yaal.coop> from Yaal

Cet hiver nous avons surtout travaillé sur Canaille pour préparer l'implémentation de fonctionnalités sponsorisées par la fondation NLNet.

Documentation

Esup-Pod

Plateforme de partage vidéo pensée pour l'enseignement et la recherche

Contributions financées par la Direction du Numérique pour l'Éducation (pôle Formation Ouverte et A Distance)

DSFR

Système de design de l’État

canaille

Serveur OpenID Connect simpliste, basé sur OpenLDAP

nextcloud-oidc-login

Plugin OpenID Connect pour nextcloud

flash-shell-ptpython

Utilisation de l'interpréteur de commandes ptpython dans flask

authlib

Bibliothèque python de gestion des identités et des accès

wtforms

Bibliothèque python de gestion de formulaires web

flask-wtf

Intégration de WTForms dans Flask

python-caldav

Bibliothèque python pour le protocole CalDAV

aioimaplib

Bibliothèque python asyncio IMAP4rev1

simple-svelte-autocomplete

Composant svelte de suggestion d'éléments dans une liste déroulante

python-slapd

Interface pythonique pour contrôler un serveur OpenLDAP

supervisord

Un gestionnaire de processus écrit en Python

Lire la suite…

FOSS contributions from the Yaal Coop team during winter 2023

by Éloi Rivard <eloi@yaal.coop> from Yaal

This winter we have mainly worked on Canaille in order to prepare the implementation of features sponsored by the NLNet foundation.

Documentation

Esup-Pod

Video sharing website aimed at education and research

Contributions funded by the Direction du Numérique pour l'Éducation (Formation Ouverte et A Distance service)

DSFR

French State design system

canaille

Simplistic OpenID Connect provider over OpenLDAP

nextcloud-oidc-login

Nextcloud login via a single OpenID Connect 1.0 provider

flash-shell-ptpython

Ptpython shell for flask

authlib

Identity and Access management library for python

wtforms

A flexible forms validation and rendering library for Python.

flask-wtf

Simple integration of Flask and WTForms, including CSRF, file upload and Recaptcha integration.

python-caldav

Python CalDAV library

aioimaplib

Python asyncio IMAP4rev1 client library

simple-svelte-autocomplete

Simple Autocomplete / typeahead component for Svelte

python-slapd

Controls a slapd process in a pythonic way

supervisord

A Process Control System written in Python

Lire la suite…

Soirée des communautés techniques rennaises

by nledez from AFPy discuss

Soirée des communautés techniques rennaises

2023-04-06 18:45 (Europe/Paris) → 2023-04-06 21:00 (Europe/Paris)

Cette soirée étant organisée conjointement avec les autres communautés, les inscriptions ne se font pas via meetup, mais ici :
:point_right: Soirée des communautés Rennaises - Mobilizon

Description
La première soirée des communautés rennaises aura lieu le 6 avril prochain.
Notre communauté y sera présente avec les autres communautés techniques rennaises (Agile Rennes, Android Rennes, Golang Rennes, Écoconception de services numériques Rennes, Python Rennes, Rennes DevOps, RennesJS, Software Crafters Rennes).

Programme
La contribution du meetup Python Rennes est : Doc-tracing : outiller les discussions d’architecture avec des diagrammes d’exécution des tests fonctionnels.

Plus de détails sur la page de l’événement :

Où il faut s’inscrire.

2 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Blender/UPBGE + Python + Arduino = jumeau numérique

by phroy from AFPy discuss

Bonjour à tous,

Avec l’environnement de développement open source Blender/UPBGE + Python + Arduino, j’ai développé des jumeaux numériques sur trois maquettes : portail coulissant, monte-charge et volet roulant.

L’intérêt de cet environnement de développement est de s’appuyer sur des écosystèmes généralistes, riches et actifs. Python est au cœur, il sert à définir le comportement des jumeaux (numérique et réel) et il sert aussi de liant avec les bibliothèques utilisées (Blender, Matplotlib, pySerial, Qt5, …).

Je suis enseignant et j’utilise ces jumeaux avec mes élèves (Lycée option Sciences de l’Ingénieur) pour découvrir la programmation de système physique (entrée/sortie, machine à états, …).

Philippe Roy

3 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Nouvel outil open source pour Ethical Hackers

by idrisschebak from AFPy discuss

Hello tout le monde,

content de pouvoir vous présenter un outil pour une cause qui me tiens à coeur: l’ethical hacking GitHub - kitsec-labs/kitsec-core: Ethical hacking, made easy.

La réponse de la communauté a été super cool avec 2500 downloads sur pypi, ainsi que 80 stars en 3 jours.

Super chaud d’avoir votre avis : )

3 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

[Bordeaux] Relance des meetups ?

by jazzydag from AFPy discuss

Hello à tou·te·s !

Co-organisateur “historique” des meetups sur Bordeaux, j’aimerais redynamiser un peu tout ça, relancer les présentations & apéro conviviales.

Je cherche à fois des personnes pour proposer des sujets et/ou les présenter, et aussi des gens pour aider à animer la communauté, activer du réseaux, trouver des lieux, etc.

Quelques liens & infos :

Merci et j’espère à bientôt sur Bordeaux !!
Damien / jazzydag

11 messages - 6 participant(e)s

Lire le sujet en entier

Lire la suite…

Software Developer at Odoo

by Odoo from AFPy discuss

A wide range of interesting projects

We develop open source apps to help millions of employees save time in their day-to-day job.

Our projects include:

Business Apps: from point of Sales, to logistics and accounting, we have plenty of projects around business apps (improvement, creation of new features,…)

Frontend UI: Odoo Spreadsheet (an open source Google Spreadsheet alternative), a react/vue style JS framework (the fastest VDOM ever developed).

Python Framework: It’s all about perf and optimizations. (ORM based on PostgreSQL)

Mobile: All Odoo apps run on iOS and Android hybrid mobile apps.

Website / Builder: An open source website builder & eCommerce, to help entrepreneurs launch their website by themselves, without technical hassle.

API / Connectors: Integrate Odoo with payment processors, carriers, or other services.

Security: from product security (code reviews, security patches) to system administration issues (pentesting, best practices, etc.).

After 3 weeks of initial training (both functional & technical), we’ll present you teams looking for new members and you’ll choose the one you prefer.

What’s great in the job?

Great team of very smart people, in a friendly and open culture.

Large apps scope - Diversity in the job, you’ll never get bored.

No customer deadlines - Time to focus on quality, refactoring and testing

No solution architect, no business analysts, no Gantt chart, no boring manager… just great developments.

Real responsibilities and challenges in a fast evolving company.

Friendly working environment located in a renovated farm in the countryside.
An attractive and flexible package: car, fuel card, up to 35 days off per year, meal vouchers (8€/day), eco-cheques (250€/year), hospital insurance, representation fees to cover all your expenses, and much more!

A Chef cooking delicious meals every day at the office

CDI full time (38h/week) with homeworking 2 days/week and flexible hours

More informations:

Apply:

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

[Paris - Remote flex] Developper Django FullStack Expérimenté

by Chadys from AFPy discuss

A propos :

Amarena est une jeune entreprise qui travaille dans le secteur de la vente au détail. Filiale d’un grand groupe qui possède de nombreuses activités commerciales dans les DOM-TOM, Amarena a pour objectif d’accompagner ce groupe dans sa transformation digitale, aujourd’hui devenue prioritaire.

Propriétaire de plusieurs site e-commerce et travaillant activement sur la finalisation d’une place de marché qui se veut devenir le futur “Amazon des DOM-TOM”, nous avons également plusieurs projets de développement d’outils internes en préparation, notamment un ERP qui sera central dans les activités du groupe.

Les projets en cours étant variés et prenant toujours plus d’ampleur, nous cherchons aujourd’hui à agrandir notre équipe de développement par le recrutement d’un dev supplémentaire.

Composition et organisation de l’équipe :

Nous sommes une petite entreprise : 15 personnes, pour une moitié de tech. Vous rejoindrez une équipe de quatre développeurs, tous fullstack, et un admin sys. Nous fonctionnons en suivant une méthodologie SCRUM adaptée, avec des sprints de deux semaines en collaboration avec notre équipe produit composée de 2 Product Owners. Nous tenons à garder une ambiance bienveillante dans nos équipes et à ce que tout le monde soit à son aise.

Localisation :

L’équipe est très flexible au niveau du remote (full ou partiel) mais nous avons deux bureaux.

Le principal au Pré-Saint-Gervais, près du métro Hoche. L’immeuble entier appartient au groupe, dans lequel nous avons nos bureaux dédiés. Nous pouvons profiter d’un toit-terrasse, tables de ping-pong, flipper, babyfoot, petite salle de sport avec douche, …

Un deuxième bureau se trouve également au Lamentin en Martinique, depuis lequel travaille une partie de l’équipe en poste.

Stack technique :

Outils et framework de développement

  • Django (dernière version) + drf + django-ninja
  • Angular 2+ (dernière version)
  • Gitlab-CI

Écosystème partiel (à titre informatif) :

  • Kubernetes (tous nos outils tournent dans notre cluster)
  • ArgoCD
  • Prometheus
  • Sentry
  • Loki
  • Grafana
  • Terraform
  • Ansible
  • Pare-feux PFsense
  • Cluster de VMs Proxmox
  • Cloud baremetal d’OVH

Profil Recherché :

  • Plusieurs années d’expériences en entreprise (5+)
  • De solides connaissances en Django (avoir déjà travaillé sur au moins un projet d’entreprise).
  • Avoir des bases sur un framework front (Angular, React, VueJS) ; bonus si déjà travaillé avec un système de store
  • Une expérience dans le domaine du e-commerce est un plus
  • A envie d’apprendre et n’hésite pas à demander de l’aide en cas de difficulté
  • Aime travailler en équipe

Journée type :

Ma journée démarre, je commence par le daily dev matinal. On se réparti les tickets préparés avec amour par notre équipe produit, je me créé ma branche de travail et c’est parti. Ah, je bloque sur cette feature, je vais envoyer un petit message à l’équipe, il me semble que X a fait un truc similaire il y a quelques mois. Pfiouu une bonne chose de faite, avec X on a pu faire ça tous les deux bien plus efficacement. Après le déjeuner, je passe ensuite en revus quelques bugs remontés par Sentry et je corrige les plus évidents, puis je vais regarder la Merge Request de Y qu’on m’a attribué. Je lui fais quelques remarques qui sont aussitôt adressées et pour finir la journée, d’un geste théâtral je clique enfin sur le bouton qui lance le déploiement du résultat du travail de toute l’équipe sur l’environnement de staging.

Autre :

  • Un minimum d’aisance en anglais est attendu (notre communication écrite passe beaucoup par l’anglais)

Déroulement des entretiens :

  • Candidature (CV)
  • Rencontre CTO
  • Entretien technique
  • Entretien avec un Product Owner et le CEO
  • Rencontre de l’équipe

Si tu es intéressé(e), envoie ton CV à : recrutement@amarena.io

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

[Full Remote] [PME IoT Industriel] Développeur Python/FastAPI + option VueJS ou ML/DS

by nsteinmetz from AFPy discuss

L’entreprise

Flovea a été créé en 2012 et elle est située dans les Landes (Saint-Paul-Lès-Dax, à proximité de Dax). Elle compte aujourd’hui 45 collaborateurs et une filiale à Dubai a été ouverte en 2022.

Elle est spécialisée dans la plomberie hors site (ou préfabriquée) qui permet aux plombiers d’être plus efficace lors de la pose d’éléments de plomberie en chauffage et sanitaires (colonne, dosserets de chaudière, etc) sur leurs chantiers. Cette efficacité se retrouve aussi dans l’industrialisation des procédés d’assemblages et des optimisations de ressources en matériaux.

Flovea possède sa propre usine en France (au siège), ainsi que son propre bureau d’études permettant de concevoir des équipements sur mesure et d’innover de façon permanente.

Plus d’info : https://www.flovea.fr/

En 2019, Flovea se lance dans le projet FLOWBOX, un projet de compteur d’eau intelligent permettant le suivi de sa consommation d’eau et récemment enrichi d’un module de détection de consommation anormale, voire de fuites. Un prix de l’innovation a été obtenu au CES de 2019. Début 2022, en vue d’une commercialisation de la FLOWBOX, elle monte une équipe en interne pour la réalisation du logiciel de la carte de la FLOWBOX et la plateforme logicielle de stockage et traitement des données.

Plus d’info : https://flowboxinteractive.com/

En marge de ces activités, Flovea s’est aussi lancé dans la réalisation d’un banc pédagogique « FlowDidact » à destination des apprentis plombiers ou encore à des projets tels que BaityKool aux Emirats Arabes Unis avec un concept de maison durable (https://baitykool.com/)

Le Poste

Après un an avec des indépendants pour initialiser la nouvelle plateforme et réaliser le logiciel embarqué, nous souhaitons renforcer l’équipe interne avec un développeur Python/FastAPI et une appétence soit pour le frontend avec du VueJS ou une appétence vers le Machine Learning / Data Science.

L’équipe est aujourd’hui composée de la façon suivante :

  • 1 Dev Backend Python/FastAPI - indépendant
  • 1 Dev Front VueJS - indépendant
  • 1 Dev Système Embarqué - indépendant
  • 1 Data Scientiste – salariée
  • 1 DSI/CTO qui fait du back et de l’ops en plus de la coordination globale.

Coté expérience, tout le monde a au moins 5 ans d’expérience, sauf notre Data Scientiste qui est encore très junior.

Les projets actuels utilisent les technologies suivantes :

  • Flowbox :
    • Backend & API : Python/FastAPI, Arq, MQTT, Warp 10 (series temporelles), Postgresql, Redis
    • WebApp: VueJS, TailwindCSS
    • Machine Learning: Tensorflow, Kedro, Python
    • Ops: Traefik, Ansible, Docker
    • Code: Gitlab, Gitlab-CI, Docker, Docker Compose
    • Tests : Pytest
    • Hébergement : OVHCloud
    • Carte électronique : Microcontrolleur STM32 + Code en C
  • Flowdidact :
    • Python, Python/Flask, MQTT sur des Raspberry Pi
    • Carte spécifique + Dev Embarqué en C.
  • Baitykool : Python, Python/Flask, MQTT sur des Raspberry Pi

L’équipe est distribuée pour le moment :

  • La Data Scientiste est au Havre
  • Le DSI/CTO est en Région Parisienne
  • Nos indépendants sont à Lyon, Nantes et St Jean de Luz

De ce fait, nous sommes ouverts à un poste full remote ; sauf si la personne souhaite aller dans les bureaux de St Paul Lès Dax.

Ensuite, on a pour moi deux grandes options :

  • Profil principalement Back + appétence ML/DS ; bonus : appétence OPS ?
  • Profil principalement Back + appétence Front ; bonus : appétence OPS

Par appétence, j’entends la capacité à être intéressé par le sujet et pouvoir faire des choses en collaboration avec les autres / sous les directives d’un autre, voir en autonomie idéalement et de façon progressive :

  • Appétence ML, c’est aussi travailler avec la Data Scientiste pour récupérer ce qui sort de ces algos et les intégrer dans notre backend.
  • Appétence Ops, c’est pouvoir seconder le DSI/CTO dans la gestion de l’infra du projet au quotidien : gérer les déploiements, suivre la production pendant les périodes de vacances, etc
  • Appétence Front, c’est pouvoir modifier un existant en VueJS 3 et idéalement pouvoir faire une webapp simple en VueJS3 dans le cadre de la refonte des projets Flowdidact/Baitykool pour les passer de Python/Flask à Python/FastAPI/VueJS afin d’avoir une stack unique pour les projets. Les interfaces sont assez simples.

Coté expérience, il faudrait une personne qui a déjà de l’expérience pour travailler en autonomie et en remote.

Pour ce qui est nécessaire :

  • Une bonne première expérience avec FastAPI est demandée,
  • Une connaissance de base avec MQTT (ou outil similaire tel que Kafka, RabbitMQ ou autre broker de message en mode pub/sub)
  • Pour le reste, les connaissances de bases suffisent (Postgresql, Redis) et pour Warp 10, nous vous expliquerons comment l’utiliser.
  • Des connaissances en matière de scalabilité (on espère 1000+ Flowbox déployées d’ici la fin d’année et ensuite plusieurs milliers supplémentaires par année).

La fourchette de salaire suivant l’expérience de la personne est de [40-60K€]

Me contacter

Nicolas Steinmetz – ns@flovea.fr - +33 7 62 38 13 24

Si une aventure dans le monde de l’IoT industriel et dans une PME française avec des vocations à l’international vous tente, contactez moi !

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

[Full Remote] Dev (f/h) Python/Rust/VueJs sur application de partage de données cryptographique

by touilleMan from AFPy discuss

L’entreprise

Scille est une start-up (10 ingénieurs en CDI), qui développe Parsec, une solution open-source de partage de données et d’édition collaborative zero-trust en end2end (tl;dr: on fait un Dropbox avec un très haut niveau de sécurité puisque tout est chiffré côté client).

Depuis sa création en 2014, notre entreprise a toujours privilégié le télétravail. et la confiance au sein de l’équipe (par exemple on a des gens à Paris, Grenoble, Angers, Rouen, Bordeaux et Beauvais). La compétence, l’autonomie et le sens des responsabilités sont donc capitaux chez nous !

Le poste

L’application Parsec est originellement écrite intégralement en Python et disponible sur desktop (Linux/Windows/macOS) et Android. Cette dernière plateforme a mis en évidence les limites de Python en matière de portabilité et a motivé la réécriture de la partie client de Parsec en Rust avec une interface graphique Ionic/Vue, notamment afin de rendre l’application disponible sur le web.

Notre stack technologique:

  • Server: Python, Trio, PostgreSQL
  • Ancien Client: Python, Trio, PyQt5
  • Nouveau Client (core): Rust, Tokio
  • Nouveau Client (GUI): Typescript, Vuejs, Ionic

De fait nous recherchons des dev(e)s pour rejoindre notre équipe, aussi bien sur la partie nouvelle GUI, que core Rust et serveur Python.

Qualités recherchées :

  • Rigueur et volonté à aller au fond des choses quand vous travaillez sur un sujet

  • Expérience (pro ou perso) dans le développement de logiciels non triviaux (100k SLOC, architecture client/serveur, support de multiples plateformes, problématique de compatibilité ascendante etc.)

  • Expérience (pro ou perso) dans l’écosystème Python / Rust / Js, ou l’envie de monter dessus :wink:

  • Capacité à travailler en équipe, et notamment à partager ses connaissances pour faire monter en compétences le reste de l’équipe

  • (bonus) expérience en systèmes asynchrones

  • (bonus) expérience en cryptographie

  • (bonus) expérience dans les écosystèmes exotiques: WebAssembly / Android / iOS / MacOS

Le cadre de travail

Le poste est un CDI en télétravail à 100%, toutefois nous essayons de multiplier les occasions de se retrouver afin d’éviter l’isolement et de tisser du lien social entre collègues:

  • Pour les nouveaux: une semaine d’intégration sur nos locaux de Gentilly pour rencontrer les parisiens de l’équipe et prendre ses marques plus sereinement.

  • Tous les 3 mois un séminaire d’entreprise (généralement 1 journée sur Paris, et en été 3 jours dans un cadre sympa)

  • Enfin nous participons aux conférences: PyConFR bien sûr :wink: mais aussi Europython:czech_republic::beers: et FOSDEM​:belgium::beers:

On aime beaucoup l’open-source dans la société, quelques projet pour lesquels on a contribué de manière importante:

Processus de recrutement :

Envoyez un CV + lettre de motivation à job@scille.fr

2 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Gap - Le museum national recrute un développeur Python (biodiversité)

by Camille_MONCHICOURT from AFPy discuss

Bonjour,

Le Muséum National d’Histoire Naturelle recrute un développeur web (Python Flask - Angular - PostgreSQL) sur le projet opensource GeoNature (biodiversité).
Ce poste sera basé au Parc national des Écrins à Gap.
CDD de 2 ans renouvelable.

GeoNature est un logiciel libre, désormais utilisé par une centaine de structures en France pour saisir, gérer et diffuser leurs observations et suivis de la biodiversité (faune/flore/habitats).

Détail de l’offre : https://recrutement.mnhn.fr/offre-emploi-374.html

Bonne journée.

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

PEP 668 : error: externally-managed-environment

by mdk from AFPy discuss

On discute ce matin sur #python-fr sur IRC de la bientôt fameuse « erreur : externally-managed-environment ».

Derrière tout ça, il y a la PEP 668.

TL;DR

Si

$ python3 -c 'print(__import__("sysconfig").get_path("stdlib", __import__("sysconfig").get_default_scheme()))'

te donne un dossier qui contient un fichier EXTERNALLY-MANAGED, alors il est interdit d’utiliser pip avec cet interpréteur, (pour installer il faut donc passer par le gestionnaire de paquets de sa distrib).

Pourquoi ?

Parce qu’utiliser deux gestionnaires de paquets en même temps est un aimant à bugs, le plus méchant pouvant rendre le gestionnaire de paquet de votre distrib inutilisable, une situation inextricable.

Alors, comment on fait ?

On utilise le gestionnaire de paquet de son système d’exploitation, à la place de pip install django on apt install python3-django sur Debian par exemple.

On peut aussi utiliser des venv, la règle ne s’applique pas dans les venvs :

$ python3 -m venv .venv
$ source .venv/bin/activate
$ python -m pip install django
Collecting django
  Downloading Django-4.1.7-py3-none-any.whl (8.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1/8.1 MB 3.4 MB/s eta 0:00:00
Collecting asgiref<4,>=3.5.2
  Using cached asgiref-3.6.0-py3-none-any.whl (23 kB)
Collecting sqlparse>=0.2.2
  Using cached sqlparse-0.4.3-py3-none-any.whl (42 kB)
Installing collected packages: sqlparse, asgiref, django
Successfully installed asgiref-3.6.0 django-4.1.7 sqlparse-0.4.3

Et sudo pip install ?

J’espère que tu n’utilisais pas sudo pip install, c’était déjà un aimant à problèmes, maintenant c’est terminé.

J’ai qu’à sudo rm /usr/lib/python3.11/EXTERNALLY-MANAGED donc ?

C’est un garde-fou, le déboulonner ne me semble pas sage. As-tu déjà eu l’idée de déboulonner le garde-fou de ton balcon « parce qu’il te gêne » ? Peut-être, mais tu ne l’as pas fait, c’est sage.

Mais j’ai compilé mon Python !

Si, comme moi tu aimes compiler ton propre Python pour en avoir plein, il te suffit de ne pas aller volontairement mettre un fichier EXTERNALLY-MANAGED à la racine de la stdlib de ton Python à toi, et tu gardes le droit d’installer, facile :

$ ~/.local/bin/python3.11 -m pip install django
Collecting django
  Using cached Django-4.1.7-py3-none-any.whl (8.1 MB)
Collecting asgiref<4,>=3.5.2
  Using cached asgiref-3.6.0-py3-none-any.whl (23 kB)
Collecting sqlparse>=0.2.2
  Using cached sqlparse-0.4.3-py3-none-any.whl (42 kB)
Installing collected packages: sqlparse, asgiref, django
Successfully installed asgiref-3.6.0 django-4.1.7 sqlparse-0.4.3

À toi de voir si tu préfères avoir ton Python ou le Python de ta distrib en premier dans ton PATH, certains vont préférer :

PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/$HOME/.local/bin

quand d’autres vont préférer :

PATH=/home/$HOME/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

dans le premier cas python, python3 python3.11 sont ceux de votre distrib’, utilisez le gestionnaire de paquets de votre distrib pour leur installer des paquets.

dans le second cas python, python3 python3.11 sont ceux que vous avez compilés, utilisez pip.

Conclusion

Avant, chez moi, la frontière entre le Python de ma distrib et le Python de même version compilé maison, était floue : je pouvais utiliser /usr/bin/python3.11 pour installer dans ~/.local/lib/python3.11, ça se mélangeait un peu les pinceaux.

Maintenant c’est super clair :

  • ~/.local/bin/python3.11 -m pip fait ses installations dans ~/.local/lib/python3.11/, et uniquement ici.
  • /usr/bin/python3.11 ne reçois de paquets Python que de ma distrib.

Chacun chez soi et les serpents seront bien gardés !

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Taichi: Un autre JIT pour paralléliser

by mdk from AFPy discuss

Je viens de croiser Taichi pour la première fois (mais bon ça date de 2016), développé par Yuanming Hu qui à monté sa boite sur sa lib : https://taichi.graphics.

C’est un JIT pour compiler et déléguer au GPU des calculs fortement parallélisés, ça rappelle donc numba.

Quand on présente une lib comme ça, la tradition c’est de présenter un ensemble de Mandelbrot implémenté avec, donc le voici :

Animation de l'ensemble de Mandelbrot

Et l’implémentation :

L'implémentation de l'animation

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Mise en perspective autour de la typographie

by freezed from AFPy discuss

Un podcast que j’adore et que je vous recommande dans son intégralité.

Mais dans cet épisode j’ai pensé fort à @liZe et son intérêt pour la typographie… il s’en eu fallu de peu pour que weasyprint ne soit cité :slightly_smiling_face:

2 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Paris - DevOps / Développeur(se) informatique Python - Ansible

by Corsicasole from AFPy discuss

Qui sommes-nous ?

Corsica Sole est une PME créée en 2009 spécialisée dans le développement & l’exploitation de
projets photovoltaïques, avec également une forte spécialisation sur les projets de stockage
d’énergie en France et en Europe.

Engagée dans la transition énergétique, la société Corsica Sole est en innovation constante pour
produire une énergie propre, intégrée aux territoires et créatrice d’emplois.

Forte d’une équipe dynamique de plus de 75 personnes, Corsica Sole est implantée à Paris, Bastia, Lyon, Marseille, Bordeaux, Toulouse, la Réunion, la Guadeloupe, la Martinique et la Guyane.

Acteur majeur du photovoltaïque et 1er exploitant de stockage d’énergie en France, Corsica Sole
exploite actuellement 100 MWc de puissance solaire et plus de 150 MWh de capacité de stockage.

Corsica Sole développe également des projets innovants de production d’hydrogène et possède
une filiale dédiée à la conception et au développement de solutions de recharge pour véhicules
électriques, sa filiale Driveco.

Corsica Sole a levé plus de 350 M€ pour le financement court terme et long terme de ses projets.
Rejoindre Corsica Sole vous permet d’intégrer une structure dynamique à taille humaine, porteuse de sens et de valeurs humaines fortes.

Votre mission

Sous la responsabilité du Directeur Technique, vous avez la charge de piloter le développement, le déploiement et la maintenance des logiciels EMS (Energy Management System) qui permettent de planifier et de contrôler la charge et la décharge de batteries situées sur différents sites en France.

Votre mission consiste notamment à :

• Coordonner le développement du logiciel et piloter les travaux des différents experts ;
• Développer, déployer et maintenir des logiciels informatiques en étant en parfaite harmonie
avec l’infrastructure de l’entreprise : logiciel de pilotage de centrale, applicatif d’échanges
de données, serveur web d’affichage et de remontée des indicateurs, logiciels d’analyse de
données ;
• Automatiser, organiser et piloter tous les tests afin de garantir le bon fonctionnement ;
• Apporter conseils et expertise pour l’administration, le maintien à niveau et le fonctionnement
des outils informatiques, notamment les serveurs de pilotage et de supervision ;
• Participer à l’amélioration des algorithmes d’optimisation et de planification de l’utilisation
des batteries selon les cahiers des charges techniques et les opportunités des marchés ;
• Traiter les évènements d’exploitation informatique (alertes, défaillances, …) ;
• Être force de proposition dans l’amélioration et l’évolution des produits.

Votre Profil

Diplômé(e) d’une grande école d’ingénieur, vous justifiez d’une expérience d’au moins 3 ans dans
des missions de développement informatique.

Vous connaissez ou maitrisez :
• Le pilotage de projet informatique
• L’environnement de travail git (github) et de déploiement sous Linux.
• Le développement logiciel (Python), sûreté de fonctionnement, redondance, …
• Le déploiement de logiciels : ansible, docker, scripts shell, …
• Les protocoles d’échanges de données (SFTP, HTTP, SMTP, …).

La gestion de base de données et la maitrise du développement web avec Django seraient un plus.

Doté(e) d’une bonne capacité organisationnelle, vous savez gérer vos priorités et mener plusieurs
processus en parallèle. Dynamique et rigoureux(se), vous savez faire preuve d’autonomie ainsi que
d’un bon esprit d’équipe.

Informations clés

Localisation : Paris
Type de contrat : CDI
Rémunération : fixe à définir en fonction du profil + avantages
Processus de recrutement
Si cette offre vous intéresse, merci d’envoyer votre CV et votre lettre de motivation par mail à
l’adresse suivante : diane.deproit-ext@corsicasole.com

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Paris - DevOps / Développeur(se) informatique Python - Ansible, Secteur : Energies Renouvelables

by Corsicasole from AFPy discuss

Qui sommes-nous ?

Corsica Sole est une PME créée en 2009 spécialisée dans le développement & l’exploitation de
projets photovoltaïques, avec également une forte spécialisation sur les projets de stockage
d’énergie en France et en Europe.

Engagée dans la transition énergétique, la société Corsica Sole est en innovation constante pour
produire une énergie propre, intégrée aux territoires et créatrice d’emplois.

Forte d’une équipe dynamique de plus de 75 personnes, Corsica Sole est implantée à Paris, Bastia, Lyon, Marseille, Bordeaux, Toulouse, la Réunion, la Guadeloupe, la Martinique et la Guyane.

Acteur majeur du photovoltaïque et 1er exploitant de stockage d’énergie en France, Corsica Sole
exploite actuellement 100 MWc de puissance solaire et plus de 150 MWh de capacité de stockage.

Corsica Sole développe également des projets innovants de production d’hydrogène et possède
une filiale dédiée à la conception et au développement de solutions de recharge pour véhicules
électriques, sa filiale Driveco.

Corsica Sole a levé plus de 350 M€ pour le financement court terme et long terme de ses projets.
Rejoindre Corsica Sole vous permet d’intégrer une structure dynamique à taille humaine, porteuse de sens et de valeurs humaines fortes.

Votre mission

Sous la responsabilité du Directeur Technique, vous avez la charge de piloter le développement, le déploiement et la maintenance des logiciels EMS (Energy Management System) qui permettent de planifier et de contrôler la charge et la décharge de batteries situées sur différents sites en France.

Votre mission consiste notamment à :

• Coordonner le développement du logiciel et piloter les travaux des différents experts ;
• Développer, déployer et maintenir des logiciels informatiques en étant en parfaite harmonie
avec l’infrastructure de l’entreprise : logiciel de pilotage de centrale, applicatif d’échanges
de données, serveur web d’affichage et de remontée des indicateurs, logiciels d’analyse de
données ;
• Automatiser, organiser et piloter tous les tests afin de garantir le bon fonctionnement ;
• Apporter conseils et expertise pour l’administration, le maintien à niveau et le fonctionnement
des outils informatiques, notamment les serveurs de pilotage et de supervision ;
• Participer à l’amélioration des algorithmes d’optimisation et de planification de l’utilisation
des batteries selon les cahiers des charges techniques et les opportunités des marchés ;
• Traiter les évènements d’exploitation informatique (alertes, défaillances, …) ;
• Être force de proposition dans l’amélioration et l’évolution des produits.

Votre Profil

Diplômé(e) d’une grande école d’ingénieur, vous justifiez d’une expérience d’au moins 3 ans dans
des missions de développement informatique.

Vous connaissez ou maitrisez :
• Le pilotage de projet informatique
• L’environnement de travail git (github) et de déploiement sous Linux.
• Le développement logiciel (Python), sûreté de fonctionnement, redondance, …
• Le déploiement de logiciels : ansible, docker, scripts shell, …
• Les protocoles d’échanges de données (SFTP, HTTP, SMTP, …).

La gestion de base de données et la maitrise du développement web avec Django seraient un plus.

Doté(e) d’une bonne capacité organisationnelle, vous savez gérer vos priorités et mener plusieurs
processus en parallèle. Dynamique et rigoureux(se), vous savez faire preuve d’autonomie ainsi que
d’un bon esprit d’équipe.

Informations clés

Localisation : Paris
Type de contrat : CDI
Rémunération : fixe à définir en fonction du profil + avantages
Locaux bien situés à Paris (75014), Ticket restaurant, Transport métro, bus : en bas d’immeuble

Processus de recrutement

Si cette offre vous intéresse, merci d’envoyer votre CV et votre lettre de motivation par mail à
l’adresse suivante : diane.deproit-ext@corsicasole.com

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Chat de Discourse

by mdk from AFPy discuss

Miaou,

Attention, je ne parle pas de Discord, je parle bien d’un chat sur notre « https://discuss.afpy.org ».

Discourse permet depuis la dernière version d’activer un chat (vous pouvez le tester sur meta.discourse.org).

J’ignore si c’est une bonne idée de l’activer chez nous, mais en tant que juste sysadmin je laisserai volontiers cette décision aux membres de l’asso, et peut-être le dernier mot au CD.

J’y vois un avantage : quelqu’un qui ne voudrait ni rejoindre IRC ni sur Discourse pourrait discuter ici.

J’y vois un inconvénient : on a déjà IRC et Discord, est-ce qu’on veut un 3ème chat ? Est-ce qu’on veux encore un relai ?

10 messages - 4 participant(e)s

Lire le sujet en entier

Lire la suite…

Quizz Python : esp[èa]ce de nom

by serge_sans_paille from Linuxfr.org

Demat' iNal

Regarde bien dans les yeux le bout de code suivant

def foo():
  x = 1
  class bar:
    x = x + 1
  return bar
foo()

exécute le mentalement. Rien d'exceptionnel ?
Et pourtant si,

NameError: name 'x' is not defined

Maintenant essayons avec :

def foo():
  x = 1
  class bar:
    y = x + 1
  return bar
foo()

Et là… non, rien.

Intuitivement, j'imagine que le x = x + 1 rend Python tout confus, mais j'aimerai mettre le doigt sur une source officielle et je n'la trouve point. Sauras-tu faire mieux que moi ?

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Pour les grenoblois - Meetup le 28 mars

by Pierre-Loic from AFPy discuss

Bonjour à tous,

Pour le Meetup Python du mois de mars à Grenoble, ce sera un talk sur l’écosystème Jupyter et plus particulièrement sur Jupyter Lite par Jérémy Tuloup (Directeur Technique chez QuantStack et Code Développeur du projet Jupyter).

Créer des sites web Jupyter interactifs avec JupyterLite

2023-03-28 19:00 (Europe/Paris) → 2023-03-28 21:00 (Europe/Paris)

2 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Mise à disposition des videos PyconFr 2023

by fipaddict from AFPy discuss

(En lien avec le message de @Amaury : Contact de l'équipe de captation/montage suite à demande de ressources que je n’ai pas voulu polluer)

Ne connaissant pas la nature des échanges entre l’afpy et raffut.media, je pose ça là :wink:

Les équipes de https://www.raffut.media/ ont mis en ligne, sur leur compte peertube (raffut_media - Peertube.fr), les captations vidéos de la PyconFr 2023. Et ça, c’est top pour celleux qui n’ont pu s’y rendre.
Les vidéos sont un peu bruts de captage par salle physique, sans être découpées par conférence. Du coup, c’est un peu compliqué de s’y retrouver. Quelque chose est il prévu pour proposer, par exemple : une conf = une capsule vidéo ?

  • Si oui, comment peut-on aider sur le sujet
  • Si non, comment faire pour proposer quelque chose ? (Peut on reprendre les vidéos faites par raffut, les découper, les mettre à dispo (où ?) …

5 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

Contact de l'équipe de captation/montage suite à demande de ressources

by Amaury from AFPy discuss

Salut,

Pendant la PyCon, j’ai été approché par l’équipe de captation car iels désiraient les vidéo de ma conférence pour assurer que la rediffusion serait propre. On devait se recroiser pour avoir leur contact mais ça n’a pu avoir lieu.

Est-ce que l’un d’entre vous aurait un contact pour pouvoir leur envoyer ces éléments demandés ? Merci d’avance !

P.-S. Première fois que je poste ici, j’espère que ce n’est pas trop petit pour ouvrir un sujet dédié :slight_smile: .

3 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Pour les parisiens − AFPyro chez Logilab le 16 mars

by mdk from AFPy discuss

Bonjour les gens,

Les AFPyro reprennent, boostés par la PyConFr :slight_smile:

Le prochain aura lieu chez Logilab (merci à eux pour l’accueil !), 104 boulevard Louis-Auguste Blanqui
75013 Paris
, avec un format habituel d’une présentation ou deux suivies de pizzas (ou autre) pour discuter.

Qui se propose pour présenter quelque chose ? Durée maximum 20min, faites vos propositions en réponse à ce fil, ou en message privé si vous préférez en discuter avant.

AFPyro chez Logilab

2023-03-16 19:00 (Europe/Paris) → 2023-03-16 21:30 (Europe/Paris)

11 messages - 5 participant(e)s

Lire le sujet en entier

Lire la suite…

Nantes - Informati-Barmaid

by sebcorbin from AFPy discuss

Je relaie une offre d’emploi d’un lieu apprécié des nantais :

TECHNICIEN-NE INFORMATIQUE / BIDOUILEUR-SE DE GENIE (ET IDEALEMENT SERVEUR.SE A PIOCHE).

MISSIONS EN INFORMATIQUE
• Maintien en fonctionnement et mise à jour des matériels informatiques, électroniques et des logiciels (réseau, salles de jeu, postes fixes et portables).
• Gestion et ajustement des paramètres des jeux en lien avec l’équipe.
• Suivi et/ou développement de projets informatiques liés à la création de jeux dans des formes variées (de la rédaction de cahier des charges jusqu’au test, au recettage et à la mise en place d’une documentation pour le reste de l’équipe).
• Maintien en fonctionnement et mise à jour du site internet (hors design et contenu).

LES MISSIONS AU BAR =
à discuter, de 1 soir/mois à 2,5 soir/semaine
• Activités liées au service et à l’animation du bar
• Animer et piloter des groupes de joueur•ses au sein de Pioche
• Créer une relation chouette avec les client-es
• En option: animer des événements autour des enjeux du numérique (type conférence/jeu/atelier).

PROFIL
• Formation initiale ou continue en informatique, électronique, ou électro-technique.
• Expérience forte en environnement LINUX, si possible avec création de systèmes interactifs (ordinateur - micro- contrôleur - multiples capteurs/actionneurs)
• Autonomie dans l’organisation, rigueur et capacité à travailler dans un environnement dynamique et atypique
• Esprit critique et envie de faire la révolution

PARTICULARITÉS DU POSTE
• Collègues incroyables et ambiance de travail idyllique
• Réunion d’équipe hebdomadaire
• Travail majoritairement en semaine et en journée (lundi au vendredi). Horaires mensualisés.
• Solidarité et transparence des salaires au sein de l’équipe.

Ouverture du poste dès que possible Pour candidater ou pour obtenir plus d’infos, écrivez nous à lequipe@pioche.co
PIOCHE - JOUEZ COLLECTIF

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Sortie de Crème CRM en version 2.4

by GuieA_7,palm123 from Linuxfr.org

Le 1ᵉʳ février 2023 est sortie la version 2.4 du logiciel de gestion de la relation client Crème CRM (sous licence AGPL-3.0). La précédente version, la 2.3, était sortie quasiment un an auparavant, le 15 février 2022.

Icone de Crème CRM

Au programme notamment, le passage à Python 3.7, l'utilisation de la bibliothèque JavaScript D3.js pour de meilleurs graphiques, une nouvelle synchronisation des e-mails. Les nouveautés sont détaillées dans la suite de la dépêche.

Sommaire

Description du logiciel

Crème CRM est un logiciel de gestion de la relation client, généralement appelé CRM (pour Customer Relationship Management). Il dispose évidemment des fonctionnalités basiques d’un tel logiciel :

  • un annuaire, dans lequel on enregistre contacts et sociétés : il peut s’agir de clients, bien sûr, mais aussi de partenaires, prospects, fournisseurs, adhérents, etc. ;
  • un calendrier pour gérer ses rendez‐vous, appels téléphoniques, conférences, etc. ; chaque utilisateur peut avoir plusieurs calendriers, publics ou privés ;
  • les opportunités d’affaires, gérant tout l’historique des ventes ;
  • les actions commerciales, avec leurs objectifs à remplir ;
  • les documents (fichiers) et les classeurs.

Crème CRM dispose en outre de nombreux modules optionnels le rendant très polyvalent :

  • campagnes de courriels ;
  • devis, bons de commande, factures et avoirs ;
  • tickets, génération des rapports et graphiques…

L’objectif de Crème CRM est de fournir un logiciel libre de gestion de la relation client pouvant convenir à la plupart des besoins, simples ou complexes. À cet effet, il propose quelques concepts puissants qui se combinent entre eux (entités, relations, filtres, vues, propriétés, blocs), et il est très configurable (bien des problèmes pouvant se résoudre par l’interface de configuration) ; la contrepartie est qu’il faudra sûrement passer quelques minutes dans l’interface de configuration graphique pour avoir quelque chose qui vous convienne vraiment (la configuration par défaut ne pouvant être optimale pour tout le monde). De plus, afin de satisfaire les besoins les plus particuliers, son code est conçu pour être facilement étendu, tel un cadriciel (framework).

Du côté de la technique, Crème CRM est codé notamment avec Python/Django et fonctionne avec les bases de données MySQL, SQLite et PostgreSQL.

Principales nouveautés de la version 2.4

Voici les changements les plus notables de cette version :

Passage à Python 3.7

Python 3.6 n'est désormais plus géré, Python 3.7 devient la version minimale. Cela nous a permis d'améliorer les annotations de types.

Des graphiques améliorés

La bibliothèque D3.js a remplacé jqPplot afin de pouvoir faire des graphiques plus complexes et plus performants (utilisation de SVG natif, moins de re-téléchargement de données). Les graphiques sont capables de se redimensionner lorsque la fenêtre est elle-même redimensionnée, et on peut zoomer à l'envi.

Creme dispose depuis toujours d'une app (un module au sens Django) "graphs" qui permet de représenter graphiquement les relations entre des fiches. Jusqu'à Creme 2.3, le rendu était effectué par la célèbre bibliothèque graphviz du coté serveur lorsqu'on demandait à télécharger l'image PNG correspondante. Mais maintenant, un bloc affiche directement le résultat sur la page du graphique avec un rendu coté client (on peut cependant télécharger l'image correspondante afin de l'utiliser ailleurs).

Cette transition va surtout permettre dans le futur de créer de nouveaux types de graphique et d'ajouter de nouvelles fonctionnalités à ceux existants.

Modification de champs multiples

Creme propose depuis des années de modifier un champ spécifique d'une fiche (exemple : le champ "téléphone" de M. Jules Verne), que ce soit depuis un bloc sur la vue détaillée de cette fiche ou depuis la vue en liste correspondant à ce type de fiche. Cela permet d'éviter d'ouvrir le gros formulaire de modification de cette fiche si on veut juste modifier un champ qu'on a déjà sous les yeux.

Il est fréquent que dans un bloc on affiche plusieurs champs d'une même fiche ; si on veut modifier plusieurs champs à la suite (typiquement une personne au téléphone qui vous précise plusieurs de ses coordonnées), il fallait jusqu'à présent passer par plusieurs modifications de champs (ou bien ouvrir le gros formulaire) ce qui n'était pas optimal.

Pour améliorer cette situation, Creme 2.4 introduit la possibilité de modifier les différents champs affichés par un bloc en une seule fois. Par exemple voici un classique bloc d'information de Société :

Bloc d'information de la société Acme

Si vous cliquez sur le bouton "Modifier" en haut à droite du bloc, un formulaire (qui reprend bien les différents champs de notre bloc) apparaît :

Nouveau formulaire de modification multiple

Synchronisation d'e-mails externes revue entièrement

Il était possible dès Creme 1.0 d'importer des e-mails envoyés depuis (et reçus dans) d'autres applications (votre client e-mail typiquement), afin de garder des traces d'échange dans votre CRM même si les e-mails ont été échangés en dehors de Creme. Cependant cette synchronisation avait pas mal de soucis :

  • La configuration se faisait via le fichier "settings.py" (par l'administrateur uniquement donc, et pas en visuel).
  • Il n'y avait pas d'IMAP (que du POP).
  • Il n'y avait pas de mécanisme de bac à sable (les fiches E-Mails étaient créés dans tous les cas et pouvaient recevoir le statut SPAM)…

La synchronisation a été entièrement revue et corrige entre autres tous les soucis énumérés ci-dessus :

  • On peut configurer les adresses e-mail de synchronisation via l'interface de configuration des e-mails ; POP & IMAP sont acceptés.
  • On a un bac à sable permettant de voir et de corriger les e-mails avant de les accepter (c'est-à-dire les transformer en vraie fiche Creme), voire de les supprimer.

Bac à sable des e-mails importés

Plus de détails ici.

Plus de widgets de formulaire adaptés aux gros volumes

Si la sélection dans les formulaires d'autres fiches (entités) s'est toujours faite via un widget maison gérant la recherche, la pagination et le chargement dynamique des résultats (et donc le fait de gérer sans problème de grands nombres de fiches), ce n'était pas le cas pour la sélection des petits modèles auxiliaires accompagnant ces fiches (exemples: statut de devis, secteur d'activités…).
Nous sommes passés à la bibliothèque JavaScript Select2 (nous utilisions auparavant Chosen) pour afficher dans les formulaires des sélecteurs qui se chargent désormais dynamiquement (lorsque c'est nécessaire) et gèrent la recherche.

Changement de mot de passe

Il a toujours été possible dans la configuration des utilisateurs qu'un super-utilisateur change le mot de passe d'un utilisateur.
Avec Creme 2.4, les utilisateurs peuvent désormais :

  • changer leur propre mot de passe en étant déjà connecté.
  • réinitialiser leur mot de passe en cas d'oubli.

La réinitialisation se fait via la page de connexion qui dispose maintenant par défaut d'un lien "Vous avez perdu votre mot de passe ?" en dessous du bouton "Se connecter" :

Page de connexion améliorée

Quelques autres améliorations en vrac

  • Lorsqu'on clone un rôle, les configurations de blocs, formulaires et recherche peuvent être clonées en même temps.
  • Un job qui supprime périodiquement les sessions expirées a été ajouté.
  • Les entrées du menu principal peuvent maintenant être personnalisées par rôle ; l'icône du menu peut être personnalisée globalement.
  • Les types de relation peuvent être désactivés. Dans le cas où vous ne vous servez pas d'un type, cela permet de réduire les choix possibles et donc de rendre les formulaires plus légers/agréables.
  • Les alertes peuvent avoir une date de déclenchement dynamique (détails).

Le futur

La prochaine version, la 2.5, marquera un changement dans nos dates de releases. En effet, Django sort, depuis quelques années, une nouvelle version tous les 8 mois, et surtout une version gérée à long terme (LTS) tous les 2 ans, en Avril. Donc en sortant en début d'année nous nous privions d'une période de support de plusieurs mois, et lorsque nous passions d'une version LTS à la suivante celà ne laissait qu'une période de quelques mois pour mettre à jour son instance de Creme pendant laquelle l'ancienne et la nouvelle version de Django recevaient au moins des correctifs de sécurité. Même si ce n'était pas dramatique, nous voulons améliorer cette situation. Ainsi nous avons décidé que les prochaines versions de Creme sortiraient en milieu d'année (aux alentours de Juillet).

Creme 2.5 sera donc une version plus petite qu'à l'accoutumée en sortant cette été, et utilisera Django 4.2 qui sortira en Avril 2023. La version minimale de Python sera la 3.8. Si on ne sait pas encore quelles sont toutes les fonctionnalités qu'on aura le temps d'inclure, une réinitialisation des formulaires personnalisés à par exemple déjà été incluse dans la branche main.

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Docker en production : le cas d'usage de Bearstech

by Bearstech from Bearstech

Docker s'est imposé au fil des ans comme une solution universelle pour gérer les environnements de développement. Il faut dire que la conteneurisation, popularisée par Docker, présente un avantage substantiel lorsqu'il est question d'installer des environnements et travailler localement.

Docker est reproductible ;
Docker offre des silos isolant l'environnement de travail ;
Docker permet de gérer le système comme une stack de développement.

Mais le passage en production est souvent un exercice complexe : le réseau, les volumes et autres briques viennent complexifier les opérations sur les machines de production.
Avant d'entrer dans le cœur du sujet, nous devons préciser que Docker est une solution tout à fait satisfaisante pour un grand nombre d'entreprises qui souhaitent le déployer et ont les compétences techniques, et les ressources humaines adéquates.
Chez Bearstech nous déployons très régulièrement des conteneurs Docker notamment dans le cadre de notre workflow DevOps. Mais lorsque qu'un projet est prêt pour la production, nous faisons souvent le choix de la VM sans conteneur.
Cet article vise à expliciter cette démarche et communiquer sur notre conception de l'administration système.
Nous avons organisé une série de webinars sur les limites de Docker : Le côté obscur de Docker où nous parlons d'exemples concrets où Docker se comporte d'une drôle de façon.
Les avantages de Docker en production
Docker en production présente des avantages notables que nous reprenons ici pour contextualiser notre perspective, c'est en pleine connaissance de cause que nous faisons le choix de ne pas déployer Docker systématiquement en production et nous devrons donc répondre à ces enjeux lorsque nous présentons notre approche.

D'abord, il peut permettre dans certaines conditions de densifier l'infrastructure en exploitant un maximum des ressources de la machine hôte.
Les applications sont isolées dans des containers ce qui offre en principe des niveaux de sécurité supplémentaires.
Le développement, la pré-production et la production sont identiques et facilement reproductibles.
L'ensemble des éléments nécessaires pour le fonctionnement des apps peuvent être gérés directement par les développeurs en éditant les Dockerfile et Docker Compose.

Pourquoi nous ne déployons pas Docker en production
Les inconvénients de Docker en production
Abordons d'abord les contraintes de Docker en général, puis nous explorerons ensemble les enjeux de Docker dans notre cas particulier.
Passé un certain nombre de conteneurs déployés, un orchestrateur devient incontournable, ajoutant une couche de complexité supplémentaire.
La gestion du réseau et la communication entre les conteneurs est elle aussi complexe et nécessite l'usage de reverse proxy comme træfik.
L'immense latitude qu'offre Docker présente des risques de sécurité : quand on peut tout faire… on peut aussi faire n'importe quoi. D'autant, qu'il peut devenir très délicat de vérifier et auditer les images Docker. Ceci est d'autant plus délicat que l'on demande à des développeurs de prendre la responsabilité (et donc le savoir-faire) des administrateurs systèmes (par ex. penser à mettre à jour le paquet système SSL en plus de ses propres dépendances applicatives, etc.)
Pour finir, Docker ajoute un grand nombre de couches logicielles supplémentaires qui coûtent en ressources. Par exemple un conteneur Nginx par projet, alors qu'il peut être mutualisé et fournir ainsi une scalabilité bien supérieure (colle : comment "tuner" 100 NGinxes de façon coopérative sur une même VM ?). Pour nombre de projets, Docker coûte plus qu'il apporte.
Docker dans le cadre de nos prestations d'infogérance
Bearstech gère des infrastructures informatiques depuis 2004 et nous travaillons au quotidien pour améliorer la performance, la sécurité et la disponibilité des services de nos clients.
Pour répondre à ces objectifs, nous avons déployé une large expertise de la gestion des VMs. Cela constitue évidemment un biais, mais nous savons bien sûr dépasser nos a priori et proposer les solutions les mieux adaptées à nos clients.
Nous travaillons depuis 2014 avec Docker, notamment dans le cadre de notre Workflow DevOps. Le conteneur n'était alors pas une nouveauté pour nous, puisque nous exploitions LXC depuis 2009 pour des projets spécifiques à haute densité.
Mais pour assurer nos missions dans les meilleurs conditions et à un coût raisonnable, nous faisons le choix de l'homogénéité sur l'ensemble de notre infrastructure, ne dérogeant à cette approche que lorsque le besoin client ne peut pas être satisfait par cette règle générale. Il faut noter, qu'il s'agit de la même raison pour laquelle nous ne déployons pas de bare metal pour nos clients.
Par ailleurs, Docker n'offre pas les garanties satisfaisantes lorsqu'il est question de bases de données :

En premier lieu, sur les gros volumes de données Docker perd en performance et en maintenabilité. Or, chez Bearstech, nous pensons que la base de données est le componsant le plus sensible des systèmes que nous infogérons.
Ensuite, les possibilités offertes par Docker permettent de contourner les bonnes pratiques de sécurité auxquelles nous nous astreignons, particulièrement dans un contexte de données sensibles.

Mais quid de la reproductibilité ? Certainement Docker nous permettrait d'accélérer la portabilité des environnements ? Oui, c'est indiscutable, Docker est un avantage sur ce point. C'est d'ailleurs son principal argument. Mais notons que nous avons chez Bearstech une démarche infrastructure as code qui nous offre la flexibilité et l'efficacité nécessaire pour répondre aux attentes spécifiques de chaque client.
De notre point de vue, les apports de Docker en la matière nous imposent des contreparties parfois bien trop coûteuses, pour un objectif déjà rempli par nos solutions de virtualisation (et conteneurisation).
Un autre avantage qui s'accompagne de compromis trop coûteux : la question de l'exploitation optimale des ressources. Nous avons souligné que Docker est très souvent un facteur favorable pour la densification de l'infrastructure.
L'exploitation maximale des ressources déployées est nécessaire aussi bien sur le plan budgétaire, qu'écologique. Mais au final, le choix entre virtualisation et conteneurisation dépend de stratégies plus ou moins établies.
Docker peut ironiquement mener souvent à des infrastructures moins denses : il nous est souvent demandé de déployer des clusters entiers de VMs avec des conteneurs pour une poignée d'applications en production - ce qui se justifie techniquement quand on doit garantir des performances prévisibles -, alors qu'une infrastructure nettement plus simple sans conteneur fournirait un service équivalent avec moins de ressources matérielles.
Chez Bearstech nous avons atteint un niveau de densification de notre infrastructure satisfaisant sans avoir à complexifier nos systèmes et nos procédures en ajoutant une technologie comme Docker, aussi puissante soit-elle. La conteneurisation est redondante avec notre approche de la virtualisation et les contraintes de Docker dépassent largement d'hypothétiques gains.
Docker présente un autre problème majeur dans le cadre de nos prestations : nous l'avons dit, il permet aux développeurs de gérer le système comme du code. Cet avantage, lors de la phase de prototypage devient un écueil pour l'exploitation des services en production.
Nos garanties en tant que prestataire (l'exploitation irréprochable des services, leur sécurité, les temps de réponse de notre d'astreinte) n'est pas compatible avec la possibilité donnée par Docker aux développeurs de gérer ses environnements via les Dockerfiles et Docker Compose.
Nous pourrions mettre en place des protocoles restreignant cette liberté, en imposant des Dockerfiles et des fichiers docker-compose.yml made in Bearstech mais dans cas, les contraintes apportées par cette approche rendent le choix de Docker beaucoup moins pertinent.
Notre rôle en tant qu'infogérant, que ce soit sur notre infrastructure, sur les services d'OVHCloud, de Google ou AWS est d'apporter des garanties quant à la sécurité, la disponibilité et la performance des applications.
Nous pouvons répondre à toutes les attentes de nos clients sans surcouche Docker et en tant qu'acteurs rationnels, nous préférons généralement la simplicité, sauf si la complexité est justifiée par des avantages clairs et mesurables.

Lire la suite…

[Full Remote] Développeur(euse) Back End Python + Ansible

by Louis from AFPy discuss

Bonjour à tous,

Un poste est ouvert chez Labellevie pour un(e) developpeur(euse) backend qui travaillera egalement avec le responsable d’infra. Ce poste est intéressant pour toute personne à l’aise en backend python qui souhaite se mettre à Ansible et approfondir ses connaissance admin sys. Il y aura des problématiques backend classique (pg , DRF) .

La fourchette de salaire est entre 40KE et 60KE. J’ai envie de dire que l’ambiance est sympa, mais je suis forcement pas objectif :slight_smile: .

pour me contacter : louis.perrier at deleev.com , avec un CV idealement :slight_smile:

voila l’annonce :

“La Belle Vie by Deleev" est une startup parisienne dans le secteur de la foodtech. Notre spécialité : livrer vite et bien à nos clients des produits du quotidien de qualités !

Notre équipe apporte les meilleurs outils possibles aux équipes opérationnelles pour leurs permettre de supporter notre croissance rapide. Via la mise en place d’automatismes, d’api et d’interfaces soignées, nous leurs permettons de profiter d’outils innovants dans le secteur de la grande distrib.

Rejoins-nous pour bousculer le monde de la grande distrib !

Chez nous

  • On est en phase de structuration, si tu aimes “mettre ta pierre à l’édifice”, c’est le bon moment !
  • Chacun a une responsabilité sur une partie déterminée du code (stats, logistique, ecommerce ….), et est relativement libre des choix sur cette partie (même si il y a relecture).
  • “Labellevie” est une organisation “remote first”. La majorité des gens travaille au moins à 50% en remote.
  • Dans la mesure du possible, l’équipe tech est “protégée” des interruptions car on considère que la concentration fait gagner en efficacité.

Nous cherchons une personne

  • qui maitrise SQL, Javascript et un autre langage de programmation
  • pour qui Le monde de containérisation n’est pas étranger (ex : docker, docker-compose …)
  • qui connais ou souhaite apprendre python
  • qui aime les challenges techniques et fonctionnels
  • de curieux et d’autonome.
  • qui a plaisir à voir le résultat de son travail, et qui en saisit les enjeux.
  • qui a déjà au moins 2 ans d’expériences en développement web ou programmation en général.

Notre stack est faite en Python / Django REST Framework / Vuejs / React js.

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Montage PC/ Bonnes connaissances hardware

by john_johnk from AFPy discuss

Hello à tous,
J’ai monté ma config récemment et j’ai beaucoup de problèmes de BSOD et d’instabilité. Je n’arrive pas vraiment à en determiner la cause. Si quelqu’un était dispo sur Paris ( avec de bonnes connaissances hardware et de l’xp dans ce domaine) pour me donner un coup de main moyennant finances…
Merci beaucoup

10 messages - 5 participant(e)s

Lire le sujet en entier

Lire la suite…

AFPy

by AFPy - Mastodon from AFPy - Mastodon

- Les volontaires qui se sont occupés de l'organisation. Et ceux qui sont venus proposer spontanément leur aide sur place.

- Les conférencières et conférenciers
- Les animatrices et animateurs d'ateliers
- Les facilitatrices et facilitateurs de sprints

Et enfin, merci à toutes les participantes et participants.

Lire la suite…

AFPy

by AFPy - Mastodon from AFPy - Mastodon

Le temps du bilan a sonné.
Les participants recevront un questionnaire afin de recueillir leur sentiment concernant cette PyConFR. Ce qui a été et aussi ce qui a moins été, afin de nous permettre une encore meilleure PyConFR l'année prochaine.

Il nous faut aussi remercier beaucoup de monde sans qui la PyConFr n'aurait pas été une aussi bonne réussite :

Lire la suite…

AFPy

by AFPy - Mastodon from AFPy - Mastodon

Et voilà ! La PyConFR 2023, c'est terminé.
400 développeuses et développeurs Python ont pu se réunir de Jeudi à Dimanche à l'Université de Bordeaux.

Les vidéos des conférences arriveront dans les semaines qui suivent et nous communiquerons ici dès qu'elles seront disponibles.

Le temps du bilan a sonné.

Lire la suite…

MINISTERE DE L'ECONOMIE ET DES FINANCES - Data scientist confirmé - PEREN-139...

by pilou from AFPy discuss

Emploi ouvert aux contractuels (Catégorie A+)

Descriptif de l’employeur

Le service à compétence nationale (SCN) dénommé « Pôle d’Expertise de la Régulation Numérique » (PEReN), a pour mission d’apporter son expertise et son assistance techniques aux services de l’État et autorités administratives intervenant dans la régulation des plateformes numériques. Il est placé sous l’autorité des ministres chargés de l’économie, de la communication et du numérique et rattaché au Directeur Général des Entreprises pour sa gestion administrative et financière.

Le PEReN réunit les expertises humaines et ressources technologiques principalement dans les domaines du traitement des données, de la data science et de l’analyse algorithmique. Il fournit son savoir-faire technique aux services de l’État et autorités administratives qui le sollicitent (par exemple, Autorité de la concurrence, ARCOM, CNIL, ARCEP, ou directions ministérielles telles que la DGE, la DGCCRF, la DGT ou la DGMIC) en vue d’accéder à une compréhension approfondie des écosystèmes d’information exploités par les grands acteurs du numérique.

Le PEReN est également un centre d’expertise mutualisé entre les différents services de l’État qui conduit une réflexion sur la régulation des plateformes numériques et les outils de cette régulation, dans une approche à la pointe des avancées scientifiques. Il mène notamment certains de ses projets en partenariat avec Inria.

Il a également vocation à animer un réseau de recherche dédié à la régulation des grandes plateformes numériques, et peut être amené à réaliser à son initiative des travaux de recherche académique liés aux différentes thématiques.

Description du profil recherché

Recherche d’une/un data scientist, disposant d’au moins 3 ans d’expérience professionnelle ou d’un portefeuille de productions personnelles conséquentes ou d’une thèse de doctorat dans le domaine de la science des données ou de l’informatique. A ce titre, elle/il saura notamment mobiliser ses savoirs en autonomie aussi bien en programmation qu’en data science :>

  • Connaissance des bonnes pratiques de développement en Python (Python 3.9) et maîtrisee des bibliothèques usuelles (numpy, pandas, requests, etc.), développement d’API (FastAPI) ;
  • Maîtrise du requêtage des bases de données SQL (PostgreSQL) ;
  • Maîtrise de Git ;
  • Maîtrise des principales bilbiothèques d’apprentissage machine (Tensorflow, PyTorch, scikit-learn).

La/le data scientist devra démontrer une aisance à l’orale et une capacité à vulgariser des notions techniques complexes à un public large et non-spécialiste.

Les expériences suivantes seront considérées comme des atouts sans pour autant être strictement requises dans le contexte de cette fiche de poste :

  • une expérience dans l’animation d’un réseau de contributeurs, ayant pu conduire à la mise en œuvre de la formalisation de positions communes autour de thématiques numériques ;
  • la participation à des projets open-source (en tant que mainteneur ou contributeur) ;
  • une spécialisation dans la collecte et l’exploitation de traces réseaux ;
  • une spécialisation dans le domaine du traitement du signal audionumérique, d’image ou du NLP.

Description du poste

La/Le data scientist contribue à différents projets du PEReN menés conjointement avec d’autres administrations, au sein d’équipes-projets dédiées de 2 à 4 personnes. Un projet dure en moyenne 6 mois. Elle/il pourra par exemple :

  • Analyser les données d’entrée et de sortie d’un algorithme, afin d’en déterminer ses grands principes de fonctionnement ou ses biais éventuels.
    *Étudier la performance des algorithmes de l’état de l’art en apprentissage profond, par exemple en vision ou en traitement automatique des langues.
  • Concevoir des dispositifs expérimentaux pour la collecte de données sur mobile.

Afin de mener à bien ces missions, la/le data scientist sera en charge, avec les autres membres de l’équipe-projet, de réaliser les collectes, analyses, croisements et exploitations de données pertinentes. Elle/il pourra également être amené à apporter son expertise sur de nouvelles politiques publiques, par exemple via l’analyse technique de nouvelles régulations françaises ou européenne, l’analyse critique des arguments avancés par les plateformes numériques, ou encore la vulgarisation d’éléments techniques à destination des membres du gouvernement ou du parlement.

Les projets sont développés sur les systèmes informatiques opérés en propre par le PEReN et sont conduits par l’équipe dans leur entièreté.

Elle/il pourra également participer à des projets structurels du PEReN : veille, développement et maintien de briques techniques transverses (mises à disposition par API de modèles à l’état de l’art, etc.).

Deux jours de télétravail par semaine.

7 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

AFPy

by AFPy - Mastodon from AFPy - Mastodon

Erratum : vous retrouvez à Rosalind Franklin la conférence "Introduction à DevOps" présenté par Nicolas Ledez.

Lire la suite…

Démineur agréable avec tkinter

by Space_e_man from Linuxfr.org

Salut les cas pythoneux,

Voici ma dernière copie d’un démineur agréable codé en Python avec le module tkinter.

Dans le contexte, là où je travail, je n’ai accès qu’à Python 3.5 Portable sur de vieux P4 Windows XP… (sans PyGame par exemple) C’est donc le défi…, faire des jeux en tkinter, sans son pour l’instant, mais c’est pas grave…

J’apprends moi-même Python, je prépare des supports d’apprentissage et j’accompagne déjà quelques élèves…

J’avais déjà partagé mon premier démineur par ici…

J’ai suivi vos conseils.

Par contre, je n’avais pas de réponse concernant la limite de récursivité que je rencontrais pour ma fonction d’exploration… Alors je l’ai réécrite autrement…

J’ai amélioré l’affichage, les couleurs, … Je vous laisse découvrir…

Le fichier python, demineur-g1.5.py

Et la capture d’écran ↓
Titre de l'image

Et surtout, dites-moi ce que vous pensez du code en tant que exemple pédagogique aussi…

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

[Full Remote] Développeur(euse) Back End Python

by Michelle from AFPy discuss

Bonjour la Communauté,
Je recherche pour Absys un(e) Développeur(euse) Back End Python passionné.
Bac +3 mini en développement informatique et expérience de 2 ans mini.
Notre proposition :

  • des projets qui font chauffer les neurones
  • en full télétravail ou alternance avec présentiel
  • 35h en 5 jours ou 4,5 ou …
  • salaire entre 30 et 38 K€ + accord d’intéressement + titres restaurant
  • formation en interne au sein de l’équipe et en externe par des pros de chez pros + participation à Europython et autres grands messe de communauté de dev.
    Bref, une PME différente : une ambiance sereine, du temps pour mener à bien les projets, de la solidarité entre dev, un projet RSE de forêt nourrissière …
    Tu veux plus d’infos ou candidater, c’est par ici Dev Info Back End ((H/F)
    A+
    Michelle

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Sortie de Trac version 1.5.4

by pulkomandy,Florent Zara,Dave Newton 🍺,dourouc05 from Linuxfr.org

Trac est un outil de gestion de « tickets » (rapports de bugs) développé en Python. Il était beaucoup utilisé à l’époque de SVN mais a aujourd’hui laissé la place, dans beaucoup de cas, à des outils plus gros comme GitHub (pas libre) ou GitLab. Il continue toutefois son développement et est toujours utilisé par certains projets, en particulier parce qu’il est assez simple à personnaliser à l’aide de plug-ins et facile à déployer.

Trac Logo

Les versions 1.5.x sont les versions de développement avant la publication d'une version stable 1.6.x. La branche 1.4 continue également des corrections de bugs. Le rythme de développement n'est pas très rapide puisque la version 1.5.3 date de mai 2021, et il y a finalement assez peu de changements d'une version à la suivante.

La grosse nouveauté que tout le monde attend dans la version 1.6, c'est la possibilité d'utiliser Python 3. Le code principal de Trac est prêt depuis longtemps, mais certains plug-ins ont encore besoin d'un peu de travail pour être adaptés. Malheureusement, cela a conduit par exemple au retrait de Trac dans les paquets Debian il y a quelques années avec la mise à la retraite de Python 2.

Petit historique

Le projet Trac a démarré en 2003. Il s'agit au départ d'une adaptation de CVSTrac pour pouvoir l'utiliser avec Subversion à la place de CVS.

Il est publié au départ sous licence GPL (version 2), mais en 2005, la licence choisie est finalement la licence BSD (version à 3 clauses).

La version 0.10 a introduit le système de plug-ins qui rend Trac entièrement personnalisable.

Les versions suivantes ont connu des évolutions assez importantes, le système de rendu HTML a été remplacé. Dans la version 0.10, Trac utilisait ClearSilver, dans la version 0.11 c'était Genshi (un moteur développé dans le cadre de Edgewall, pour Trac et d'autres projets associés), et dans la version 1.4 c'est finalement Jinja qui est utilisé. À chacune de ces migrations, les plug-ins ont dû être adaptés. Cependant, les branches stables 1.0 et 1.2 sont toujours maintenues pour les équipes utilisant Trac avec de vieux plug-ins pas encore migrés vers ces nouveaux moteurs.

Depuis la version 1.0, les versions paires (1.0, 1.2, 1.4) sont des versions avec un support à long terme. Les versions impaires (1.1, 1.3 et 1.5) sont les versions en cours de développement sur lesquelles il n'y a pas de support.

Principales fonctionnalités

Le cœur de Trac est plutôt minimaliste. Il propose les fonctionnalités suivantes:

  • Un explorateur de dépôt de code source ;
  • Un gestionnaire de tickets pour les remontées de bugs ;
  • Un wiki ;
  • Une "timeline" avec les dernières modifications.

Il n'y a pas d'outil intégré pour la revue de code (équivalent des "merge requests" de GitHub ou GitLab), il faudra pour cela associer un outil externe comme Gerrit, ou bien un des plug-ins prévus pour cet usage: la version IEC 61508 avec tout son process compliqué, ou la version simplifiée.

L'intégration entre les différents composants permet par exemple de lister les tickets correspondant à certains critères de recherche directement dans une page de wiki. Les messages de commit sont analysés et peuvent déclencher des actions automatiques (fermeture d'un ticket de bug par exemple).

De plus, il est facilement possible de récupérer le contenu des pages (listes de tickets, pages de wiki, etc) via des requêtes HTTP avec un résultat en CSV, qui peut être utilisé pour une intégration simple avec d'autres outils. Des flux RSS sont également disponibles dans de nombreux cas (en plus des classiques notifications par e-mail).

Historiquement, Trac est associé à Subversion, mais il permet aujourd’hui d'utiliser Git, et des plug-ins sont disponibles pour Mercurial et plusieurs autres outils.

Les plug-ins

Ce qui fait tout l'intérêt de Trac, c'est de pouvoir personnaliser entièrement le système. Pour cela, on peut se baser sur les Trac Hacks, de nombreux plug-ins et macros qui peuvent être ajoutés à l'installation de base.

On peut par exemple:

Vous pouvez faire votre sélection dans la liste complète des plugins, scripts, workflows et intégrations.

Le développement de plug-ins ou de modifications sur le cœur du projet est assez simple, tout est écrit en Python et on peut facilement déployer un environnement de test (installation avec pip et lancement d'une instance Trac avec une base de données sqlite et le serveur http embarqué). Il est donc assez courant de voir des versions de Trac plus ou moins modifiées et des plug-ins maintenus pour des usages assez spécifiques.

Qui utilise Trac?

Une liste de projets est disponible sur le site de Trac, mais pas très bien tenue à jour. Beaucoup de projets ont migré vers d'autres outils.

Parmi les projets qui restent fidèles à Trac, citons par exemple:

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Rosalind Franklin : « Rejoignez le Fediverse, ajoutez ActivityPub à votre site ! » présenté par @Deuchnord

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Charles Darwin : « Contribuer à l’open source sur des projets Python… sans coder » présenté par Anne-Laure Gaillard

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Thomas Edison : « Continuous performance analysis for Python » présenté par @Art049@twitter.com

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Henri Poincaré : « sphinx-lint : un linter pour ta doc » présenté par @mdk

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Charles Darwin : « Faire du Python professionnel » présenté par Éric Dasse, @dmerej

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Thomas Edison : « Développement VRAIMENT cross-platform avec Python » présenté par Pascal Chambon

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Rosalind Franklin : « CoWorks, a compositionnal microservices framework using Flask/AWS Lamba and Airflow » présenté par Guillaume Doumenc

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Henri Poincaré : « Je suis nul·le ! » présenté par @BouillonCourt@twitter.com

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Charles Darwin : « OCR : apprenez à extraire la substantifique moelle de vos documents scannés » présenté par Bérengère Mathieu

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Thomas Edison : « Uncovering Python’s surprises: a deep dive into gotchas » présenté par Mia Bajić

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Rosalind Franklin : « Lutter contre le déréglement climatique avec Django » présenté par @SebCorbin

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Workshop / Atelier 1 : « Meme Saheb: using Dank Learning to generate original meme captions » présenté par @festusdrakon@twitter.com, Ananya

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Rosalind Franklin : « Un membre très discret de la famille Jupyter mais pourtant si utile ! » présenté par Pierre-Loic Bayart

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Workshop / Atelier 2 : « Comment créer des applications web de data science époustouflantes en Python - Tutoriel Taipy » présenté par @Taipy_io@twitter.com

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Charles Darwin : « Django Admin comme framework pour développer des outils internes » présenté par Romain Clement

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Thomas Edison : « Driving down the Memray lane - Profiling your data science work » présenté par @cheukting_ho

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Henri Poincaré : « NucliaDB, une base de données pour le machine learning et les données non-structurées » présenté par @ebrehault

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Vous l'aurez peut-être compris, mais pendant 2 jours on va tooter les conférences pile 7 jours avant leurs commencement à la . Et ce dans le but de toutes vous les présenter.

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Dans 7 jours exactement, salle Alfred Wegener : « Accueil / Welcome » présenté par Marc Debureaux

Lire la suite…

Conférence Mercurial Paris du 5 au 7 avril 2023

by franckdev,Pierre Jarillon,Benoît Sibaud from Linuxfr.org

La conférence Mercurial Paris 2023, est une conférence internationale dédiée au gestionnaire de version Open Source Mercurial. Elle se tiendra du 5 au 7 avril 2023 dans les locaux de l'IRILL (Center for Research and Innovation on Free Software) à Paris, Université Paris Sorbonne.

Logo Mercurial

Mercurial est un gestionnaire de versions, libre et multi-plateforme, qui aide les équipes à collaborer sur des documents tout en conservant l’historique de l’ensemble des modifications. Équivalent fonctionnellement aux biens connus Git ou Svn, il s’en distingue sur de nombreux points techniques, ergonomiques et pratiques.

Doté d’une interface orientée utilisateur facile d’accès et simple à comprendre, il offre des capacités avancées de personnalisation du workflow et s’illustre aussitôt qu’il y a besoin de performances adaptées aux très gros dépôts. (Les équipes de Google et Facebook utilisent en interne des solutions basées sur Mercurial pour gérer l’ensemble de leur code source.).

Bannière Mercurial Paris Conference 2023

Après une première édition en 2019, l’équipe d’Octobus aidée de Marla Da Silva, organisent cette nouvelle mouture qui se déroulera du 05 au 07 avril 2023 dans les locaux de l’Irill (Initiative de Recherche et Innovation sur le Logiciel Libre), Université Sorbonne, Paris.

La participation à l'évènement nécessite votre contribution pour absorber les frais d'organisation. 40€ pour la journée de workshop, 40€ pour la journée de conférence, repas du midi compris. Les sprints sont gratuits.

Réserver mon ticket.

Si vous avez un statut étudiant et n'avez pas le budget pour participer aux trois jours, contactez-nous.

Vous trouverez l’ensemble des informations sur le site https://mercurial.paris dont voici le résumé du programme :

Mercredi 5 avril, Workshops

La première journée sera dédiée aux ateliers. L’occasion de découvrir, se former, évoluer sur le sujet.

  • Mercurial usage and workflow
  • Heptapod: Using Mercurial with the GitLab DevOps platform

Jeudi 06 avril, Talks

Présentations d’experts internationaux et retours d’expérience en entreprise.

  • Stability and innovation
    • Mercurial and Logilab
    • Using Mercurial, evolve and hg-git in an academic context
    • Coffee Break
    • Mercurial usage at XCG Consulting
  • Toolings
    • Heptapod, three years of Mercurial in GitLab and growing
  • Mercurial at Scale
    • How Mercurial is used to develop Tryton
    • Mercurial usage at Nokia: scaling up to multi-gigabyte repositories with hundreds of developers for fun and games
    • Mercurial usage at Google
  • Development Update
    • Mercurial Performance / Rust
    • State of changeset evolution

Vendredi 7 avril, Sprints

Enfin, le vendredi 7 se dérouleront les “sprints”, groupes de travail pour faire évoluer Mercurial, sa documentation, son écosystème, etc.

Pour toute personne contributrice, expérimentée en développement Python, Rust ou simplement curieuse, c’est le moment de contribuer !

À propos d'Octobus

Octobus est une société de service française dédiée au logiciel libre, spécialiste des langages Rust et Python, son équipe totalise le plus grand nombre de contributions au logiciel Mercurial dont elle maintient l’infrastructure de développement et est en charge de la distribution des nouvelles versions.

Octobus est également éditrice de la solution Heptapod, forge logicielle et plate-forme Devops libre prenant en charge Mercurial Hg et Git.
Vous pouvez utiliser Heptapod en auto hébergement ou via la solution d’hébergement clef en main proposée en partenariat avec Clever Cloud (Data center en France et en Europe).

Enfin, Une instance publique dédiée à l'hébergement de logiciels libres est disponible sur foss.heptapod.net (Vos projets versionés avec Hg ou Git y sont les bienvenus ! pour soumettre).

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Programme de la PyConFR 23

by Melcore,Benoît Sibaud,Pierre Jarillon,ted from Linuxfr.org

La PyConFR, l'évènement de la communauté francophone du langage de programmation python, aura lieu du 16 au 19 février 2023 à Bordeaux. L'évènement est gratuit mais l'inscription au préalable est obligatoire.

PyConFR du 16 au 19 février à Bordeaux

Le programme vient de paraître, le sommaire des conférences, des ateliers et des sprints vous attend dans la suite de cette dépêche.

Voici le programme qui vient de paraître : (plus d'infos sur le site)

Conférences (Samedi et Dimanche)

  • CoWorks, a compositionnal microservices framework using Flask/AWS Lambda and Airflow
  • Développement VRAIMENT cross-platform avec Python
  • Portage Python sur Webassembly
  • Faire du Python professionnel
  • Python moderne et fonctionnel pour des logiciels robustes
  • Accessibilité numérique : faire sa part quand on est développeur·euse backend
  • Devenir incollable sur les callables !
  • Déployer du backend en 2023
  • « Fixed bugs » n’est peut-être pas le meilleur message de commit
  • Apport du langage Python dans un service de recherche hospitalière pour mener des analyses de deep learning
  • Documentation, logiciel libre et pérennité en arts numériques
  • Où il est question de gaufre et d’Internet
  • Garder le contrôle de ses données géolocalisées avant de les partager
  • Lutter contre le dérèglement climatique avec Django
  • sphinx-lint : un linter pour ta doc
  • Continuous performance analysis for Python
  • NucliaDB, une base de données pour le machine learning et les données non-structurées
  • Driving down the Memray lane - Profiling your data science work
  • Trying no GIL on scientific programming
  • Contribuer à l’open source sur des projets Python… sans coder
  • Fear the mutants. Love the mutants.
  • Running real-time machine learning analytics on traces
  • Python Côte d'Ivoire : Défis et Perspectives
  • Domain-driven design: what can Python do for you?
  • Supercharging Jupyter notebooks for effective storytelling
  • Rejoignez le Fediverse, ajoutez ActivityPub à votre site !
  • À la découverte de Polars (ou pourquoi vous pourriez quitter Pandas)
  • Introduction to Sigstore: cryptographic signatures made easier
  • Python for microcontrollers
  • Monorepo Python avec environnements de développement reproductibles et CI scalable
  • The power of AWS Chalice for quick serverless API development in Python
  • Giving and receiving great feedback through PRs
  • Uncovering Python’s surprises: a deep dive into gotchas
  • Python web performance 101: uncovering the root causes
  • From a Python script to an open-source project
  • Une bonne quantité de Python peut-elle rendre Firefox moins vulnérable aux supply chain attacks ?
  • Apprendre Python, c’est pour tout le monde en 2023 ! 💞
  • Cerveau, Biomarqueurs et Deep Learning
  • Apprentissage statistique adapté aux données sales avec dirty-cat
  • Let’s exploit pickle, and skops to the rescue!
  • Interactive HoloViz Visualization and Dashboards
  • Cloud infrastructure from Python code: how far could we go?
  • Traitement de données géographiques avec Rasterio, NumPy, Fiona et Shapely
  • REX analyse antivirus des fichiers de la plateforme emplois de l’inclusion
  • J'ai hacké ma chaudière pour avoir un thermostat !
  • Psycopg, troisième du nom
  • OCR : apprenez à extraire la substantifique moelle de vos documents scannés
  • Réinventer le tour du monde en (beaucoup) moins de 80 jours
  • Django Admin comme framework pour développer des outils internes
  • Geographic visualization using Streamlit
  • Transformez vos algorithmes de données/IA en applications web complètes en un rien de temps avec Taipy
  • Un membre très discret de la famille Jupyter mais pourtant si utile !
  • Interactive web pages with Django or Flask, without writing JavaScript
  • Je suis nul·le !
  • Monitorez vos applications Python (et pas uniquement votre infra)
  • Nua, un PaaS open source en Python pour l'auto-hébergement de vos applications
  • GEMSEO : une bibliothèque pour l’optimisation multi-disciplinaire
  • Save Sheldon: Sarcasm Detection for the Uninitiated!

Ateliers (Samedi et Dimanche)

  • Le Zen de Python appliqué à la production de jeux vidéo
  • Initiation à Django à travers la création d'un blog
  • Faire un module Tryton
  • Le réseau de neurones qui écrivait des romans
  • Comment créer des applications web de data science époustouflantes en Python - Tutoriel Taipy
  • Meme Saheb: using Dank Learning to generate original meme captions
  • Mettre le web en page(s) : générer un document PDF avec HTML et CSS

Sprints (Jeudi et Vendredi)

  • Traduction de la doc’ de Python en Français
  • Sprint sur le projet « Witness Angel »
  • Complete the work on Modoboa v2
  • Améliorer l'algorithme de détection de proximité de polygone pour l'étude du potentiel géothermique individuel (transition EnR)
  • Amélioration de ReservoirPy, un outil simple de Reservoir Computing
  • Developing community plugins for Argilla: an open-source platform for data-centric NLP
  • Improve tests for Zou/Kitsu API (Flask)
  • Sardine : improvisation musicale avec Python 3.10+
  • Développements de correctifs et tests des modules Ansible
  • Release d'AnyBlok 2.0.0
  • Rajout de fonctionnalités et créations de démos complètes et interactives pour Taipy
Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Programme PyConFR2023 en ligne

by ReiNula from AFPy discuss

Le programme de la PyConFR 2023 est désormais en ligne ! :snake:
Consultez-le dès maintenant sur le site de la PyConFR.

Rappel : pour assister à la PyConFr, l’inscription est obligatoire (mais est gratuite). Pour vous inscrire, il faut passer par ce lien.

Sujet discourse concernant l’inscription

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Programme PyConFR 2023 en ligne

by ReiNula from AFPy discuss

Le programme de la PyConFR 2023 est désormais en ligne ! :snake:
Consultez-le dès maintenant sur le site de la PyConFR.

Rappel : pour assister à la PyConFr, l’inscription est obligatoire (mais est gratuite). Pour vous inscrire, il faut passer par ce lien.

Sujet discourse concernant l’inscription

11 messages - 7 participant(e)s

Lire le sujet en entier

Lire la suite…

Faire du son avec des mots

by alberic89 from Linuxfr.org

Salut Nal !

Je t'écris aujourd'hui pour te parler d'un petit programme de quelques lignes serpentines, qui permet d'écrire du texte dans un fichier audio.

Le programme

import wave

# Texte d'entrée
string_data = input("Tapez du texte :")
encrypted_data = bytes(string_data, 'utf-8')
# On peut aussi ouvrir directement un fichier texte
#filename = str(input("Nom du fichier :"))
#encrypted_data = bytes(open(filename).read(), 'utf-8')

# Écrit le texte dans nouveau fichier tmp.wav
new_audio_file = wave.open('tmp.wav', 'wb')
new_audio_file.setparams((1, 2, 44100, 0, 'NONE', 'NONE'))
new_audio_file.writeframes(encrypted_data)
new_audio_file.close()

# Pour lire le fichier
#f = wave.open(filename, 'rb')
#string_data = f.readframes(f.getnframes())
#f.close()
#print(string_data.decode('utf8'))

C'est bête et ça marche. Incroyable.

Exemple

Lancez simplement le script et tapez du texte.
Vous remarquerez que de manière aléatoire, certaines chaines sont diminuées de leur dernier caractère.

J'ai fait un test sur The Time Machine de H. G. Wells que j'ai téléchargé au format texte UTF-8 ici.
Pensez à commenter/décommenter les quatre premières lignes.

Voici un petit aperçu visualisé avec Audacity.

Et le fichier wav associé.

Vous n'y comprenez rien en l'entendant ? Normal, c'est en anglais ! Mais vous pouvez retrouver le texte original en le passant à la moulinette du troisième bloc de code ci-dessus en commentant/décommentant les bonnes lignes. Vous n'y comprenez toujours rien ? Normal, ce script ne sert pas à rendre l'anglais compréhensible.

Utilité

Comment ?! Il faut en plus que ce soit utile !!

(Vite Jean-Marc, trouve quelque chose !)

Euh, et bien, en fait, ça pourrait servir à plusieurs machines à communiquer via leur port audio. Ou bien pour mettre un easter-egg dans une musique de jeu vidéo. Ou tout ce que tu pourras inventer de loufoque, on te fait confiance pour ça, Nal.

Conclusion

Je ne savais pas quoi en faire, alors je te l'offre, Nal, en espérant que tu en fasses bon usage. Bien sûr, il est perfectible, on peut ajouter un système pour choisir ce que l'on veut faire au lieu de tripatouiller le code, une interface graphique, un système pour chiffrer la chaîne de départ, et mille autres choses. Je ne réclame aucun copyright sur ce code, tu peux considérer qu'il t'appartient.

Sur ce, voici une jolie nimage !

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

[admin sys] Discourse, munin, woodpecker, …

by mdk from AFPy discuss

Matin !

Pour ceux qui suivent, ou veulent suivre, l’admin sys de l’AFPy, je viens de mettre en place un munin. Ça ne fait pas très “2023”, pas de buzzwords, c’est pas hype, hashtag-sorry. Mais bon ça permet de voir ce qui se passe sur les machines, d’être alerté sur certains seuls, moi ça me convient très bien.

(Si vous voulez faire mieux, vous êtes les bienvenus :heart:.)

Tout se passe comme d’habitude ici :

Et donc, le munin, il est là : https://munin.afpy.org

Je travaille aussi, très doucement, sur un woodpecker pour notre gitea, pour le moment ce n’est pas fonctionnel du tout, c’est balbutiant disons : ça tourne sur un raspi posé par terre chez moi, et il n’a pas d’agents donc il ne peut pas bosser.

Et j’ai migré, cette nuit, notre Discourse sur sa propre machine, parce que la cohabiation sur deb2 ça commencait à faire pour cette toute petite machine qui héberge pas mal de choses (pycon.fr, PonyConf, munin, discord2irc, …), si vous reprérez des problèmes avec la migration du Discourse, dites-le moi :slight_smile:

3 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

Software Engineer Python @BeeBryte

by lpignol from AFPy discuss

Offre d’emploi

Ingénieur.e Logiciel h/f – (Lyon)

Notre entreprise :

Vous souhaitez rejoindre une jeune entreprise française (et singapourienne) à taille humaine et en forte croissance, tournée vers l’innovation et l’international ?

Vous êtes soucieux(se) des défis énergétiques et environnementaux de notre époque, et vous voulez contribuer concrètement à la sobriété énergétique et à la réduction des émissions de CO2 ?

Alors rejoignez-nous !

Implantée à Lyon et à Singapour, et forte d’une expertise transdisciplinaire (IT, data-science, génie thermique), BeeBryte propose des services innovants de contrôle prédictif optimal distant 24/7 et de support aux opération & maintenance pour aider nos clients industriels et tertiaires à augmenter l’efficacité énergétique et la performance de leurs systèmes de CVC-R (chauffage, ventilation, climatisation, réfrigération).

Pour cela nous mettons en œuvre une surcouche intelligente, portée par notre plateforme Industrial-IoT, qui exploite les informations profondes des systèmes existants et de leur contexte pour maximiser en permanence leur performance énergétique.

En anticipant besoins et facteurs d’influence, nous permettons à nos clients de réduire efficacement leur empreinte carbone, de circonscrire leurs risques, et de réaliser jusqu’à 40% d’économies sur leurs factures énergétiques.

Description

Missions :

  • Concevoir et réaliser des solutions logicielles innovantes et performantes répondant à des problématiques industrielles
  • Définir et mettre en œuvre des architectures extensibles, évolutives et scalables
  • Concevoir et développer des interfaces ergonomiques pour une meilleure expérience utilisateur
  • Industrialiser et automatiser les tests et le déploiement des applications
  • Maintenir les solutions BeeBryte à la pointe de la technologie pour l’amélioration énergétique

Compétences requises :

  • Programmation backend (Python, API REST, postgreSQL, DJANGO / SQLALCHEMY) et/ou frontend (JavaScript, ReactJS)
  • Génie logiciel (conception & développement logiciel, gestion de versions, tests automatisés, tests d’intégration et intégration et déploiement continus)
  • Principes de conception et architectures logicielles (Architecture 3-tiers / MVC / Micro Services)
  • Structures de données et algorithmique
  • Connaissance UML

Autres compétences appréciées :

  • Connaissances en DevOps / DevSecOps / GitOps (Container, CI CD)
  • Connaissances en Data Science et Informatique industrielle (Protocoles MODBUS / BACNET) est un plus
  • Maîtrise de méthodes agiles (Scrum / Kanban)
  • Connaissance de Jira Software est un plus
  • Bonne maîtrise de l’anglais

Vous recherchez une certaine diversité dans votre activité et la possibilité d’intervenir sur différents projets.

Vous considérez que le développement d’une application serveur robuste et scalable et le design d’une interface ergonomique et intuitive constituent les deux faces d’une même pièce.

Vous êtes autonome, rigoureux.euse et animé.e d’un fort esprit d’équipe.

Contrat de travail :

Type de contrat : CDI

Mois de démarrage : Janvier 2022

Lieu de travail : Lyon

Statut : Cadre

Déplacements : Pas de déplacement

Salaire annuel brut (fourchette) : Selon profil

Temps plein

Conditions : télétravail ponctuel autorisé, tickets-restaurant , forfait mobilité durable ou prise en charge 50% du coupon mensuel.

Processus de recrutement :

CV + lettre de motivation + date de disponibilité à adresser à : hiring.it@beebryte.com

Les candidatures sans lettre de motivation ne seront pas prises en compte (motivation à rejoindre BeeBryte + pourquoi nous devrions vous recruter).

Seuls les candidats sélectionnés seront contactés.

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Lead Dev / Senior Software Engineer Python @BeeBryte

by lpignol from AFPy discuss

Offre d’emploi

Lead Dev / Ingénieur.e Logiciel Expérimenté h/f – (Lyon)

Notre entreprise :

Vous souhaitez rejoindre une jeune entreprise française (et singapourienne) à taille humaine et en forte croissance, tournée vers l’innovation et l’international ?

Vous êtes soucieux(se) des défis énergétiques et environnementaux de notre époque, et vous voulez contribuer concrètement à la sobriété énergétique et à la réduction des émissions de CO2 ?

Alors rejoignez-nous !

Implantée à Lyon et à Singapour, et forte d’une expertise transdisciplinaire (IT, data-science, génie thermique), BeeBryte propose des services innovants de contrôle prédictif optimal distant 24/7 et de support aux opération & maintenance pour aider nos clients industriels et tertiaires à augmenter l’efficacité énergétique et la performance de leurs systèmes de CVC-R (chauffage, ventilation, climatisation, réfrigération).

Pour cela nous mettons en œuvre une surcouche intelligente, portée par notre plateforme Industrial-IoT, qui exploite les informations profondes des systèmes existants et de leur contexte pour maximiser en permanence leur performance énergétique.

En anticipant besoins et facteurs d’influence, nous permettons à nos clients de réduire efficacement leur empreinte carbone, de circonscrire leurs risques, et de réaliser jusqu’à 40% d’économies sur leurs factures énergétiques.

Description

Missions :

  • Concevoir et réaliser des solutions logicielles innovantes et performantes répondant à des problématiques industrielles
  • Définir et mettre en œuvre des architectures extensibles, évolutives et scalables
  • Concevoir et développer des interfaces ergonomiques pour une meilleure expérience utilisateur
  • Industrialiser et automatiser les tests et le déploiement des applications
  • Maintenir les solutions BeeBryte à la pointe de la technologie pour l’amélioration énergétique

Compétences requises :

  • Solides compétences en architecture métier / logiciel (TOGAF / BPMN / UML)
  • Programmation backend (Python, API REST, postgreSQL, DJANGO / SQLALCHEMY) et/ou frontend (JavaScript, ReactJS)
  • Génie logiciel (conception & développement logiciel, gestion de versions, tests automatisés, tests d’intégration et intégration et déploiement continus)
  • Principes de conception et architectures logicielles (Architecture 3-tiers / MVC / Micro Services)
  • Graphe / Structures de données et algorithmique
  • Lead d’une équipe de développement (Suivi / Coaching)
  • Lead several Software Engineers for Follow up / Mentoring

Autres compétences appréciées :

  • Connaissances en DevOps / DevSecOps / GitOps (Container, CI CD)
  • Connaissances en Data Science et Informatique industrielle (Protocoles MODBUS / BACNET / OPC UA / PROFINET) est un plus
  • Maîtrise de méthodes agiles (Scrum / Kanban), expérience de Scrum Master
  • Connaissance de Jira Software est un plus
  • Bonne maîtrise de l’anglais

Vous recherchez une certaine diversité dans votre activité et la possibilité d’intervenir sur différents projets.

Vous considérez que le développement d’une application serveur robuste et scalable et le design d’une interface ergonomique et intuitive constituent les deux faces d’une même pièce.

Vous êtes autonome, rigoureux.euse et animé.e d’un fort esprit d’équipe.

Contrat de travail :

Type de contrat : CDI

Mois de démarrage : Janvier 2023

Lieu de travail : Lyon

Statut : Cadre

Déplacements : Pas de déplacement

Salaire annuel brut (fourchette) : Selon Profil

Temps plein

Conditions : télétravail ponctuel autorisé, tickets-restaurant , forfait mobilité durable ou prise en charge 50% du coupon mensuel.

Processus de recrutement :

CV + lettre de motivation + date de disponibilité à adresser à : hiring.it@beebryte.com

Les candidatures sans lettre de motivation ne seront pas prises en compte (motivation à rejoindre BeeBryte + pourquoi nous devrions vous recruter).

Seuls les candidats sélectionnés seront contactés.

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Si vous avez proposé une conférence, un sprint ou un atelier pour la , n'hésitez pas à regarder vos mails et à confirmer votre venue.

Lire la suite…

Stage en R&D + développement informatique + administration système

by Laetitia_Fraioli from AFPy discuss

Bonjour,

:rotating_light: Offres de #stage en développement #python et #websemantique sur #cubicweb !

Retrouvez nos différents sujets de stage sur la page :

https://logilab.fr/emplois

:bookmark: Stage conventionné
:date: Début du stage : dès que possible
:round_pushpin: Lieux : Paris ou Toulouse

Voici les liens vers nos nouvelles offres de stage :

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

[Paris] 2 février 2023 - Very Tech Trip

by freezed from AFPy discuss

Le CFP est fermé, mais les portes seront ouverte et l’entrée gratuite :wink:

Bon OK, python ne sera pas au centre de la journée, mais c’est pas grave on est toutes et tous curieux ici, non?

Vous pourrez y croiser @david.aparicio, @voltux et moi. Mais peut-être que d’autres Pythonistes feront le déplacement? Faites le savoir avec un message :arrow_down_small:


#VeryTechTrip : une convention pour les aventuriers de la Tech !

Rester à la page des dernières technologies, innover sans céder aux effets de mode, adopter les préceptes du cloud native, coder plus efficacement, automatiser, sécuriser ses applications, gérer intelligemment ses données et réduire le coût énergétique de son infra… Les défis sont nombreux, si vous travaillez dans la tech !

Découvrir comment font les autres, échanger les best practices et vous donner des idées, c’est l’aventure collective qu’on vous propose de vivre le jeudi 2 février 2023 à la Cité des sciences et de l’industrie à Paris.

Une journée entre pairs, réservée aux sysadmins, développeurs, SRE, data scientists, cloud architects, étudiants en informatique… Bref, que du beau monde embarqué dans ce voyage. Et un dress code peu contraignant : vous êtes adepte du tee-shirt à message et du short en hiver ? Vous pourrez entrer quand même.

> Réservez vos billets gratuitement dès maintenant !

3 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Module "processing" introuvable

by polochon from Linuxfr.org

Bonjour,
mon fils m'a posé une colle hier soir et j'avoue que je ne sais pas comment le dépanner, surtout que mes connaissances en python sont très limitées.

Il s'agit de suivre ce projet: https://projects.raspberrypi.org/fr-FR/projects/rocket-launch

Le code du projet est disponible ici: raspberrypilearning et il y a un environnement d'exécution web ici: https://trinket.io/python/f2199f5a8c

Le fiston travaille sur un ordinateur avec lubuntu et exécute ses programmes directement dans l'éditeur de code geany (qui peut lancer des programmes python depuis son interface).

À l’exécution, j'ai un beau

Traceback (most recent call last):
  File "main.py", line 4, in <module>
    from p5 import *
  File "/home/pol/data/downloads/Rocket Launch/p5.py", line 2, in <module>
    from processing import *
ModuleNotFoundError: No module named 'processing'

Et ce module processing, je ne vois définitivement pas à quoi il peut bien faire référence. Il y a bien un module de ce nom dans pip, mais c'est in vieux machin qui n'a pas bougé depuis 10ans et qui semble sans rapport avec le sujet.
J'ai essayé d'installer "la vraie" dépendance p5 (pip install p5) à la place du fichier fourni, mais ça ne fonctionne pas non plus.
Ce programme fonctionne dans l'environnement web trinket, aussi je me dis que processing est forcément un module installable comme dépendance, ce n'est pas un fichier du projet.

Mais malgré avoir passé un peu de temps à chercher, j'avoue je bloque. Est ce que quelqu'un aurait une piste, ou autre?
Merci!

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Convocation à l'assemblée générale le dimanche 19 février à 9h

by debnet from AFPy discuss

Cette communication a été envoyée par mail à tous les membres présents et passés de l’association.

Assemblée générale

2023-02-19 09:00 (Europe/Paris)

2023-02-19T08:00:00Z UTC

Tout d’abord meilleurs voeux pour cette année 2023 de la part du bureau de l’Association Francophone Python !

Vous recevez ce courriel aujourd’hui car vous êtes ou avez été membre de l’association ces dernières années. De ce fait, si vous êtes toujours membre cette année, vous êtes cordialement convoqué pour notre assemblée générale annuelle qui se tiendra durant la PyConFR 2023 ce dimanche 19 février à 9h.

Pour rappel, la PyConFR 2023 se tiendra à l’université de Bordeaux-Talence du jeudi 16 février au dimanche 19 février (plus d’informations ici À propos − PyConFr 2023), l’inscription est obligatoire pour des raisons d’organisation donc faites passer le mot ! Nous sommes en train d’éplucher les propositions de conférences/d’ateliers afin de constituer le programme de cette édition, on vous tient au courant ! D’ailleurs nous manquons cruellement de volontaires pour aider durant l’évènement, si vous êtes motivés rendez-vous sur PyConFr 2023 !

Si ce n’est pas déjà fait, nous vous invitons à renouveler votre adhésion pour l’année 2023 en suivant les liens suivants :
AFPY - Le site web de l'Association Francophone Python ou Adhésion 2023 à l’afpy - Afpy

Nous vous rappelons que si l’adhésion à l’association n’est pas obligatoire pour nous suivre et participer à nos événements, elle est néanmoins indispensable pour pouvoir voter aux résolutions lors de l’assemblée générale. De plus, votre adhésion est un soutien important pour les futures activités de l’association et, espérons-le, l’organisation d’une prochaine PyConFR, donc si vous pouvez vous le permettre nous vous en sommes reconnaissants !

L’ordre du jour de cette assemblée générale sera le suivant :

  • Le président présentera le bilan moral général de l’association (avec vote d’approbation);
  • Le trésorier présentera le bilan financier de l’association pour les deux années passées avec une projection éventuelle sur l’année en cours (avec vote d’approbation);
  • L’assemblée générale validera la dernière version des statuts;
  • L’assemblée générale procédera ensuite au renouvellement d’une partie du Comité de Direction (CD) de l’association;
  • Le nouveau Comité de Direction proposera finalement un(e) président(e) à l’approbation de l’assemblée générale.

Des questions ou remarques diverses non assujetties à un vote de la part de l’assemblée pourront également être évoquées par les membres du Bureau, du Comité de Direction et/ou par les membres, cotisants ou non, de l’association. N’hésitez pas à nous transmettre par avance en réponse à ce mail les sujets que vous souhaiteriez potentiellement aborder lors de cette assemblée générale.

Pour votre information, selon l’article 11 de nos statuts, il sera nécessaire de renouveller un tiers des membres du Comité de Direction de l’association.

Vous trouverez ci-dessous la liste de l’ensemble des membres au Comité de Direction avec leur année de début de mandat ainsi que leur poste éventuel au sein du Bureau :

  • Marc Debureaux (2017, Président, sortant)
  • Jules Lasne (2018, Vice-Président)
  • Pierre Bousquié (2020, Trésorier)
  • Thomas Bouchet (2020, Vice-Trésorier)
  • Antoine Rozo (2020, Secrétaire)
  • Jean Lapostolle (2022, Vice-Secrétaire)
  • Bruno Bonfis (2020)
  • Laurine Leulliette (2022)
  • Lucie Anglade (2019, sortante)

Dans le cas où il vous serait impossible de participer à l’assemblée générale de l’association, nous vous encourageons vivement à transmettre votre pouvoir à un autre membre (lui-même à jour de cotisation et présent lors de cette assemblée) de façon à ce que votre voix soit entendue. Pour cela, vous devez nous faire parvenir par courriel à l’adresse comite-directeur@afpy.org (en utilisant votre adresse d’adhésion) l’ensemble de vos coordonnées ainsi que celles du membre qui vous représentera en le mettant lui-même en copie de votre message et en y stipulant explicitement que vous lui accordez votre pouvoir de décision/vote.

Nous réfléchissons encore à une solution le jour J qui permettra à celles et ceux qui n’ont pas pu faire le déplacement sur Bordeaux d’assister malgré tout à l’AG à distance, mais pour le moment nous attendons de voir les dispositifs techniques sur place avant de communiquer sur la procédure. Nous vous enverrons une communication supplémentaire lorsque nous en saurons plus.

Je profite également de cette communication pour vous rappeler les liens et ressources importantes pour rester en contact avec nous :

  • Nous avons un “forum” (Discourse, les membres de la PSF connaissent bien) sur lequel retrouver nos actualités et échanger avec les membres, n’hésitez pas à nous rejoindre : https://discuss.afpy.org/
  • Si vous préférez communiquer de manière immédiate, nous sommes également présents sur LiberaChat IRC : irc://irc.libera.chat:6697/afpy
  • Nous avons également une guilde Discord (qui relaie les messages depuis et vers IRC) : AFPy
  • Nous communiquons autant que possible sur Twitter, abonnez-vous à @asso_python_fr et @pyconfr
  • Et nous relayons les informations sur Mastodon : AFPy (@AFPy@mamot.fr) - La Quadrature du Net - Mastodon - Media Fédéré
  • Nous avons également une présence sur LinkedIn : https://www.linkedin.com/company/afpy/
  • Et finalement si vous êtes perdus, vous pouvez retrouver toutes les informations sur notre site officiel : https://afpy.org

Merci à tous pour votre temps de lecture, j’espère vous retrouver toutes et tous à la PyConFR 2023 et surtout à notre assemblée générale ce dimanche 19 février à 9h !

A très bientôt !

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Pour les rennais − Meetup le 30 janvier

by nledez from AFPy discuss

On a testé pour vous… méthodologie, outils, property based testing

Meetup rennais

2023-01-30 18:30 (Europe/Paris) → 2023-01-30 20:30 (Europe/Paris)

Détails

“Tester c’est douter” ? Viens donc nous voir pour apprendre à douter avec nous.

Nicolas vous présentera pourquoi et comment tester. Avec différents niveaux que l’on peut mettre en place sur un projet. Et ensuite une introduction de pytest.

Michel nous fera un retour d’expérience sur l’utilisation des “Property-Based Testing” avec la bibliothèque Hypothesis. Nous verrons comment il est possible d’étendre sa couverture de tests en s’appuyant sur une génération automatique et optimisée des données de test. On passe alors d’un mode “Arrange - Act - Assert” avec un jeu de données unique à un mode “Given - When - Then”, en augmentant la robustesse du test (et de votre code !).

Et enfin vous aurez quelques tips avant un petit pot pour échanger autour de tout ça et du reste.

Biographies

  • Nicolas Ledez est “devops” depuis 1995, développeur Python depuis 2003. Il participe à la communauté Breizhcamp, DevOps, Python Rennes, etc. Il travaille chez CG-Wire où il déploie du Python Flask à tout va.
  • Michel Caradec est lead data engineer chez Reech, et travaille sur l’offre Reech Influence Cloud, solution d’influence marketing. Après un passé de développeur, Michel se concentre maintenant sur les problématiques liées au traitement des données, dans un contexte distribué et Cloud.

L’inscription, c’est par là :

On aimes aussi les retweets :
https://twitter.com/PythonRennes/status/1615114524260028417

Mais aussi les retoot :

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Pour les lyonnais − Meetup le 25 janvier

by grewn0uille from AFPy discuss

Salut à tous !

On se retrouve pour le premier meetup de 2023 le mercredi 25 janvier dès 19h à l’Atelier des médias.
Kara viendra nous parler de python dans le monde scientifique.

N’hésitez pas à vous inscrire sur l’évènement meetup !

Python dans le monde scientifique

2023-01-25 19:00 (Europe/Paris) → 2023-01-25 21:00 (Europe/Paris)

3 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Prestation de développement Python+MQTT, dans le cadre d’un projet citoyen de gestion de l’énergie

by jaxom from Linuxfr.org

Sommaire

Bonjour à toutes et tous,

L'association avec laquelle je travaille recherche un renfort en développement. Nous avons déjà fait appel à la communauté avec succès, donc on y revient ! J'espère avoir respecté les formes attendues, n'hésitez pas à me dire s'il y a des choses à améliorer ;)

MàJ Février 2023 : l'offre a été pourvue, merci pour vos relais.

--

Énergies citoyennes en Pays de Vilaine (EPV) cherche les services d’un.e développeur.se Python habitué.e du logiciel libre pour participer à un projet collaboratif traitant de la répartition locale de l’énergie. Durée de la mission 20 à 30 jours.

Le contexte

Le but de la mission est de coder le contrôle-commande d’un système de gestion de l’énergie pour le projet ELFE (Expérimentons Localement la Flexibilité Énergétique). Ce projet citoyen embarque 120 foyers et 40 acteurs économiques ou publics sur le pays de Redon-Pontchateau, et vise à optimiser la consommation d’énergie produite localement. Pour cela, des équipements domotiques sont installés chez des particuliers et des professionnels afin de commander à distance des machines, des radiateurs, des chargeurs de véhicule électrique…

Un groupe de 8 bénévoles a impulsé le projet ELFE en novembre 2021, pour une durée de 2,5 années, et l’équipe opérationnelle comporte 3 salariés et plusieurs partenaires aux compétences complémentaires. Le projet bénéficie du soutien et du financement de collectivités locales, ainsi que d’acteurs économiques locaux.

Le projet est dans une phase d’expérimentation, et la stratégie est d’utiliser un maximum de logiciels libres sur étagère (Proxmox, Debian, Zabbix, PosgreSQL, Mosquitto, OpenHasp). L’architecture système et logicielle ont déjà été définies. Plusieurs composants logiciels vont se connecter à une base de données de coordination pour notamment enregistrer des configurations et des consignes. A contrario, un seul composant logiciel va, en fonction du contenu de cette base, envoyer des ordres aux équipements domotiques par l’intermédiaire d’un broker MQTT : c’est l’objet de cette mission.

Le Client

Énergies citoyennes en Pays de Vilaine (EPV) est une association qui vise la réappropriation de l’énergie par les citoyens en les impliquant le plus possible dans la transition énergétique et sociétale. Active depuis 20 ans sur les pays de Redon et de Pontchateau, EPV a permis l’émergence des premiers parcs éoliens 100 % citoyens, et défend une démarche de sobriété collective. Elle compte 10 salarié-es et plus de 110 adhérent-es.

Prestations attendues

Après la découverte de l’architecture système et logicielle déjà définie, Vous devez réaliser les programmes suivants :

  • Transcription des consignes du système de gestion de l’énergie : essentiellement de la transcription d’informations (volume estimé 5j)
  • Commande des équipements domotiques : envoi d’ordres via protocole MQTT (vers les équipements domotiques), écoute de topics MQTT (pour les messages de stimulation envoyés par d’autres programmes ou interfaces), commande des équipements domotiques par la réalisation de machines à états (déjà définies) . (volume estimé 12j)
  • Gestion des afficheurs utilisateur : participation aux spécifications techniques, commandes en MQTT, en lien avec le firmware OpenHASP sur un M5Stack CORE2. (volume estimé 7j)
  • Monitoring des équipements domotiques : écoute de topics MQTT pour mettre à jour l’état des équipements domotiques en base de donnée (volume estimé 3j)

Les programmes devront être testés et opérationnels (implémentés dans l’infrastructure SI du projet) pour la fin de la mission. Les réalisations seront publiées sous licence EUPL, dans une logique de partage citoyen.

Qualités attendues

  • Pouvoir travailler dans un mode collaboratif et collectif à distance, parfois en autonomie, parfois en groupe de travail.
  • Écoute, respect, bienveillance et organisation sont de mise.
  • Nous avons besoin d’une personne expérimentée dans le domaine du développement.
  • Avoir la fibre du logiciel libre et idéalement avoir déjà contribué au logiciel libre en général.

Connaissances attendues

  • Maîtrise de la programmation Python.
  • Travailler sous environnement Linux.
  • Maîtriser le concept de machine à états et idéalement avoir déjà eu une expérience d’implémentation.
  • La connaissance de MQTT est un plus.

Conditions de la mission

  • Début : Dès que possible
  • Fin : Compte-tenu des phases de test/mise en production et des délais visés par le projet, les réalisations seront réparties en deux temps : une section minimale (estimée à 20j) pour fin Février, et une section complémentaire (5-7j) attendue fin Mars.
  • Nombre de jours équivalent temps plein de prestations estimé : 20 à 27
  • Lieu : le centre de l’équipe de projet est à Redon. La mission peut être réalisée à distance, possibilité de venir sur site ponctuellement suivant le besoin (bureau partagé possible),
  • Conditions financières : à négocier. [fourchette estimée TJM : 300 à 400€HT]

Comment répondre

  • Faire une proposition commerciale détaillée avec votre taux journalier.
  • Délais : proposition commerciale à faire avant fin janvier.
  • Un mail décrivant votre motivation et intérêt à travailler pour le projet est souhaité, avec des références de réalisations justifiant votre expérience.
  • Proposition à envoyer par mail à elfe@enr-citoyennes.fr (commencer le sujet par [ELFE RECR DEV])

Liens utiles

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

[Résolu] Utilisation de argparse dans le cas où on a différents arguments selon la valeur du premier

by mahikeulbody from Linuxfr.org

Je voudrais utiliser argparse dans un cas où on a différents arguments selon la valeur du premier.

Soit par exemple un programme python appelé en ligne de commande qui admet les arguments suivants :

    <arg1> 'op1' ou 'op2' ou 'op3'     # argument obligatoire
    <arg2> : une chaîne de caractères   # argument obligatoire
    puis

    si arg1 == op1 alors pas d'autres arguments

    si arg1 == op2 alors l'argument supplémentaire suivant :
    <arg3> : une chaîne de caractères   # argument obligatoire

    si arg1 == op3 alors les arguments supplémentaires suivants :
    <arg3> : 'red' ou 'green' ou 'blue'  # argument optionnel
    <arg4> : '--simu'   # argument optionnel    
Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

PyCon Bordeaux ateliers

by pierre.imbaud from AFPy discuss

Les éditions précédentes de pycon, du moins celles auxquelles j’ai assisté, comportaient des “ateliers”, sur divers sujets. Y en a-t-il de prévu pour celle de Bordeaux?
J’initie ma petite fille à Python, et on pense venir à Pycon. Mais elle débute, et le niveau d’un atelier, s’adressant à des pythoniens aguerris, peut être redoutable. Un atelier d’initiation serait idéal.
Elle est sous Fenetre, moi sous Linux, et je n’ai pas la culture Fenetre. Hier installation de pip, sans même virtualenv, pas bin facile…

19 messages - 7 participant(e)s

Lire le sujet en entier

Lire la suite…

Stage Développeur Python H/F chez CLOG

by Alice_LITTAYE_1183 from AFPy discuss

Type de contrat : Stage
Localisation : PLEUDIHEN SUR RANCE (CÔTE D’ARMOR)
Pays : France

Un Groupe, des Métiers, le Vôtre…

Avec ses 6 marques de prêt-à-porter (Cache-Cache, Bréal, Bonobo, Morgan, Vib’s et Caroll), 1 Milliard de CA à fin février 2021, 13000 collaborateurs et 2400 points de vente dans le monde, le Groupe Beaumanoir poursuit son développement et recrute pour sa filiale logistique C-log.

Prestataire reconnu en Supplychain E-Commerce et Retail, C-Log propose des solutions logistiques et transport sur-mesure aux marques d’équipement de la personne (prêt-à-porter, beauté, chaussures, maroquinerie, sports, accessoires…). C-Log, en bref : 210 000 m² de surface, 8 sites en France, 1 site à Shanghai, 750 collaborateurs, 97 millions de pièces expédiées/an, 7500 points de vente livrés à travers plus de 90 pays. Des marques reconnues font aujourd’hui confiance à C-Log : Cache-Cache, Morgan, Bonobo, Eden Park, Damart, Sandro, Maje, Claudie Pierlot, Kickers,…

En cohérence avec une politique de Ressources Humaines favorisant l’épanouissement des collaborateurs, C-LOG recherche des collaborateurs curieux, désireux de réussir et toujours prêts à apprendre.

Détails du poste

Vous êtes intégrés au sein du bureau d’étude et d’innovation, structure à taille humaine dédiée aux problématiques de mécanisation et robotisation des entrepôts. Vous participerez au développement de solutions mécatroniques innovantes afin d’assister les
opérateurs.

Dans le cadre du déploiement d’une solution robotisée à base d’AGV pour la logistique de nos entrepôts, nous recherchons un stagiaire Développeur python pour une durée de 6 mois, pour nous assister sur le développement backend du logiciel de supervision de la flotte. Et plus particulièrement sur le développement d’un simulateur de production.

Ce stage pourra se concentrer sur un ou plusieurs des sujets suivants :

• Développement du modèle dynamique d’un AGV

  1. Simulation du comportement dynamique d’un AGV calqué sur nos robots
  2. Émulation du logiciel embarqué
  3. Génération d’erreurs selon un profil statistique (perte en navigation, déviation de trajectoire, perte de connexion, dérapage, etc…)
  4. Connexion avec le superviseur

• Traitement et analyse de données statistiques

  1. Mise à disposition des données statistiques des résultats des scénarios de simulation
  2. Analyse au regard des KPIs demandées
  3. Génération de nouveaux indicateurs en lien avec les productivités du site d’exploitation

Pour chaque sujet traité, vous serez assistés par le reste de l’équipe de développeurs et les étapes de développement suivantes seront à mettre en place :

• Analyse et compréhension des solutions déjà existantes
• Amélioration continue : optimisation du code existant, développement de nouvelles fonctionnalités
• Essais et tests, validation
• Documentation
• Industrialisation

Profil, Expérience, Formation

Nous recherchons avant tout un passionné de python, curieux et débrouillard. Vous intégrerez une équipe restreinte et donc multidisciplinaire, vous saurez faire preuve d’autonomie et de bonne humeur, vous serez une véritable force de proposition et
d’innovation.

Vous recherchez l’optimisation de vos codes, et passez du temps à confronter votre code aux essais réels ne vous fait pas peur.

Une bonne maîtrise de l’algorithmie est essentielle, l’art de construire une architecture logicielle et une bonne compréhension des blagues geeks sont des atouts indéniables.

Ouvert à tous les talents, l’ensemble de nos postes sont handi-accueillants.

Postuler

Stage Développeur Python H_F.pdf (119 KB)

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Un avis sur www.futureengineer.fr ?

by polochon from Linuxfr.org

Bonjour,

est ce que quelqu'un aurait un retour sur https://www.futureengineer.fr/?
Ce serait pour initier un enfant à la programmation en python (à sa demande, je précise). Je cherche un complément à ce parcours qui me semble bien mais très scolaire (très formel) http://www.france-ioi.org/algo/chapters.php. S'agissant d'un enfant assez jeune, j'aimerais avoir un petit à-côté ludique à proposer si jamais la motivation s’essoufflait.

Ce programme m'a été recommandé par d'autres parents, mais le logo d'amazon me fait un peu peur. Je n'ai pas trop envie d'avoir du placement de produit toutes les pages…
Bref, je préférerais savoir dans quoi je m'aventure avant d'y lancer mon fiston.

Merci à vous
Polochon

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

MySafeIP: un tiers de confiance pour votre pare-feu !

by MeAndMyKeyboard,Pierre Jarillon,Ysabeau from Linuxfr.org

Depuis quelques années (10/15, mince ça passe vite), j’héberge mes services à la maison au frais dans le garage sur un serveur physique, des VMs et depuis peu des instances cloud. Moi, ma petite famille et un cercle d’amis en sont les seuls utilisateurs. Un peu comme beaucoup de monde ici sans doute.

Un soir, j’installe Grafana/Prometheus pour me former et constate les scans en continu des bots sur tout ce qui est exposé. Bon, je ne suis pas un jeunot, je m’en doutais, mais quand même, ça se bouscule pas mal…

N’étant pas à l’abri de louper une mise à jour de temps en temps, ça ne me plaît pas beaucoup et je cherche comment améliorer tout ça, et voici comment…

Les pistes

Jour 1 : la solution VPN ! C’est cool, ça protège des virus selon le VPN du Nord ou OpenOffice en son temps. Ah non, la ministre pensait que c’était un pare-feu… (cf lien 5)
Et oui, c’est bien, mais il faut gérer les authentifications, installer les clients, croiser le regard de ses proches (« Mais pourquoi 😢 »). La nuit passe, il faut trouver autre chose.

Jour 2 : le bastion ssh, les proxies socks. C’est marrant, tout terrain et ça fonctionne. Mais bon on va garder ça pour soi au travail. Ce serait un remake en pire du jour un… Next !

Jour 3 : port-knocking ! On toque à la porte d’un serveur avec la bonne séquence udp ou tcp et il ouvre des règles de pare-feu. C’est propre, il y a des clients disponibles sur quasiment tous les appareils. C’est presque idéal, mais ça reste quand même technique, très, trop…

Jour 4 : 😰 pas grand-chose de neuf.

Jour 5 : je me rappelle mes quelques mois à développer un premier projet opensource 🤔. Si ça n’existe pas, on le code et on le partage ! C’était le bon temps ! Go, on se retrousse les manches.

On code !

Mois 1 : maquette sous django, base de données mariadb et installation conteneurisée. Ça fait le boulot, mais ce n’est pas superléger. J’ai l’impression d’enfoncer un clou avec une masse.

Mois 2 : ça fait le boulot et c’est quand même bien pratique. Mes instances nextcloud et bitwarden par exemple sont accessibles via des liens « tiers » que je donne à mes proches. Quand ils vont dessus, leurs ip clientes sont lues et le pare-feu les autorise directement. Ils sont redirigés quelques secondes après et utilisent tout ce qu’ils connaissent normalement sans nouveau passage par MySafeIP.
C’est aussi la première fois que j'ai si peu d’état d’âme à avoir des données personnelles en ligne.
Les bots eux se cassent les dents, je jubile 😏.

Mois 3 : le partager en l’état ? Il faudrait faire plus léger. Découverte de Fastapi, bootstrap. On ressort clavier/souris. Fastapi est bluffant dans un autre registre que Django 🤩. Le potentiel est là et la documentation est pléthorique pour un projet aussi jeune. C’est très, très motivant et j’ai quelques idées pour la suite :).

MySafeIP en bref

Après cette longue introduction, mais qui résume bien le besoin et les contraintes de ce genre d'outil, voici en bref ce qu'est MySafeIP.

MySafeIp est une application opensource (Apache-2.0) servant de tiers de confiance pour tenir à jour dynamiquement des IPs de confiance :

  • soit déclarées manuellement après authentification ;
  • soit automatiquement via des liens à la manière d’un raccourcisseur d’url mais dont la redirection permet la lecture de l’IP cliente et son autorisation.

L’ensemble est basé sur les framework Fastapi (backend) et Bootstrap/jinja (UI). L’interface d’administration web est compatible pc/smartphone.

Ça s’installe facilement :

L’installation est conteneurisée côté serveur et un petit module python est disponible pour assurer la récupération des IPs côté pare-feu. Je fournis aussi le script permettant de régler à minima iptables en se basant sur ipset 🥳.

En bref, cela s’installe en 5 minutes via docker-compose (oui, c’est un peu vendeur, disons 15 minutes en comptant le client 😜) et ajoute un filtrage fin en entrée de tous vos services sans effaroucher pour autant vos utilisateurs.

Côté authentification, login/mot de passe et deux facteurs (TOTP) pour l’administration web, Tokens pour le module client (gérables depuis l’application).

Vous pouvez enfin autoriser ou non l’enregistrement d’utilisateurs qui voudraient s’en servir pour leurs propres services. Il est, de plus, disponible en français et anglais.

Vous savez presque tout, j’espère qu’il vous rendra autant service qu’à moi.

Je le considère en version Alpha le temps de m’atteler à la réorganisation des routes et l’ajout des tests unitaires. Il fonctionne cependant « out of the box » et vous donnera déjà un bon aperçu de son utilité.

Et, avant que vous ne vous précipitiez sur les captures d’écran : très mais alors très bonne année à tout le monde !

Quelques captures d’écran :

L’accueil :
Page d’accueil

La déclaration d’ip :
Page d’accueil

Un exemple de lien instantané :
Page d’accueil

Je suis vivement intéressé par vos retours !

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

LoL – Logiciel libre, une affaire sérieuse

by mdk from AFPy discuss

J’en entend parler depuis quelques semaines, je l’ai enfin regardé, et ça donne fort fort envie de le partager :

J’ai envie de vous coller une citation mais … non allez voir :wink:

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Développeur Web Python (F/H) à Paris ou Full Remote chez WPO

by sriguet from AFPy discuss

Descriptif du poste

WPO développe notamment une plateforme logicielle de référence pour les gestionnaires de sites de production d électricité renouvelable, principalement éolien et solaire. Conçue autour d une stack technologique moderne, elle permet de collecter et d agréger un grand volume de données provenant de plusieurs milliers de sites de production et de sources hétérogènes. Ces données sont ensuite fiabilisées, traitées et restituées à nos utilisateurs sous forme de visualisation ou de modélisation prédictive pour leur permettre de prendre les meilleures décisions d exploitation.

Pour accompagner le succès grandissant de cette plateforme, nous recherchons un Développeur(euse) Web Python / SaaS pour rejoindre une équipe produit qui fonctionne de manière agile et qui dispose d une grande autonomie dans ses décisions quotidiennes.

La mission

Rattaché(e) à l’Engineering Manager et au sein d’une équipe de 6 personnes (Data scientists, Développeurs Backend / mobile, AdminSys), vous vous verrez attribuer les tâches suivantes :

  • Ecrire et maintenir du code de qualité : python (backend) + frontend (Plotly ou HTMX + AlpinJS + Tailwind CSS) : lint, tests, refactos
  • Participer à la conception de la plateforme logicielle fullstack de la société en veillant à optimiser la performance, la modularité et la maintenabilité
  • Surveiller et maintenir les performances et l organisation du code: python, HTML, CSS, Javascript, Robot Framework pour les tests UI
  • Etre force de proposition concernant la partie UX / UI, les visualisations …
  • Maintenir une veille technologique pertinente pour les produits de WPO.

Notre stack :

  • Cloud services : AWS à 90%, quelques services de Microsoft Azure comme la gestion des utilisateurs
  • CI/CD: Gitlab, Docker, Ansible, Terraform, Unix
  • Backend: Python 3.8+ / Flask / FastAPI
  • Frontend: Plotly Dash, HTMX, Alpine.JS / Tailwind CSS ou Bootstrap
  • Code Quality: formatters, flake8, mypy
  • Tests: Pytest, Jest, Robot Framework
  • IA/ML: PyTorch, AWS SageMaker
  • Monitoring : Graylog , Zabbix
  • Job Orchestration: Celery / RabbitMQ
  • Databases: PostGreSQL (triggers, partitioning, indexing, FDW, materialized views , Redis (caching)
  • Scripting (Bash, Powershell, Python)

Avec pour objectif une meilleure structuration de la partie frontend avec mise en application pour les chantiers 2023.

Profil recherché

Le(la) candidat(e) justifie d une expérience significative en tant que Développeur(euse) Web Python :

  • Maîtrise du langage Python et d un framework JS (HTMX, Alpine.JS, Vue.js ou équivalent)
  • Appétence sur l UX et l UI avec une expérience sur la réalisation d une interface utilisateur web
  • Goût pour l artisanat logiciel : qualité du code, tests
  • Expérience avec des bases de données relationnelles (SQL) et sur la gestion des données
  • Curiosité et volonté d apprendre et de partager,
  • Maîtrise de l’anglais

Une attirance pour le milieu des énergies renouvelables et des connaissances dans les métiers de l’ingénierie serait un plus.

Télétravail total (hors Paris) ou partiel (Paris)

Salaire : 43 - 55 k€ brut annuel
Prise de poste : Dès que possible
Expérience : Minimum 3 ans

Contact : recrutement@wpo.eu

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Sortie de Tryton 6.6

by Cédric Krier,orfenor,vmagnin,Ysabeau,dourouc05,Benoît Sibaud,Xavier Teyssier from Linuxfr.org

Le 31 octobre 2022 sortait la version 6.6 de Tryton. Cette version apporte une série de correctifs et d’améliorations et voit l’ajout de dix nouveaux modules dont une consolidation comptable, l’authentification via SAML, le support de contrat cadre pour l’achat et la vente et un système de recommandation de produit basé sur des règle d'association, ainsi que l’ajout de l’ukrainien parmi les langues supportées. Comme d’habitude, la montée de version est prise en charge entièrement (et cette fois-ci sans intervention manuelle).

Tryton

Tryton est un progiciel de gestion intégré modulaire et multiplateforme. Tryton se concentre sur la stabilité et les modules essentiels de gestion, qui sont très aboutis. Des tierces parties développent des modules spécifiques à certaines activités ou permettant l’intégration à d’autres outils. C’est notamment le cas du projet GNU Health qui s’appuie sur Tryton depuis 2008.

Tryton est utilisable à travers un client desktop, un client web responsive et un client en ligne de commande. Tous ces clients sont légers et multiplateformes (Linux, BSD, Windows et macOS).

Nouveautés principales

Voici une liste non-exhaustive des nouveautés qu’apporte cette version 6.6 (voir l’annonce officielle pour une liste plus complète).

Flatpack

Cette version est la première à publier un client bureau pré-compilé pour Linux via Flatpak.
Desktop client

Messages d’erreur

Les messages d’erreur de validation générique ont été revus pour fournir plus d’informations à l’utilisateur comme le nom de l’enregistrement et la valeur du champ causant le problème. Ceci devrait permettre à l’utilisateur de corriger son erreur plus facilement.

Délégation de dette

Un assistant permet de déléguer une dette à un tiers. Quand cette dette vient d’une facture, le nouveau bénéficiaire est enregistré sur celle-ci. Il est même possible de le remplir avant de valider la facture pour déléguer directement.

Pays, organisations et régions

Le module country vient maintenant avec deux nouveaux concepts : les organisations et les régions.
Par défaut Tryton crée les organisations les plus fréquemment utilisées comme l’Europe, le Benelux, NAFTA, Mercosur, etc.
Formulaire de l’Union européenne
Notez l’affichage des drapeaux de chaque pays qui est aussi une nouvelle fonctionnalité.

Les régions sont basées sur l'UN M49 qui regroupe les pays par régions géographiques, principalement pour faire du reporting. Les rapports sur les ventes l’utilisent entre autres.

Régions

Index

Tryton utilise maintenant une nouvelle syntaxe pour déclarer les besoins d’index. Le mécanisme de mise à jour de la base de données s’assure de créer, mettre à jour ou supprimer les index. En déclarant le besoin uniquement, Tryton peut choisir le meilleur type d’index à créer en fonction des possibilités de la base de données. Il est prévu dans une future version d’avoir en plus une détection d’index redondant.
L’ORM définit par défaut les index dont il a besoin sans intervention du développeur.

Voici l’exemple de la vente qui définit le besoin :

  • un index pour rechercher « Full-Text » sur le champ reference
  • un autre sur party (qui contient une clé étrangère) pour les jointures
  • un index partiel sur state uniquement pour certains états (utilisé pour afficher le nombre de ventes en cours)
  • etc.
    @classmethod                                    
    def __setup__(cls):                                      
        cls.number.search_unaccented = False
        cls.reference.search_unaccented = False       
        super(Sale, cls).__setup__()                
        t = cls.__table__()                
        cls._sql_indexes.update({
                Index(t, (t.reference, Index.Similarity())),
                Index(t, (t.party, Index.Equality())),
                Index(   
                    t,                                          
                    (t.state, Index.Equality()),
                    where=t.state.in_([
                            'draft', 'quotation', 'confirmed', 'processing'])),
                Index(                 
                    t,     
                    (t.invoice_state, Index.Equality()),
                    where=t.state.in_(['none', 'waiting', 'exception'])),
                Index(         
                    t,             
                    (t.shipment_state, Index.Equality()),
                    where=t.state.in_(['none', 'waiting', 'exception'])),
                })

Migration sur Heptapod (GitLab)

Un autre point marquant de cette fin d’année pour le projet est sa migration sur la plateforme Heptapod (une version de GitLab adaptée pour Mercurial).

  • Le code source réparti dans plusieurs dépôts a été fusionné dans un mono-dépôt (sans réécriture).
  • Les issues de l'ancien bug tracker ont été migrées sur Heptapod en gardant le même identifiant.
  • L'intégration continue a été déplacée de drone vers GitLab CI/CD et elle est maintenant exécutée aussi sur les merge requests.

Fondation

La fondation Tryton a pour but d’aider le développement et de supporter les activités autour du projet. Elle maintient aussi les infrastructures nécessaires au projet (site web, forum, chat, etc.). Elle est gérée par un conseil d’administration dont les membres sont cooptés depuis la communauté. Celui-ci a été renouvelé cette année après les cinq ans maximums de service du précédent conseil.

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Critère de découpage d'un module

by ThierryP from AFPy discuss

Salut à tous et bon 2023.

En regardant le code de gaufre.py · main · gopher / gaufre · GitLab, et étant confronté dans un code récent à cette question, je me demande à partir de quel critère il est conseillé de découper un module en sous-modules (longueur, clarification, …).

Pour ma part (pour des raisons pédagogiques, j’ai tendance à faire plein de fonctions donc j’arrive à des codes longs et peu pratiques en maintenance/correction.
Je me demande donc quelles sont les bonnes pratiques en la matière.

Th.

8 messages - 5 participant(e)s

Lire le sujet en entier

Lire la suite…

IUT alternants : projet JavaScript – jQuery à rendre le 22 janvier minuit au plus tard

by Olivier Pons from Olivier Pons

A rendre le dimanche 22 janvier 2023 minuit au plus tard


Projet individuel


NB : excepté lorsqu’on se connecte, et se déconnecte, une seule page = aucun rechargement.
C’est totalement différent du projet que vous avez appris/fait en Php cette année.


Comment le rendre

Faites un fichier README.txt et déposez-le ici
Dans le fichier README.txt, précisez :

  • le sujet choisi
  • l’adresse de votre site
  • un nom d’utilisateur
  • un mot de passe
  • (et plusieurs nom/mot de passe, s’il y a plusieurs niveaux de droits (administrateur/visiteur etc.))
  • si vous avez utilisé des librairies spécifiques que je vous ai autorisées, merci de le re-préciser

Sujet

Ce que vous voulez tant que c’est dans le cadre de ce que l’on a vu. Vous avez tout le Web comme inspiration !
N’oubliez pas de me donner le nom et le mot de passe pour se connecter !
Si vous gérez des profils différents (admin / user ou autre), donnez moi les noms et mots de passe de différents profils !


Fonctionnalités obligatoires

  • Connexion + déconnexion (vu en cours)
  • Effets jQuery sur les éléments
  • Appels JSON : au moins deux appels en plus de ceux vus en cours

Sujets possibles

  1. Site de partage de photos
  2. Site de cocktails (cf ci-dessus)
  3. e-rated : site d’appréciations (selon des sujets, à définir)
  4. Ask-a-question : site où l’on pose des questions sur des sujets divers, et des gens répondent
  5. Write-a-book-together : site où l’on se connecte et où on peut écrire un livre à plusieurs
  6. Wedding-couple-site : site où l’on uploade + partage des photos de mariage + livre de commandes
  7. Playing-cards-collection : site où on scanne + échange des cartes (Magic the gathering)
  8. Polls-and-surveys : site de création de sondages (= QCM, exemple très beau ici : quipoquiz)
  9. Poems-generator : faire un cadavre exquis qui génère des poèmes + possibilité pour les utilisateurs de les noter / d’ajouter des mots
  10. The-future-of-post-it : faire un carnet de choses à faire pour les utilisateurs, qui envoie des mails de rappels de ces choses à des dates données
  11. Gift-ideas : un site où l’on va faire des idées de cadeaux / suggérer des idées de cadeaux + les noter (les meilleurs ressortent en premier)
  12. Le-bon-recoin : refaire le bon coin en plus simple
  13. Suggest-crawlers : site de suggestions : on clique sur un mot, il en suggère plein d’autres avec + définitions / liens de sites pour chacuns
  14. Tv-fans : site de présentations + notes d’émissions télé
  15. Faire le jeu SokoBan vu en cours, avec la possibilité de login, enregistrement. Pour les appels JSON supplémentaires, lorsque l’utilisateur choisit un tableau, s’en souvenir (= AJAX) et lorsqu’il se reconnecte, le remettre directement. Puis enregistrer son score lorsqu’il a terminé un niveau + montrer les meilleurs scores.

Pour les sujets qui suivent, ils sont possibles mais plutôt complexes et demandent plus d’investissement. Si vous êtes motivés, demandez-moi plus d’informations, je vous expliquerai les difficultés que vous allez rencontrer.

  1. Turn-by-turn : faire un jeu multijoueurs en tour par tour (jeu de cartes, de poker, ou de plateau etc)
  2. Chat-with-someone : site de chat/discussion
  3. A-maze-ing : site où l’on peut se ballader dans un labyrinthe et essayer d’en trouver la sortie

Sujet imposé si vous n’avez pas d’idée

Cocktails : on se connecte, on a une liste d’éléments (récupérés en JSON) disponibles, on coche ceux qui nous intéressent, on valide, c’est envoyé, et le retour en JSON affiche les cocktails qu’il est possible de faire avec ce que l’on a coché.


Ce que vous devez rendre

Idéalement

Une Url vers un site Web (utilisez Alwaysdata, ou PythonAnywhere, par exemple)

Si vous n’avez pas le choix

Les fichiers source de votre projet


Pour favoriser votre organisation

Utilisez ce que l’on a vu en cours (Google boilerplate)


Librairies autorisées


React autorisé

Note pour ceux qui connaissent / font / du React : la librairie est autorisée, mais il me faut le code d’origine, et non pas le code minifié / de production.


Interdiction d’utiliser une librairie JavaScript qui ne vienne pas des sites autorisés précédemment


Retard

Après le dimanche 11 avril minuit

Passé ce délai ce sera 1 pt par 2 heures de retard (je prendrai en compte la date de réception du mail).
Pour ceux qui essaient vraiment d’aller jusqu’à la dernière minute, toute heure entamée est comptée comme une heure complète. Exemple : un point en moins si je le reçois le 12 avril à 00:01.

N’oubliez pas de me donner le nom et le mot de passe pour se connecter !


Copier-coller

  • Copie sur une autre personne (« je se savais pas comment implémenter telle ou telle fonctionnalité dont j’avais besoin pour aller plus loin, je l’ai copiée sur un autre ») :
    • si la personne est clairement nommée : note pour la fonctionnalité divisée par 2 (uniquement la moitié du travail a été faite) ;
    • 0 aux deux personnes sinon ;
  • Si je m’aperçois que vous avez bêtement copié collé des sources Internet, je vous convoquerai pour vous demander de m’expliquer la fonctionnalité, et :
    • si vous ne savez pas m’expliquer le code alors 0 ;
    • si vous savez m’expliquer tout le code alors votre note totale sera divisée par vous + le nombre de contributeurs à ce projet, ce qui se rapprochera certainement de 0 aussi.

Voici un exemple de ce que vous pouvez faire, si vous choisissez le projet cocktails.


PDFs

JavaScript
jQuery

Lire la suite…

IUT alternants : projet Django / Python à rendre le 12 février minuit au plus tard

by Olivier Pons from Olivier Pons

A rendre le dimanche 12 février 2023 minuit au plus tard


Projet individuel


Comment le rendre

Faites un fichier README.txt et déposez-le ici
Dans le fichier README.txt, précisez :

  • le sujet choisi
  • l’adresse de votre site
  • un nom d’utilisateur
  • un mot de passe
  • (et plusieurs nom/mot de passe, s’il y a plusieurs niveaux de droits (administrateur/visiteur etc.))
  • si vous avez utilisé des librairies spécifiques que je vous ai autorisées, merci de le re-préciser

Sujet

Ce que vous voulez tant que c’est dans le cadre de ce que l’on a vu. Vous avez tout le Web comme inspiration !
N’oubliez pas de me donner le nom et le mot de passe pour se connecter !
Si vous gérez des profils différents (admin / user ou autre), donnez moi les noms et mots de passe de différents profils !


Fonctionnalités obligatoires

  • Nouveaux modèles
  • Nouvelles relations à mettre en oeuvre : ForeignKey, ManyToMany, OneToOne
  • Au moins un formulaire
  • Connexion + déconnexion (vu en cours)
  • Visualisation de tout dans l’interface d’administration

Sujets possibles

  1. Site de partage de photos
  2. Site de cocktails (cf ci-dessus)
  3. e-rated : site d’appréciations (selon des sujets, à définir)
  4. Ask-a-question : site où l’on pose des questions sur des sujets divers, et des gens répondent
  5. Write-a-book-together : site où l’on se connecte et où on peut écrire un livre à plusieurs
  6. Wedding-couple-site : site où l’on uploade + partage des photos de mariage + livre de commandes
  7. Playing-cards-collection : site où on scanne + échange des cartes (Magic the gathering)
  8. Polls-and-surveys : site de création de sondages (= QCM, exemple très beau ici : quipoquiz)
  9. Poems-generator : faire un cadavre exquis qui génère des poèmes + possibilité pour les utilisateurs de les noter / d’ajouter des mots
  10. The-future-of-post-it : faire un carnet de choses à faire pour les utilisateurs, qui envoie des mails de rappels de ces choses à des dates données
  11. Gift-ideas : un site où l’on va faire des idées de cadeaux / suggérer des idées de cadeaux + les noter (les meilleurs ressortent en premier)
  12. Le-bon-recoin : refaire le bon coin en plus simple
  13. Suggest-crawlers : site de suggestions : on clique sur un mot, il en suggère plein d’autres avec + définitions / liens de sites pour chacuns
  14. Tv-fans : site de présentations + notes d’émissions télé
  15. Faire le jeu SokoBan vu en cours, avec la possibilité de login, enregistrement. Pour les appels JSON supplémentaires, lorsque l’utilisateur choisit un tableau, s’en souvenir (= AJAX) et lorsqu’il se reconnecte, le remettre directement. Puis enregistrer son score lorsqu’il a terminé un niveau + montrer les meilleurs scores.

Pour les sujets qui suivent, ils sont possibles mais plutôt complexes et demandent plus d’investissement. Si vous êtes motivés, demandez-moi plus d’informations, je vous expliquerai les difficultés que vous allez rencontrer.

  1. Turn-by-turn : faire un jeu multijoueurs en tour par tour (jeu de cartes, de poker, ou de plateau etc)
  2. Chat-with-someone : site de chat/discussion
  3. A-maze-ing : site où l’on peut se ballader dans un labyrinthe et essayer d’en trouver la sortie

Sujet imposé si vous n’avez pas d’idée

Cocktails : on se connecte, on a une liste d’éléments (récupérés en JSON) disponibles, on coche ceux qui nous intéressent, on valide, c’est envoyé, et le retour en JSON affiche les cocktails qu’il est possible de faire avec ce que l’on a coché.


Ce que vous devez rendre

Idéalement

Si vous n’avez pas le choix

Les fichiers source de votre projet


Pour favoriser votre organisation

Utilisez ce que l’on a vu en cours (Google boilerplate)


Librairies autorisées


React autorisé

Note pour ceux qui connaissent / font / du React : la librairie est autorisée, mais il me faut le code d’origine, et non pas le code minifié / de production.


Interdiction d’utiliser une librairie JavaScript qui ne vienne pas des sites autorisés précédemment


Retard

Après la date et heure limite

Passé ce délai ce sera 1 pt par 2 heures de retard (mon robot qui analyse les mails prend en compte la date de réception du mail, tout est fait automatiquement).
Pour ceux qui essaient vraiment d’aller jusqu’à la dernière minute, toute heure entamée est comptée comme une heure complète.
Exemple : un point en moins si je le reçois un jour après à la minute près, soit date limite plus 00:01 minute.

N’oubliez pas de me donner le nom et le mot de passe pour se connecter !


Copier-coller

  • Copie sur une autre personne (« je se savais pas comment implémenter telle ou telle fonctionnalité dont j’avais besoin pour aller plus loin, je l’ai copiée sur un autre ») :
    • si la personne est clairement nommée : note pour la fonctionnalité divisée par 2 (uniquement la moitié du travail a été faite) ;
    • 0 aux deux personnes sinon ;
  • Si je m’aperçois que vous avez bêtement copié collé des sources Internet, je vous convoquerai pour vous demander de m’expliquer la fonctionnalité, et :
    • si vous ne savez pas m’expliquer le code alors 0 ;
    • si vous savez m’expliquer tout le code alors votre note totale sera divisée par vous + le nombre de contributeurs à ce projet, ce qui se rapprochera certainement de 0 aussi.

Voici un exemple de ce que vous pouvez faire, si vous choisissez le projet cocktails.


PDFs

Python Django

Lire la suite…

Toulouse - Développeur Python

by Alex_Marandon from AFPy discuss

Conditions

CDI, temps-plein, télétravail partiel envisageable

Contexte

WeatherForce est une startup toulousaine spécialisée dans la création d’indicateurs prédictifs à destination des entreprises impactées par les aléas météorologiques et climatiques. Nous avons créé et opérons une plateforme technique permettant le traitement massif de données géospatiales. Conçue de façon ouverte, cette plateforme ouvre la voie à une collaboration effective avec les institutions météorologiques locales au bénéfice des entreprises et des populations locales.

Mission

Au sein de notre équipe Technique et Weather & Data Science, votre objectif sera de participer à la construction de modules clés de la plateforme WeatherForce, en lien avec le traitement massif de données. Vous serez chargé.e en particulier de :

  1. Créer et améliorer les approches permettant de traiter les données de façon efficiente
  2. Participer à la construction de la plateforme de traitement de données et à son
    déploiement opérationnel
  3. Établir et promouvoir les bonnes pratiques de traitement de données en étroite
    collaboration avec nos data scientistes,
  4. Participer à la promotion des bonnes pratiques de programmation en vigueur.
    Dans le cadre de nos projets, vous pourrez également être amené à effectuer des missions ponctuelles à l’étranger pour former les usagers à la solution et vérifier « sur le terrain » sonb on fonctionnement.

Profil recherché

Issu(e) d’une formation scientifique et/ou informatique, vous bénéficiez d’une expérience significative en tant que Développeur Python, et dans le traitement de données géospatiales.
Doté de bonnes connaissances système (Linux, Docker, File system, Cloud Storage), Web (protocole HTTP, API RESTful), et de l’écosystème Python scientifique (NumPy, Pandas, Xarray,Dask) vous appréciez travailler avec des méthodes de développement modernes (tests, CI/CD, revues de code) et maîtrisez GIT.

Vous produisez du code clair et structuré, et vous savez être pédagogue !
Vous avez également un intérêt marqué pour les problématiques liées au climat et ses enjeux, ainsi qu’un premier niveau de compréhension des enjeux et contextes de mise à disposition de ces nouveaux services intelligents.

Vous avez une solide expérience en langage de programmation Python et dans l’usage de librairies telles que pandas, numpy, xarray ou Dask pour des applications nécessitant une programmation scientifique.

A l’aise avec l’environnement GNU/Linux/GitLab et l’open source, vous portez un intérêt à la performance de traitement des données, et au suivi de documentation du travail accompli, et vous avez la capacité de résonner en mode Agile.

Vous justifiez également de compétences dans l’usage d’un environnement Jupyter/notebook
de calcul distribué sur le cloud. Vous avez un niveau d’anglais courant aussi bien à l’écrit qu’à l’oral. L’espagnol serait un plus.

Doté(e) de bonnes qualités relationnelles, appréciant le travail en équipe, vous savez
coordonner vos actions et partager l’information avec les autres membres de l’équipe. Vous avez un esprit d’initiative et de synthèse, le sens de l’organisation, et savez travailler en autonomie.

Vous faites preuve de rigueur et respectez les délais pour délivrer une solution opérationnelle correspondant aux besoins des usagers finaux.

Le poste est à pourvoir tout de suite, basé sur Toulouse (centre-ville quartier Esquirol).
Télétravail jusqu’à 2 jours par semaine possible.

Vous souhaitez rejoindre l’équipe ?

Contact

Envoyez-nous votre CV en nous expliquant votre motivation à l’adresse suivante :
jobs@weatherforce.org. en précisant en objet de mail “SENIOR PYTHON”.

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Toulouse - Ingénieur Cloud

by Alex_Marandon from AFPy discuss

Conditions

Recherche prestataire freelance à temps partiel

Contexte

WeatherForce est une entreprise toulousaine spécialisée dans la création d’indicateurs prédictifs à destination des entreprises impactées par les aléas météorologiques et climatiques.
Nous avons créé et opérons une plateforme technique permettant le traitement massif de données géospatiales. Conçue de façon ouverte, cette plateforme ouvre la voie à une collaboration effective avec les institutions météorologiques locales au bénéfice des entreprises et des populations locales.

Mission

Nous recherchons un expert cloud avec de solides compétences Python pour nous aider dans les domaines suivants :

  • packaging et CI pour des projets Python orientés data science
  • maintenance de nos cluster JupyterHub et Dask déployés sur Kubernetes à l’aide d’un outil maison codé en Python
  • gestion de notre infrastructure Azure avec Terraform
  • migration vers Kubernetes de services actuellement déployés sur VM avec Ansible
  • monitoring avec Prometheus et Grafana

Contact

jobs@weatherforce.org

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Pour les grenoblois - Meetup le 26 janvier

by rmnclmnt from AFPy discuss

Bonjour à tous,

Je suis Romain Clement, un des organisateurs du Meetup Python Grenoble depuis 2019. Nous avons eu vent de ce forum il y a quelques semaines et de la possibilité de poster les annonces de nos événements auprès de la communauté.

Nous organisons notre premier Meetup de l’année le jeudi 26 janvier 2023 à partir de 19h dans les locaux de La Turbine.coop (5 esplanade Andry Farcy, 38000 Grenoble) : " Retour ludique sur l’année pythonique 2022"

Que vous ayez suivi ou non l’actualité autour de l’écosystème Python, venez tester et approfondir vos connaissances avec la communauté grenobloise lors de ce quiz rétrospective !

Lien de l’événement : Retour ludique sur l’année pythonique 2022 - Meetup Python Grenoble

Meetup Python Grenoble

2023-01-26 19:00 (Europe/Paris)

Bonne journée,
Romain

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Coup de projecteur sur Python, j’ai pas dis trop de bêtises?

by freezed from AFPy discuss

Un forum / podcast que je fréquente m’a fais réagir et je me suis un peu étalé au sujet de Python.
Il n’est pas nécessaire d’écouter l’épisode du dit podcast, pour lire mon commentaire, si j’ai commis des erreurs ça vous sautera aux yeux tout seul.
Et comme je fini par un coup de pub pour l’AFPy je préfère être relu pour éviter tout malentendu :sweat_smile:

https://forum.compagnons-devops.fr/t/quitter-le-cloud-ou-accelerer-son-adoption-actus-devops-novembre-2022/2851/3?u=freezed

2 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Toulouse - Développeur Python

by weatherforce from Linuxfr.org

Conditions

CDI, temps-plein, télétravail partiel envisageable

Contexte

WeatherForce est une startup toulousaine spécialisée dans la création d'indicateurs prédictifs à destination des entreprises impactées par les aléas météorologiques et climatiques. Nous avons créé et opérons une plateforme technique permettant le traitement massif de données géospatiales. Conçue de façon ouverte, cette plateforme ouvre la voie à une collaboration effective avec les institutions météorologiques locales au bénéfice des entreprises et des populations locales.

Mission

Au sein de notre équipe Technique et Weather & Data Science, votre objectif sera de participer à la construction de modules clés de la plateforme WeatherForce, en lien avec le traitement massif de données. Vous serez chargé.e en particulier de :
1. Créer et améliorer les approches permettant de traiter les données de façon efficiente
2. Participer à la construction de la plateforme de traitement de données et à son
déploiement opérationnel
3. Établir et promouvoir les bonnes pratiques de traitement de données en étroite
collaboration avec nos data scientistes,
4. Participer à la promotion des bonnes pratiques de programmation en vigueur.
Dans le cadre de nos projets, vous pourrez également être amené à effectuer des missions ponctuelles à l'étranger pour former les usagers à la solution et vérifier « sur le terrain » sonb on fonctionnement.

Profil recherché

Issu(e) d’une formation scientifique et/ou informatique, vous bénéficiez d’une expérience significative en tant que Développeur Python, et dans le traitement de données géospatiales.
Doté de bonnes connaissances système (Linux, Docker, File system, Cloud Storage), Web (protocole HTTP, API RESTful), et de l’écosystème Python scientifique (NumPy, Pandas, Xarray,Dask) vous appréciez travailler avec des méthodes de développement modernes (tests, CI/CD, revues de code) et maîtrisez GIT.

Vous produisez du code clair et structuré, et vous savez être pédagogue !
Vous avez également un intérêt marqué pour les problématiques liées au climat et ses enjeux, ainsi qu’un premier niveau de compréhension des enjeux et contextes de mise à disposition de ces nouveaux services intelligents.

Vous avez une solide expérience en langage de programmation Python et dans l'usage de librairies telles que pandas, numpy, xarray ou Dask pour des applications nécessitant une programmation scientifique.

A l'aise avec l'environnement GNU/Linux/GitLab et l'open source, vous portez un intérêt à la performance de traitement des données, et au suivi de documentation du travail accompli, et vous avez la capacité de résonner en mode Agile.

Vous justifiez également de compétences dans l’usage d’un environnement Jupyter/notebook
de calcul distribué sur le cloud. Vous avez un niveau d'anglais courant aussi bien à l'écrit qu'à l'oral. L'espagnol serait un plus.

Doté(e) de bonnes qualités relationnelles, appréciant le travail en équipe, vous savez
coordonner vos actions et partager l'information avec les autres membres de l’équipe. Vous avez un esprit d’initiative et de synthèse, le sens de l’organisation, et savez travailler en autonomie.

Vous faites preuve de rigueur et respectez les délais pour délivrer une solution opérationnelle correspondant aux besoins des usagers finaux.

Le poste est à pourvoir tout de suite, basé sur Toulouse (centre-ville quartier Esquirol).
Télétravail jusqu'à 2 jours par semaine possible.

Vous souhaitez rejoindre l’équipe ?

Contact

Envoyez-nous votre CV en nous expliquant votre motivation à l’adresse suivante :
jobs@weatherforce.org. en précisant en objet de mail "SENIOR PYTHON".

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Nombres décimaux et Python

by ascendances from ascendances

Python, comme de nombreux autres langages ainsi que des implémentations matérielles, suit la norme IEEE 754 pour manipuler les nombres à virgule (le type float en Python). Cette norme définit les tailles possibles de mémoire allouée pour contenir le nombre. La taille étant fixe, certains nombres ne sont pas représentables et la valeur enregistrée peut être légèrement erronée.

Cette situation n’est donc pas spécifique à Python. L’écart entre la valeur saisie et la valeur en mémoire est visible avec un interpréteur Python :

$ python3 -q
>>> 1.9999999999999943e+71
1.9999999999999942e+71

ou un calcul qui devrait valoir 0 si les mathématiques étaient une science exacte :

$ python3 -q
>>> 0.1 + 0.1 + 0.1 - 0.3
5.551115123125783e-17

Ce type d’erreur ne se rencontre pas uniquement dans les domaines spatial ou scientifique. Par exemple, des calculs de TVA et TTC peuvent produire des erreurs visibles pour l’utilisateur.

Pour éviter ces erreurs, il est possible d’utiliser la bibliothèque decimal incluse dans la bibliothèque standard :

$ python3 -q
>>> from decimal import Decimal
>>> decimal.Decimal('1.9999999999999943e+71')
Decimal('1.9999999999999943E+71')
>>> Decimal(1) / Decimal(10) + \
... Decimal(1) / Decimal(10) + \
... Decimal(1) / Decimal(10) - \
... Decimal(3) / Decimal(10)
Decimal('0.0')

Un autre moyen est de faire des calculs en n’utilisant que des entiers et faire des conversions au dernier moment. Dans le cas de la TVA, cela signifie de ne travailler qu’en centimes et de ne convertir en euro que lors de l’affichage à l’utilisateur (avec l’arrondi adapté, limité à deux décimales).

Références

Lire la suite…

Développeur.euse python - Région Rhône-Alpes

by chocobn from AFPy discuss

Développeur.euse python

La société Alexandria recherche un.e développeur.euse python / Django pour renforcer son équipe informatique.

La société

Alexandria est un groupe spécialisé dans le e-commerce sur les marketplaces, présent dans sept pays.
Nous exerçons cette activité depuis maintenant 9 ans. Nos locaux se trouvent à quelques minutes à pied du métro Flachet (Villeurbanne).
L’équipe informatique est composée de 5 personnes confirmées et expérimentées.

Les missions

Vos missions seront multiples :

  • Assurer le développement et l’intégration de nouvelles marketplaces dans le système existant
  • Développer et améliorer des fonctionnalités de notre applicatif (Django) pour les différents pôles de la société
  • Optimiser les performances et les méthodes de calcul de prix de notre système
  • Prise en main de notre base de données Postgres

Les méthodes

Nous prenons à coeur d’utiliser la méthode “Test Driven Developpment” afin de garantir au mieux la pérennité et la qualité du code.
Nous utilisons les outils de développement opensource communs à la plupart des projets actuels comme git, docker, jenkins
Les postes de travail tournent sous linux et vous pourrez profiter de l’expérience de l’équipe pour apprendre à utiliser vim par exemple.

Le poste

  • Les débutant⋅e⋅s sont accepté⋅e⋅s
  • Contrat à durée indeterminée, salaire 45-55k brut annuel
  • Télétravail 4 jours par semaine possible

Pour toute question, n’hésitez pas à nous contacter par mail
dev@abc-culture.fr

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

à la recherche d'une lib python activitypub

by foxmask from AFPy discuss

Je ne trouve nulle part une lib qui se contente de fournir la possibilité de partager ses contenus avec activitypub.

La plupart des projets que j’ai croisé, sont fortement couplés au sujet du projet, comme partager des des lectures de livres, des photos etc…

Pour sûr ces projets marchent bien mais, est ce vraiment bien écrit pour être couplé de la sorte ?

J’imaginais naïvement une lib fournissant des bêtes décorateurs qui permettraient de dire
“ça ça va là”, “ça ça part là” etc

A priori je me suis fourvoyé :wink:

2 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Itertools générer les combinaisons une par une

by alberic89 from Linuxfr.org

Bonjour le monde !
J'ai un petit problème très pythonesque à vous soumettre aujourd'hui.
J'ai codé un petit script qui me génère toutes les situations « gagnantes » au jeu de Marienbad.
Il génère des combinaisons de tas de jetons, et teste si elles sont gagnantes, et les montre à l'écran si oui.
Pour la génération des combinaisons, j'utilise itertools avec la fonction combinations_with_replacement().
Seulement, quand on commence à passer à des générations avec une quinzaine de tas pouvant aller jusqu'à 20 jetons, le nombre de combinaisons générées explose et remplit mes 4 Go de RAM avant de se faire tuer par l'OS.
Pour résoudre ce problème, il faudrait pouvoir tester les combinaisons au fur et à mesure qu'elles sont générées par itertools, et non pas quand il a fini de générer une fournée de combinaisons.
Quelqu'un aurait-il une idée sur la façon de procéder, sachant que le module itertools est écrit en C, mais il existe une version python dans les libs de Pypy ?

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

[Résolu] Itertools générer les combinaisons une par une

by alberic89 from Linuxfr.org

Bonjour le monde !
J'ai un petit problème très pythonesque à vous soumettre aujourd'hui.
J'ai codé un petit script qui me génère toutes les situations « gagnantes » au jeu de Marienbad.
Il génère des combinaisons de tas de jetons, et teste si elles sont gagnantes, et les montre à l'écran si oui.
Pour la génération des combinaisons, j'utilise itertools avec la fonction combinations_with_replacement().
Seulement, quand on commence à passer à des générations avec une quinzaine de tas pouvant aller jusqu'à 20 jetons, le nombre de combinaisons générées explose et remplit mes 4 Go de RAM avant de se faire tuer par l'OS.
Pour résoudre ce problème, il faudrait pouvoir tester les combinaisons au fur et à mesure qu'elles sont générées par itertools, et non pas quand il a fini de générer une fournée de combinaisons.
Quelqu'un aurait-il une idée sur la façon de procéder, sachant que le module itertools est écrit en C, mais il existe une version python dans les libs de Pypy ?

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Dernières contributions à des logiciels libres par l'équipe Yaal Coop (automne 2022)

by Éloi Rivard <eloi@yaal.coop> from Yaal

pytest-httpserver

Serveur HTTP pour pytest

dnserver

Serveur DNS simpliste pour le développement

canaille

Serveur OpenID Connect simpliste, basé sur OpenLDAP

ZEO

Serveur de base de données pour ZODB

nextcloud-oidc-login

Plugin OpenID Connect pour nextcloud

authlib

Bibliothèque python de gestion des identités et des accès

aioimaplib

Bibliothèque python asyncio IMAP4rev1

MessagePack

Format de sérialisation binaire efficace (bibliothèque python)

simple-svelte-autocomplete

Composant svelte de suggestion d'éléments dans une liste déroulante

dnspython

outils DNS pour Python

Lire la suite…

Last FOSS contributions from the Yaal Coop team (automn 2022)

by Éloi Rivard <eloi@yaal.coop> from Yaal

pytest-httpserver

Http server for pytest to test http clients

dnserver

Simple development DNS server

canaille

Simplistic OpenID Connect provider over OpenLDAP

ZEO

ZODB Client-Server framework

nextcloud-oidc-login

Nextcloud login via a single OpenID Connect 1.0 provider

authlib

Identity and Access management library for python

aioimaplib

Python asyncio IMAP4rev1 client library

MessagePack

Efficient binary serialization format (python implementation)

simple-svelte-autocomplete

Simple Autocomplete / typeahead component for Svelte

dnspython

DNS toolkit for Python

Lire la suite…

Développeur back end Python pour une ingénierie storage

by jadawin from AFPy discuss

Ho! Ho! Ho! En cette période de fête, je déballe un cadeau avec l’ouverture d’un poste de Développement python dans le domaine du storage.
L’équipe est à Montreal, Lyon, Rennes, Nantes, Bordeaux, Toulouse, Roubaix et ouvert au télétravail partiel (3jours par semaine)… Nous aimons les blagues carambar, partager nos recettes de cuisine, bosser dans l’opensource, manipuler des pools zfs! Bref, nous bossons dans le stockage de données, une des pierres angulaires de toute infrastructure et pour avancer nous recherchons une personne qui comprend le perl, parle le python et si possible le go.

Tu as envie de nous rejoindre? Tu peux me contacter!

2 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Logo de la pycon fr à Bordeaux en 2023 avec un texte indiquant que les inscriptions à l'appel à participation se terminent le 7 janvier.

Lire la suite…

scratch_manager: gestionnaire de mise en cache de jeux de données

by nlgranger from Linuxfr.org

J'ai eu l'occasion de développer un petit logiciel open-source pour mon travail, donc j'en profite pour partager ici.

Motivation

Sur les grappes de calculs (clusters) dédiés à l'intelligence artificielle, il y a un problème assez récurrent lié au stockage et à l'accès aux données.
Dans ces installations, on trouve généralement d'un côté une baie de stockage avec des jeux de données composés de millions de petits fichiers, et de l'autre côté les nœuds de calcul qui lisent ces fichiers.
La baie est montée sur tous les noeuds (ex: nfs, gpfs, lustre, etc.).

Quelques ordres de grandeurs et précisions :

  • Une expérience (un job) travaille pendant quelques jours, et sur un jeu de données à la fois.
  • Plusieurs expériences de différents utilisateurs peuvent se partager un nœud de calcul (c'est très bien géré par slurm avec des cgroups).
  • Les fichiers sont assez petits (entre 100ko et 10mo), chaque jeu de données pèse entre une centaine de giga et un téra.
  • Les fichiers sont lus aléatoirement, autour d'une centaine de fois chacun.

En termes de stockage, ces millions de fichiers sont déjà un problème en soi pour le système de fichier.
Pour la charge de travail, les centres de calculs adoptent plusieurs politiques avec leurs avantages et inconvénients :

Option 1: Obliger les utilisateurs à copier les données sur un disque local du nœud au début de l'expérience, puis à nettoyer à la fin. L'ennui, c'est qu'il faut répéter l'opération à chaque expérience, hors elles peuvent s’enchaîner assez fréquemment en phase de mise au point d'un modèle. D'autre part, si l'expérience plante, le nettoyage des fichiers n'est pas garanti. Enfin, différentes expériences sur un même nœud ne partagent pas le cache, on pourrait donc se retrouver avec le même jeu de données en doublon.

Option 2: Opter pour une solution de mise en cache matérielle ou logicielle, ce qui est coûteux mais transparent pour l'utilisateur.

Option 3: Imposer l'utilisation d'une base de données spécifiquement étudiée pour ce type d'usage (ex: S3 avec minio), ce qui oblige les utilisateurs à modifier leur code de chargement des données et à convertir les données.

Approche

Pour scratch_manager, la liste des objectifs était donc la suivante :

  1. Regrouper les fichiers dans des archives pour que le nombre de fichiers sur la baie reste faible.
  2. Garder un accès aux données via une API de filesystem posix.
  3. Pas de délai pour démarrer une expérience.
  4. Mise en cache transparente pour l'utilisateur.
  5. Mutualiser le cache entre les expériences et aussi entre les utilisateurs.

Pour 1 et 2, l'astuce consiste à utiliser des images disques qui rassemblent les fichiers d'un jeu de données. J'ai opté pour squashfs mais de l'ext4 en lecture seule fonctionnerait aussi.
Pour 3, on monte les images stockées sur la baie afin que le contenu soit immédiatement accessibles. Bien sûr, toutes les lectures occasionnent alors de la charge de travail sur la baie de stockage.
Pour 4, on utilise un démon qui copie les images localement sur les nœuds et les monte par-dessus le premier montage. Linux gère ça très bien à chaud même s'il y a des fichiers ouverts. Après ça, les nouveaux accès pointent vers les disques locaux.
5 est résolu par le fait qu'un démon système gère ça pour tout le monde.

Voilà la nimage qui récapitule le bazar :

fonctionnement de scratch_manager

Détails d'implémentation

Mesure du traffic: Du fait que l'on travaille avec des images disques, le débit sur chaque jeu de donnée est accessible en consultant /proc/diskstats. Il faut juste faire le lien entre les /dev/loop* et les images.

Allocation du cache: L'optimisation des images à mettre en cache est un problème de Knapsack, j'ai honteusement copié-collé le code qui résout ça.

Démontage et suppression des images: Pour appeler umount, il faut penser à passer le flag --lazy pour attendre la fermeture des fichiers encore ouvert. Étonnamment, la suppression d'une image montée ne pose pas de problème, le fichier disparaît quand on fait un ls, mais subsiste en fait jusqu'au démontage.

Conclusion

Le projet est en ligne: https://github.com/CEA-LIST/scratch_manager
On ne va pas se mentir, c'est encore expérimental donc attention à votre hamster.

Je suis preneur de retours et de signalements de bugs bien sûr.

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Création d'une affiche pour l'association

by Jeffd from AFPy discuss

Bonjour

Comme proposé ce soir à la réunion mensuelle du comité directeur, il serait sympathique et utile d’avoir une petite affiche (A4) pour présenter l’association. On pourrait l’afficher lors d’événements externes (JDLL à Lyon, FOSDEM à Brussels …) ou la laisser pour des club informatiques d’écoles, dans des fablab-hacklab, donc plus viser des personnes étudiantes ou novices/curieuses.

On pourrait indiquer

  • les outils sociaux mis à disposition (discuss, discord, irc)
  • le projet d’apprentissage et perfectionnement Hackinscience
  • l’annuaire d’offre d’emploi
  • le Gitea pour l’hébergement
  • le planet pour l’actualité (si il existe encore)
  • et la PyconFR

Donc ça serait une liste de liens, je sais pas quel design sympa on pourrait lui donner.
On pourrait aussi mettre un QR-Code en plus du lien (le lien textuel reste indispensable pour les gens avec un ordinateur).

Voila si jamais vous avez des idées de style d’affiche, ou de contenu à ajouter, n’hésitez pas

Et je notifie l’équipe de communication: @Melcore @Merwyn (si je ne me trompe pas)

5 messages - 4 participant(e)s

Lire le sujet en entier

Lire la suite…

Pytest : simuler une connexion Mastodon ou Yunohost

by fipaddict from AFPy discuss

Bonsoir,
Je souhaite tester, avec #pytest, des fonctions/méthodes d’un programme #python qui se connecte à un service (Mastodon ou Yunohost par exemple). Peut-on simuler facilement la connexion à ce service pour se concentrer sur les tests internes à mes fonctions/méthodes ?
En simulant la connexion j’espère m’affranchir d’une connexion réelle et donc :

  • pas de risques de mettre le bazar sur un compte réel
  • intégration des tests pytest plus facile dans la CI (gitlab dans mon cas)

Je ne sais pas trop par où commencer ma recherche… donc je suis preneur de pistes.
Merci.

6 messages - 4 participant(e)s

Lire le sujet en entier

Lire la suite…

Excellent Python - vos bibliothèques python de haute qualité

by Melcore from AFPy discuss

Bonjour,

Cela fait des années que j’utilise des awesome-xxx pour trouver de bonnes bibliothèques à tester. Malheureusement, je n’en trouve jamais en français. Je tombe parfois sur des articles en français du style “TOP 10 des bibliothèques python”, qui sont souvent des redites, et qui sont aussi souvent traduit de l’anglais.

Donc je voulais amener ces awesome en francophonie, avec le concept assez mal nommé d’Excellent-Python.
J’ai pensé à quelques catégories, notamment avec les bibliothèques que je trouve pas mal.
J’accepte les contributions sous ce poste

Je pense que ce qui est utile d’avoir :

  • Le nom de la bibliothèque,
  • une courte description en français (1phrase d’accroche),
  • le lien vers la documentation officiel (si possible en français),
  • [opt] un lien vers un article/tuto qui montre son utilisation si existant et si pas déjà dans la docs.

Début de la liste :

Voilà je vais essayer de l’agrémenter un peu au fil de l’eau.

8 messages - 7 participant(e)s

Lire le sujet en entier

Lire la suite…

Discussion PyCon 2022

by pierre.imbaud from AFPy discuss

Hello, happy taxpayers!
Pycon cette année, grande nouvelle! On est restés combien de temps sans?
Mais je ne vois nulle part de discussion sur les confs, ni sur les sprints: ni sur le site pycon.fr, ni dans ce forum. ça se discute “en privé”, entre membres du CA et auteurs de propositions de conf?
Ou j’ai raté quelque chose?

5 messages - 4 participant(e)s

Lire le sujet en entier

Lire la suite…

Un solution pour faire du parallélisme par processus ?

by awecx from AFPy discuss

Bonjour, je suis à la recherche d’un module Python (ou une solution facilement pilotable par du code Python) pour implémenter une “grille” de calcul qui lance et gère des sous-processus pour exécuter des routines.

J’ai besoin de :

  • lancer des sous-processus qui exécutent un module Python ;
  • pouvoir leur envoyer des messages, même sur une machine distante (à la mode multiprocessing.Manager). Je recherche plus qu’un pool de processus, j’ai besoin de lancer des exécuteurs qui acceptent des tâches les unes après les autres sans être tués entre deux tâches (sauf si ladite tâche prend trop de temps ou rencontre un problème lors de son exécution) ;
  • gérer les cas d’erreurs : le code Python à exécuter est assez complexe, il va charger et exécuter des bibliothèques déjà compilées (qui sont susceptibles de planter) qui vont elle-mêmes ré-appeler du la C-API de Python (et même recharger la libpython dans certains cas). J’ai aussi besoin de récupérer les informations d’erreurs (pile d’appel Python ou vidage mémoire) en cas de problème et de décider de relancer ou non l’exécuteur.
  • pouvoir associer des ressources à chaque exécuteur (concrètement contrôler le nombre d’exécuteurs qui accèdent en même temps à un périphérique) ;
  • et bien entendu journaliser correctement le tout.

Idéalement j’aimerais aussi:

  • une solution pensée avec le paradigme de fils d’exécution plutôt que coroutines (c.-à-d. philosophie threading plutôt que concurrent.futures) ;
  • pouvoir partager de mémoire vive entre les exécuteurs (comme multiprocessing.shared_memory).

Toutes ces fonctionnalités sont couvertes par le module multiprocessing.
Il marche à merveille mais j’ai le sentiment de faire un peu trop de choses un peu trop bas-niveau à la main : lancer des processus, ouvrir des tubes de communication, envoyer-récupérer des signaux d’interruption, gérer les plantages du code fonctionnel etc.

Avez-vous une alternative à conseiller ?
J’ai regardé du côté de loky mais ça ne me semble pas assez puissant (notamment sur la gestion d’erreurs).

Merci.

4 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

Une solution pour faire du parallélisme par processus ?

by awecx from AFPy discuss

Bonjour, je suis à la recherche d’un module Python (ou une solution facilement pilotable par du code Python) pour implémenter une “grille” de calcul qui lance et gère des sous-processus pour exécuter des routines.

J’ai besoin de :

  • lancer des sous-processus qui exécutent un module Python ;
  • pouvoir leur envoyer des messages, même sur une machine distante (à la mode multiprocessing.Manager). Je recherche plus qu’un pool de processus, j’ai besoin de lancer des exécuteurs qui acceptent des tâches les unes après les autres sans être tués entre deux tâches (sauf si ladite tâche prend trop de temps ou rencontre un problème lors de son exécution) ;
  • gérer les cas d’erreurs : le code Python à exécuter est assez complexe, il va charger et exécuter des bibliothèques déjà compilées (qui sont susceptibles de planter) qui vont elle-mêmes ré-appeler du la C-API de Python (et même recharger la libpython dans certains cas). J’ai aussi besoin de récupérer les informations d’erreurs (pile d’appel Python ou vidage mémoire) en cas de problème et de décider de relancer ou non l’exécuteur.
  • pouvoir associer des ressources à chaque exécuteur (concrètement contrôler le nombre d’exécuteurs qui accèdent en même temps à un périphérique) ;
  • et bien entendu journaliser correctement le tout.

Idéalement j’aimerais aussi:

  • une solution pensée avec le paradigme de fils d’exécution plutôt que coroutines (c.-à-d. philosophie threading plutôt que concurrent.futures) ;
  • pouvoir partager de mémoire vive entre les exécuteurs (comme multiprocessing.shared_memory).

Toutes ces fonctionnalités sont couvertes par le module multiprocessing.
Il marche à merveille mais j’ai le sentiment de faire un peu trop de choses un peu trop bas-niveau à la main : lancer des processus, ouvrir des tubes de communication, envoyer-récupérer des signaux d’interruption, gérer les plantages du code fonctionnel etc.

Avez-vous une alternative à conseiller ?
J’ai regardé du côté de loky mais ça ne me semble pas assez puissant (notamment sur la gestion d’erreurs).

Merci.

4 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

Mécénat de compétences Python

by Benjamin from AFPy discuss

Bonjour à tous !

Je me présente, Benjamin Rassat, fondateur de Kolabee !

Je voulais savoir si vous connaissiez des projets digitaux autour du Python portée par des associations reconnues d’intérêt général.

En tant que Kolabee, nous mettons à disposition des compétences tech au profit d’associations (via un réseau d’entreprise de services du numérique) !

Auriez-vous des contacts ou des personnes qui peuvent être intéressés ?

Merci à tous :slight_smile:

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Et vous, vos environnement virtuels, vous les créez où ?

by fipaddict from AFPy discuss

Question pas importante du tout. Encore que…

Quelle est la meilleur solution pour créer les virtualenv ?

  • Créer un un virtualenv venv a la racine de chaque projet.
  • Créer un virtualenv du même nom que le projet dans un répertoire les regroupant tous, par exemple ~/virtualenv/.

J’ai du mail à cerner quels peuvent être les inconvénients / avantages de ces différentes options. Vos retours d’expérience m’intéressent.

15 messages - 9 participant(e)s

Lire le sujet en entier

Lire la suite…

[Fulle Remote] Développeur Back End Python

by Michelle from AFPy discuss

Bonjour la Communauté,
Je recherche pour Absys un(e) Développeur(euse) Back End Python passionné.
Bac +3 mini en développement informatique et expérience de 2 ans mini.
Notre proposition :

  • des projets qui font chauffer les neurones
  • en full télétravail ou alternance avec présentiel
  • 35h en 5 jours ou 4,5 ou …
  • salaire entre 30 et 38 K€ + accord d’intéressement + titres restaurant
  • formation en interne au sein de l’équipe et en externe par des pros de chez pros + participation à Europython et autres grands messe de communauté de dev.
    Bref, une PME différente : une ambiance sereine, du temps pour mener à bien les projets, de la solidarité entre dev, un projet RSE de forêt nourrissière …
    Tu veux plus d’infos ou candidater, c’est par ici Dev Info Back End ((H/F)
    A+
    Michelle

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Cas d'usage pour des tests fonctionnels avancés

by Bearstech from Bearstech

Quel développeur ou administrateur système n'a pas connu un moment où un client appelle et explique que son application en ligne ne fonctionne pas correctement, alors que quand vous vous y rendez, tout fonctionne bien ? Vous constatez que les pages répondent correctement, dans un délai acceptable, que le serveur n'est pas surchargé, mais vous remarquez dans l'historique que le code a été changé récemment.
Vous vous rendez sur la page qui charge la fonctionnalité qui, au dire du client, ne fonctionne pas correctement: il s'agit d'un formulaire d'authentification (mais pourtant vous avez essayé, et vous avez réussi à vous authentifier). Vous savez qu'un essai n'est pas un test, qu'un test effectue des mesures qu'avec votre essai vous ne pouvez pas réaliser, autrement qu'avec vos yeux et le débogueur du navigateur.
Dans le cas de notre application, il faut savoir qu'elle tournait en production dans un environnement "haute disponibilité", c’est-à-dire que le serveur en front est redondé sur une autre machine, et qu'un équilibreur de charge s'occupe de la répartition du trafic. Nous avions remarqué qu'une portion de code avait été modifiée, et en y regardant de plus près, ce code contenait un bug qui n'était présent que sur l'un des frontaux. Ainsi, parfois l'erreur se produisait, et parfois non.
Les tests de bout en bout (E2E tests) seraient parvenus à déceler l'erreur: dans le cas d'une architecture haute dispo, les 2 frontaux doivent être testés indépendamment l'un de l'autre. Les tests ne doivent pas passer par le loadbalancer, mais par les urls des frontaux directement. Pour un humain, c'est une tâche rébarbative que de jouer un document de recette sur chacun des frontaux, mais pas pour un script.
Et c'est encore mieux si ce script est lancé automatiquement, idéalement après chaque commit qui a un impact sur le fonctionnement de l'application.
Les tests fonctionnels permettent de tester toute la pile système, et il vaut donc mieux les lancer dans un environnement qui reproduit la production (le staging) mais aussi en production (utile dans le cas évoqué dans cet artice).
Il existe de nombreux outils bien connus tels que Selenium pour automatiser des tests (lire notre article sur les tests avec browserless), mais pour cet exemple, nous allons prendre 2 autres librairies Puppeteer et Playwright (qui a le vent en poupe et semble prendre la suite de Puppeteer).
Ces frameworks de tests fonctionnels permettent de tester le rendu d'une page web dans des conditions réelles, proches de celles d'un utlisateur. Ceci permet de contrôler que des éléments sont correctement affichés, de cliquer sur un lien ou un bouton, voir même dans une zone de l'écran ou sur un pixel précis. Cela permet égualement de remplir un formulaire, le poster ou encore de remplir le panier d'un site ecommerce. Ces outils permettent d'analyser le rendu de la page web tant coté backend (serveur) que frontend (navigateur). Il est ainsi tout a fait possible de tester aussi bien des applications PHP/Python/Ruby/Node que des applications Javascript utilisant des frameworks tels que React et VueJs, pour ne citer qu'eux.
Pour notre cas d'usage, les tests doivent s'exécuter dans le cadre d'une chaîne d'intégration continue (CI), mise en place sur runner Gitlab qui instancie un shell. Nous aurons besoin de Docker afin de construire l'image de l'instance NodeJS qui va éxecuter Puppeteer ou Playwright.
Dans les 2 cas, notre CI va jouer un scénario écrit en Javascript, orchestré par la librairie Jest vers un environnement de staging. Les tests fonctionnels doivent être bloquants afin que la CI s'arrête en cas d'erreur, avant de déployer l'application en production.
Puppeteer:
L'écriture du test avec Puppeteer prévoit l'utilisation d'un navigateur headless: nous allons utiliser l'image officielle Docker de Browserless.
Le scénario est simple, nous allons créer le fichier browser.test.js et écrire le test qui vérifie que dans la page du site https://bearstech.com, on trouve bien le mot "Bearstech":
describe("TESTING", () => {
beforeAll(async () => {
if (!process.env.URL) {
throw "ENV key URL is missing";
}

const url = process.env.URL.startsWith("https://")
? process.env.URL
: `https://${process.env.URL}`;

await page.goto(url);
});

it('should display "Bearstech" text on page', async () => {
await expect(page).toMatch("Bearstech");
});
});

Ensuite, pour créer l'image qui va instancier Puppeteer, nous aurons besoin de l'installer (avec Jest) à partir du package.json:
{
"name": "functionnal-tests",
"version": "1.0.0",
"license": "MIT",
"scripts": {
"test": "jest"
},
"devDependencies": {
"jest": "^27.5.1",
"jest-html-reporter": "^3.4.2",
"jest-puppeteer": "^6.1.0",
"puppeteer": "^13.5.1"
}
}

Au même endroit, il nous faudra aussi:

le fichier jest-puppeteer.config.js qui sert à définir les paramètres de connexion au navigateur headless de Browserless
le fichier jest.config.js

Vous mettez ces 4 fichiers dans un répertoire "tests". Ensuite, il vous reste à écrire le Dockerfile qui doit charger une image NodeJS et copier notre dossier "tests" dans l'image. La commande à ajouter dans le Dockerfile est celle qui sera lancée par le conteneur pour exécuter le scénario: CMD ["yarn", "test"]
Pour plus de détail sur la réalisation de ce test, rendez-vous sur la documentation de notre Workflow DevOps
Playwright
C'est un nouveau framework dédié aux tests fonctionnels, maintenu par Microsoft, et qui prend en charge par défaut 3 navigateurs headless: Chromium, Firefox, et WebKit ainsi que plusieurs langages pour écrire les tests: python, node, java et .NET. Playwright propose ses propre images Docker officielles, mais comme chez Bearstech on aime bien comprendre ce que l'on fait, il nous semble plus efficace d'en créer une qui installe juste ce qu'il nous faut.
Jest a sorti un package encore en développement pour piloter playwright. Bien qu'il soit recommandé d'utiliser le "Playwright test-runner" depuis la page github du projet, on prend le risque d'utiliser Jest. Mais pas moyen d'utiliser un autre navigateur headless que ceux qui sont embarqués dans le framework. Les navigateurs sont patchés pour, d'après Playwright, mieux les piloter (ah Microsoft qui adore enfermer ses utilisateurs ...)
Notre scénario sera similaire au précédent, en ajoutant un test sur le click d'un bouton (il vaut mieux préciser ici un timeout à Jest):

[x] example.test.js

// Needs to be higher than the default Playwright timeout
jest.setTimeout(40 * 1000)

describe("Bearstech.com", () => {
it("should have the text like 'Infogérance' in the h1", async () => {
const url = process.env.URL;
await page.goto(url);
await expect(page).toHaveText("h1", "Infogérance")
})
it("should navigate to contact once you click on 'lancer votre projet'", async () => {
const elements = await page.$$('a.button');
await elements[0].click();
expect(page.url()).toMatch(/contact/)
})
})

Les fichiers de configurations sont les suivants:

[x] jest-playwright.config.jsmodule.exports = {
browsers: ["chromium"],
exitOnPageError: false, // GitHub currently throws errors
launchOptions: {
headless: true
}
}


[x] jest.config.js
module.exports = {
verbose: true,
preset: 'jest-playwright-preset'
}


[x] package.json
{
"name": "jest-playwright-example",
"version": "1.0.0",
"license": "MIT",
"scripts": {
"test": "jest"
},
"devDependencies": {
"jest": "^27.5.1",
"jest-circus": "^27.0.0",
"jest-environment-node": "^27.0.0",
"jest-runner": "^27.0.0",
"jest-playwright-preset": "^1.7.2",
"playwright": "^1.22.2"
},
"dependencies": {}
}

Ces 4 fichiers doivent être placés dans un répertoire "tests".


Reste ensuite à écrire notre Dockerfile NodeJS, qui doit procéder à l'installation de Playwright et de Jest, puis indiquer au conteneur quelle commande exécuter à son instanciation:
FROM bearstech/node-dev:16

RUN mkdir /tests
COPY tests/ /tests/
WORKDIR /tests

RUN npm install jest jest-playwright-preset playwright-chromium
RUN npx playwright install
RUN npx playwright install-deps

CMD ["npm", "run", "test"]

Attention, le build est assez long (l'image a une taille de 2Go au final) à cause du navigateur headless.
Au final, il ne reste plus qu'à builder puis à lancer le conteneur:
docker run --rm -it -e URL="https://bearstech.com" --workdir /tests testplaywright:latest

Conclusion
Les tests fonctionnels peuvent vous sauver la mise et vous faire gagner du temps en prouvant la stabilité et en assurant la non régression d'une application. Pour les projets en cours de développement ou les projets matures, les tests font partie du cycle d'exploitation d'une application. Il faut pouvoir se doter d'outils qui permettent de prouver et tracer l'état dans lequel elle se trouve à chaque instant.
Chez Bearstech, nous administrons des applications depuis 15 ans, et nous avons mis au point un workflow qui vous permettra d'intégrer vos tests facilement, et accompagnés d'experts qui vous guideront dans la mise en place de ces outils. N'hésitez pas à revenir vers nous pour obtenir un avis d'expert sur la performance de vos applications, l'infogérance de vos serveurs, ou juste pour de l'aide pour la réalisation de ce guide :smile:

Lire la suite…

mwmbl: Un moteur de recherche implémenté en Python

by mdk from AFPy discuss

Je ne connais pas encore très bien le projet, je voulais juste vous le montrer, là, voilà :

4 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Python 3.11.1, 3.10.9, 3.9.16, 3.8.16, 3.7.16, et 3.12.0 alpha 3 publiés

by mdk from AFPy discuss

Pour les versions 3.7, 3.8, et 3.9 ce sont des patch de sécurité.

Source:

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

[Full Remote] Développeur Python orienté data

by Wats0ns from AFPy discuss

Hello,

SEOQuantum, l’entreprise dans laquelle je bosse, cherche un développeur Python orienté data/nlp ou dev logiciel. Au moins 2ans d’expérience, autonome, et à l’aise en python.

Lien vers l’offre:

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

[gitea] Affichage les emails sur les pages profil et sur explore/users

by mdk from AFPy discuss

Suite du sujet Auto-hébergement git :

Pour le moment sur Explore - Le Gitea de l'AFPy et sur les profils des utilisateurs gitea « leak » nos adresse email.

D’un côté c’est mal.

De l’autre nos emails leakent déjà un peu partout :

  • Dans nos commits
  • Dans nos clées GPG (essaye curl https://git.afpy.org/mdk.gpg | gpg --import-options show-only --import - | grep @)

J’ai l’impresion que c’est configurable.

Quelqu’un pense qu’on devrait utiliser SHOW_USER_EMAIL = false ?

3 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Développeur(euse) backend Django/Python H/F

by Justinegg from AFPy discuss

À propos de TKT

TKT est une jeune agence digitale, experte en conception et développement d’applications web, mobile et software avec des enjeux métier complexes.

Nous accompagnons nos clients en France et à l’international, des starts-up aux grandes entreprises, pour créer leurs projets numériques sur mesure (Orange, Spie Batignolles, Allianz Trade, …)

Notre équipe trouve son identité dans une combinaison équilibrée de profils mixtes et cosmopolites, tous basés dans nos bureaux à Paris.

Le poste

Pour un de nos clients, éditeur de logiciel, nous recherchons un(e) développeur(euse) Python (framework Django), capable d’appréhender et de développer des projets de grande envergure sur du long terme.

Le client est basé à Amiens, aussi quelques déplacements ( pris en charge par TKT) seront à prévoir en début de mission, afin de se familiariser avec l’équipe et le produit.

Vous participerez au développement d’un ERP et pourrez vous former ou parfaire vos connaissances sur les dernières technologies.

Nous cherchons des profils avec :

  • 4-5 années d’expérience en développement web et/ou mobile et/ou software
  • Une forte envie de progresser et d’apprendre
  • Un besoin de partager et de faire progresser les autres
  • Une bonne appréciation de l’écosystème d’un projet technique contemporain (backend, architecture des données, protocoles, frameworks, expérience utilisateur…)

Rémunération: 45-55k ( selon profil )

2 jours de TT/ semaine

Profil recherché

Nous recherchons des développeurs(euses) web backend Python/Django avec quelques années d’expérience, ayant l’envie de travailler en équipe et de partager son expérience et son savoir.

À connaître :

  • Python / Django
  • Mécanismes du web et culture générale technique

Connaissance appréciée :

  • Django rest framework
  • ElasticSearch
  • AWS et techniques devops ( par exemple Terraform)

La connaissance d’un framework frontend comme Angular 2 ou React, ou une envie d’apprendre sur ce type de framework, serait un plus.

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

La (très grande) confusion du débutant

by nesdnuma from AFPy discuss

Bonjour,

J’ai testé un peu de codage en Python avec PyCharms et un tutoriel en ligne mais au-delà du langage lui-même, je suis totalement dans la confusion sur le choix d’une configuration Windows adéquate pour le développement. Je ne saisis pas bien la différence entre environnement, environnement virtuel, IDE, gestionnaire de paquets et surtout comment tous ces éléments s’articulent. Je vois passer les noms Conda, Anadonca, Miniconda, VSStudio, PyCharms, notebooks, et au plus je lis à ce propos au plus c’est la confusion, d’autant que pas mal d’articles sont implicites sur l’OS utilisé.

Tout ce bazar avant même d’avoir écrit la moindre ligne de code me décourage.

Je précise que je ne suis absolument pas professionnel du développement. J’ai quelques bases en C, Javascript et j’ai fait un peu de Python au travers du logiciel de modélisation 3D CadQuery. Je suis maintenant intéressé par Python essentiellement afin de pouvoir utiliser des outils d’intelligence artificielle dans le domaine du son mais je sais à peine utiliser git.

Avez-vous des conseils à me donner afin d’avoir un environnement de développement stable, ouvert et évolutif, et dont je puisse comprendre comment il est organisé?

Merci d’avance.

11 messages - 7 participant(e)s

Lire le sujet en entier

Lire la suite…

Les origines de Python

by Herdawyn from AFPy discuss

Article de Lambert Meertens sur les origines de python:

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Ropy ... une aventure à coder en Python sur Mars.

by phroy from AFPy discuss

Bonjour à tous,

J’ai créé un serious game qui permet la découverte de la programmation procédurale et du langage Python. Je suis enseignant et je l’utilise avec mes élèves (lycée).

Avec un microcontrôleur (micro:bit,…) via le port série, Ropy peut devenir le jumeau numérique d’un robot réel.

Le projet est open source et utilise l’environnement open source Blender + UPBGE + Python.

Philippe Roy

2 messages - 1 participant(e)

Lire le sujet en entier

Lire la suite…

créer un deb à partir d'un programme python

by fabien from AFPy discuss

Bonjour,
Je souhaite trouver un exemple (qui marche) de création d’un deb à partir d’un programme python3 sur une debian/ubuntu récente.
J’ai essayé déjà plusieurs tutoriels, mais même pour un simple hello world aucun n’a fonctionné.
Je ne souhaite pas pour l’instant étudier la doc de debian sur la création d’un deb, je cherche juste, un exemple minimal (avec une lib importée) ou le code source, de la construction du deb que je pourrais m’approprier comme un singe savant.
Merci

3 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Conférence & Atelier PyConFr - du 16 au 19 février 2023 à Bordeaux

by Melcore,Ysabeau,Xavier Teyssier,palm123 from Linuxfr.org

Quatre journées consacrées au langage Python, la PyConFr revient après deux ans d’absence pour proposer des Sprints, où l’on se retrouve à l’Université de Bordeaux pour coder ensemble le jeudi et vendredi, et des conférences le week-end afin de découvrir les expériences de chacun avec le langage Python.

L’accès est gratuit, ouvert à toutes et tous, cependant l’inscription préalable est nécessaire.

PyConFr 2023 du 16 au 19 février à Bordeaux

Conférences et ateliers (samedi et dimanche)

Durant le week-end, vous aurez l’occasion de participer à des présentations sur des sujets variés, autour du langage Python, de ses usages, des bonnes pratiques, des retours d’expériences, des partages d’idées…

Codage participatif « Sprints » (jeudi et vendredi)

Les développeurs et développeuses de différents projets open source se rejoignent pour coder ensemble. Chaque personne est la bienvenue pour contribuer, et nous cherchons également à accompagner les débutant·e·s.

Restauration sur place

Des food trucks seront à disposition.

Proposer une conférence ou un atelier

Même un débutant ou une débutante a quelque chose à raconter, alors venez proposer votre conférence sur le site de l’appel à participation.

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Communication à l'AFPy

by Melcore from AFPy discuss

Ce wiki de communication, permet de rappeler tous les endroits où l’asso peut communiquer. Vous pouvez ajouter si vous pensez à des endroits auquel on a pas encore pensé.

On peut aussi aller communiquer pour la PyConFr sur

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

iterator et barre de progression

by WrathOfThePixel from Linuxfr.org

Salut !

Petite question rapide aux experts du langage, pour essayer de faire du joli code en Python.

J'ai cette ligne dans mon code

self.samples = [next(self.spect) for _ in range(sample_rate * 30)]

qui peut prendre plusieurs minutes pour fournir un résultat. J'aimerais afficher une petite barre de progression dans la console pour indiquer que le script est pas planté.

La question est de savoir si c'est possible en laissant la ligne en l'état (et si oui comment), ou si je vais devoir forcément décomposer dans une boucle for.

D'avance merci beaucoup =)

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Remarque sur le texte "PyconFR 2023/Diversité"

by ThierryP from AFPy discuss

Bonjour,
j’espère ne pas déclencher une polémique stérile, mais il me semble que la formulation de la phrase

Pour améliorer la diversité, l’AFPy propose d’aider les femmes à trouver un sujet, à rédiger la proposition de conférence, à rédiger le support de conférence, puis à répéter. Contactez diversite@afpy.org si vous êtes intéressées.

est maladroite, faisant passer l’exact inverse du message qu’elle souhaite faire passer.

Pourquoi ne pas mettre simplement

L’AFPy, reconnaissant la capacité de tous les profils à contribuer à son projet, encourage chacune et chacun à proposer une conférence ou un atelier. Pour plus de renseignements, contactez diversite@afpy.org.

ou quelque chose dans le genre.

Quant à la phrase

Le temps des volontaires étant limité, nous ne pourrons aider qu’un nombre limité de candidates.

je doute fortement de son utilité…

9 messages - 7 participant(e)s

Lire le sujet en entier

Lire la suite…

Projets hébergés sur Gitea Afpy

by ThierryP from AFPy discuss

Bonjour et félicitation pour ce boulot!
Je n’ai malheureusement pas trop de temps à consacrer à la traduction ces derniers temps :frowning:
Ma question porte sur l’usage de cette nouvelle forge : est-elle destinée à héberger uniquement les projets de l’Afpy et de ses membre ou est-elle ouverte à tout projet aussi petit soit-il (pour peu qu’il soit écrit en python bien sûr) ?

Merci!

5 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Inscription à la PyConFr23

by Melcore from AFPy discuss

Les inscriptions pour la PyConFr23 sont maintenant ouvertes :unlock: !

Vous pouvez d’ores et déjà indiquez votre présence à la PyConFR23, qui aura lieu à Bordeaux du 16 au 19 février 2023.
L’inscription est gratuite !

La soirée dinatoire du samedi soir est proposé à 30€ et le t-shirt PyConFr23 à 10€.

Organisation de l’évènement

Le jeudi et vendredi, place aux Sprints

Les développeurs :man_technologist: et développeuses :woman_technologist: de différents projets open source se rejoignent pour coder ensemble. Chaque personne est la bienvenue pour contribuer, et nous cherchons également à accompagner les débutant·e·s :beginner: .

Durant le week-end c’est Conférences

Vous aurez l’occasion de participer à des présentations sur des sujets variés, autour du langage Python :snake:, de ses usages, des bonnes pratiques, des retours d’expériences, des partages d’idées…

Vous voulez proposer une conférence, sprint ou juste nous aider à l’organisation, inscrivez-vous sur l’ appel à participation.

On vous attend nombreu·se·x !

PyConFR 23

2023-02-16 09:00 (Europe/Paris) → 2023-02-19 17:00 (Europe/Paris)

7 messages - 4 participant(e)s

Lire le sujet en entier

Lire la suite…

os.system() : trop lent

by PETERPAN31 from AFPy discuss

Bonsoir,

Dessous le code qui fonctionne à peu près si on affiche l’item actif de tout menu, mais si je fais vocaliser le label ( avec ‘espeak’) alors je constate une mise à jour très ralentie du nouvel item focussé (après appui sur une flèche).

Si vous n’avez donc pas ‘espeak’ installé, vous ne devriez pas pouvoir m’aider.

Mais en général, l’appel à une routine du système avec ‘os.system()’ est-il très lent ?
Existe-t-il une alternative ?

#!/usr/bin/python3.8

"""
Définition d'une fenêtre comportant une barre de menus dont tous les items sont vocalisés
"""

from tkinter import *
import os

# Dictionnaire pour la définition des menus
items = {
'Fichier':
[
['Nouveau','cmd1'],
['Ouvrir','cmd2'],
['Imprimer','cmd3'],
['Quitter','cmd4']
],
'Edition':
[
['Copier','cmd1'],
['Coller','cmd2'],
['Couper','cmd3']
]
}

class MyWindow(Tk):
  def __init__(self,items,font,*args,**kwargs):
    Tk.__init__(self,*args,**kwargs)
    self.items = items
    self.geometry('400x200')
    self.title('ACIAH')
    self.font = font
# Dictionnaire recevant les paires "nom du menu" / instance du menu associé
    self.menus = {}
    self.create_menu_bar(self.font)
    self.config(menu=self.menu_bar)  
# Méthode qui vocalise les items (en chantier !)
  def menu_select(self, event):
    label = self.eval(f'{event.widget} entrycget active -label')
#    print(label)
    os.system(f'/usr/bin/espeak {label}')
  def create_menu_bar(self,font):
    self.menu_bar = Menu(self,activebackground='Black',activeforeground='White',font=font,takefocus=1)
    for k in self.items:
      self.menus[k] = Menu(self.menu_bar, tearoff=0,activebackground='Black',activeforeground='White',font=font)
      for opt in self.items[k]:
        self.menus[k].add_command(label=opt[0],command=self.event_generate('<<MenuSelect>>'))
      self.menu_bar.add_cascade(label=k,menu=self.menus[k])
      self.menu_bar.bind_class('Menu','<<MenuSelect>>', lambda e: self.menu_select(e))

if __name__ == '__main__':
  window = MyWindow(items,('Arial',24,'bold'))
  window.mainloop()

Merci

pierre estrem

6 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Lancement de l'appel à participation pour la qui aura lieu à Bordeaux du 16 au 19 février.

Vous avez une idée de conférence, de sprint, d'atelier à organiser, ou vous souhaitez simplement aider à l'organisation ? Venez proposer vos idées sur cfp-2023.pycon.fr

Lire la suite…

Les 'state' de mes items ne passent jamais à 'active'

by PETERPAN31 from AFPy discuss

Bonsoir,

Dessous un code totalement en chantier qui devrait vocaliser les labels des items.

Dans une mouture simplifiée j’avais pu observer le passage de ‘normal’ à ‘active’ pour des items.
Note: contrairement à ce que semble indiquer la doc il ne s’agit pas de ‘NORMAL’ et ‘ACTIVE’ (notez les majuscules).

Pour mes premiers essais, je tente la chose avec un seul menu ‘Fichier’ et j’affiche les états (state) de ses items pour en voir passer un à ‘active’.
J’ai essayé différents évènements et ils demeurent tous ‘normal’…

J’ai un gros doute où placer le ‘bind’ et sur quoi le placer (ici je l’applique à chaque menu).

Un “pro” et patient saurait me “corriger” ?

#!/usr/bin/python3

"""
Définition d'une fenêtre comportant une barre de menus dont tous les items sont vocalisés
"""

from tkinter import *

# Dictionnaire pour la définition des menus
items = {
'Fichier':
[
['Nouveau','cmd1'],
['Ouvrir','cmd2'],
['Imprimer','cmd3'],
['Quitter','cmd4']
]
#'Edition':
#  [
#  ['Copier','cmd1'],
#  ['Coller','cmd2'],
# ['Couper','cmd3']
#  ]
}

class MyWindow(Tk):
  def __init__(self,items,font,*args,**kwargs):
    Tk.__init__(self,*args,**kwargs)
    self.items = items
    self.geometry('400x200')
    self.title('ACIAH')
    self.font = font
# Dictionnaire recevant les paires "nom du menu" / instance du menu associé
    self.menus = {}
    self.create_menu_bar(self.font)
    self.config(menu=self.menu_bar)
# Méthode qui vocalise les items (en chantier !)
  def speak(self,key):
    for i in [0,1,2,3]:
      print(self.menus[key].entrycget(i,'state'))
  def create_menu_bar(self,font):
    self.menu_bar = Menu(self,activebackground='Black',activeforeground='White',font=font,takefocus=1)
    for k in self.items:
      self.menus[k] = Menu(self.menu_bar, tearoff=0,activebackground='Black',activeforeground='White',font=font)
      for opt in self.items[k]:
        self.menus[k].add_command(label=opt[0],command=self.menus[k].quit())
      self.menu_bar.add_cascade(label=k,menu=self.menus[k])
      self.menus[k].bind('<Down>',lambda e: self.speak(k))

if __name__ == '__main__':
  window = MyWindow(items,('Arial',24,'bold'))
  window.mainloop()

Merci

pierre estrem

10 messages - 4 participant(e)s

Lire le sujet en entier

Lire la suite…

Journées du Logiciel Libre 2023 à Lyon

by MounaSb from AFPy discuss

Hello,

Je me permets de vous faire suivre l’actu des Journées du Logiciel Libre.
La prochaine édition aura lieu les 1er et 2 avril 2023 à Lyon, et le thème sera Cultures en partage.

Vous souhaitez :

À bientôt :wave:

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Archive photos de l'AFPy

by mdk from AFPy discuss

Parce qu’on a pas tous Facebook™ (je dis ça, j’ignore si l’herbe est plus verte chez Facebook pour archiver des photos, je n’y ai pas de compte …).

Je me suis dit que ça pourrait être sympa de faire une grosse archive commune des photos des différents évènements de l’AFPy (ateliers, AFPyro, PyConFr, …), alors je l’ai fait : https://photos.afpy.org

J’ai crawlé un peu le site à l’oiseau, Flickr, et mes archives personnelles pour construire ça, mais je pense que ça manque de … vos photos !

Alors allez-y ! Envoyez-moi vos photos ! Non pas en réponse à ce fil, ni sur le photo.afpy.org (qui est statique) utilisez un outil adapté et envoyez-moi les liens (soit par e-mail, soit en message privé).

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Déplacer python-docs-fr sur git.afpy.org ?

by mdk from AFPy discuss

La conversation à démarré ici :

Mais j’aimerai les retours de ceux qui n’ont pas de compte chez Microsoft™ alors je lance la discussion ici aussi.

Explication №1 : J’ai (presque) toujours vu le repo python-docs-fr pas juste comme un outil pour traduire la doc, mais comme un endroit où tous les francophones pouvaient venir apprendre à contribuer à un logiciel libre, sans le stress de casser quelque chose. Tous les membres du repo me semblent partager cette même idée : ils ont toujours été bienveillants, didactiques, patients, accueillants envers les nouveaux contributeurs (merci à eux :heart::heart::heart:), relisant et peaufinant le CONTRIBUTING.rst sans relâche, améliorant le Makefile pour réduire au minimum les surprises pour les nouveaux arrivants, etc…

Malheureusement on enseigne l’utilisation d’un logiciel close-source.

Mais maintenant on peut faire mieux : on peut bouger ce repo sur https://git.afpy.org !

Je pose ici un petit sondage, mais n’hésitez pas à répondre aussi.

Attention « On duplique le repo » c’est pas si simple, cf. la discussion sur Github.

Cliquez pour voir le sondage.

8 messages - 4 participant(e)s

Lire le sujet en entier

Lire la suite…

cTypes + Rust = approfondir une relation d'amour et d'eau (fraîche)

by JulienG from Linuxfr.org

Sommaire

nb : dans cet article, je n'évoque que l'interpréteur officiel, CPython (3.4+) et l'usage de modules standard à l'interpréteur (donc pas d'exemples de cffi, quel qu’en soient les qualités par ailleurs !).

Introduction

Ce week-end, j'ai fait une énième recherche sur une bricole pour la communication Python et Rust via cTypes. Sur ces "détails" qu'on oublie aussi vite qu'on se casse les dents dessus lorsqu'on ne pratique pas.

Comme ma mémoire est encore plus limitée que le nombre d'onglets et de marques-page sur Firefox, je me suis dit que la prochaine fois autant tomber directement sur un article francophone qui fait un résumé global. Et que ça peut en aider d'autres.

Bien sûr il existe des bibliothèques toutes prêtes pour faciliter la communication entre ces deux mondes :

  • soit pour interagir avec l'interpréteur Python,
  • soit "en ramenant" Python au sein d'un applicatif.

Aujourd'hui la bibliothèque Pyo3 est probablement la plus aboutie et la mieux supportée ; j'aime bien en faire la pub car je la trouve géniale - et par extension à deux langages que j'apprécie.

Lorsque j'évoque la possibilité de "ramener" Python, c'est avoir non seulement la possibilité d'évaluer une expression mais aussi l'ensemble d'un script. Comme pour Lua sur les consoles de jeux vidéos, cela ouvre des possibilités infinies (même si parfois complexes) pour étendre votre applicatif actuel à de nouvelles sources de données ou possibilité de programmation.

Bref : c'est bien, c'est bon, mangez-en. [fin de la minute pub]

Du reste si cette possibilité semble la plus intéressante, elle s'avère complexe à mettre en œuvre si votre interpréteur Python est dans un ensemble plus large, avec beaucoup de code C ou C++ par exemple, et qu'il s'agit de rentrer dans les pas de versions précédentes ou du code partagé entre plusieurs applicatifs (dont tous ne seraient pas du Python) ; n'est-ce pas le principe des .so après tout ? La bascule de C/C++ à Rust pourrait déclencher des problématiques si vous restez sur le seul usage de Pyo3.

Mais rien n'est insurmontable, surtout pour le serpent : cTypes est votre amie.

Présente par défaut depuis les temps immémoriaux dans l'interpréteur standard, cette bibliothèque vous permet de consommer des .so (assez) facilement avec - c'est assez rare pour être souligné -, un respect strict du typage lors de l'appel de fonction. En effet, vous quittez alors le monde merveilleux (et lâche) de l'interprété, pour le terrible et cruel (et implacable) monde du C, où tout doit être connu (si possible à l'avance).

Voici un pense-bête rédigé pour s'en sortir.

Préparer l'environnement

Dans votre console préférée, créez un projet de bibliothèque :

julien@julien-Vostro-7580:~/Developpement/$ cargo new --lib rust-python
Created library `rust-python` package

Puis éditez comme suit votre fichier Cargo.toml :

[package]
name = "rust-python"
version = "0.1.0"
edition = "2021"

[lib]
name         = "rust_python"
crate-type   = ["cdylib"]

[dependencies]

A la racine de votre projet, créez également le fichier test-ffi.py avec le contenu suivant :

#!/usr/bin/env python3

from ctypes import *

malib = cdll.LoadLibrary("target/release/librust_python.so")

A partir de cet instant, malib correspond à un objet permettant d'accéder au contenu de la bibliothèque. Lors d'un appel de fonction à celle-ci, vous pouvez indiquer les types de paramètres et du retour directement dans le code Python.

Par exemple le code suivant précise pour la fonction test_string les types attendus :

malib.test_string.argtypes = [c_char_p,] # arguments d'appel attendus, ici un seul 
malib.test_string.restype = c_char_p # type du retour 
resultat = malib.test_string( message.encode() ) # appel de la fonction partagée, avec la récupération du résultat 

Enfin ajoutez le nécessaire dans les sources Rust (lib.rs) :

use std::ffi::CStr;
use std::ffi::CString;
use std::os::raw::c_char;
use std::os::raw::c_int;

Notez que les chemins sont relatifs à votre compilation Rust :

  • target/debug pour cargo build ;
  • target/release pour cargo build --release.

A partir de là, vous pourrez ajouter les blocs de code les uns à la suite des autres et les tester avec :

  • cargo build && ./test-ffi.py (compilation plus rapide, message d'erreur plus complet mais moins efficace à l'usage)
  • cargo build --release && ./test-ffi.py (compilation moins rapide mais plus efficace à l'usage)

Morceaux choisis

nb : il existe déjà des tutoriaux sur les types simples, tels que les entiers. Je ne les mets pas directement en exemple ici. De même il y a de nombreux autres cas généraux que je l'indique pas ; cependant les exemples fournis ici me semble-t-il, permettent de s'en sortir !

Partie 1 - Les chaînes de caractères

Quelques ressources pour approfondir :

Côté Rust :

#[no_mangle]
pub unsafe extern "C" fn test_string(ptr_source: *mut c_char) -> *const c_char {
  // je récupère en argument un pointer vers un type 'c_char' 
  // je dois d'abord en faire un CStr et grâce à "to_string_lossy" 
  // toutes les valeurs non-conformes UTF-8, seront éliminées (remplacées précisément) 
  // puis j'assigne à 'v' le résultat (une chaîne de caractère) 
  let v = CStr::from_ptr( ptr_source )
    .to_string_lossy()
    .to_string(); 
  println!("[RUST] -( 1 )-> {:?}", ptr_source); 
  println!("[RUST] -( 2 )-> {:?}", v);
  // pour renvoyer ma chaîne, je dois modifier son type pour être conforme 
  // (par exemple : ajouter "\0" à la fin, car on perd la taille fixée en c_char) 
  // ainsi que d'obtenir le pointeur associée 
  let s = CString::new( v ).unwrap();
  let p = s.as_ptr();
  // au regard de Rust, 's' est ma chaîne c_char et 'p' est le pointeur 
  // si "je n'oublie pas" 's' avant de quitter la fonction, Rust va désallouer la mémoire
  // le pointeur 'p' renvoyé serait donc invalide 
  // 'std::mem::forget' nous permet de forcer cet "oubli de désallocation" lors de la compilation 
  std::mem::forget(s);
  p
}

Côté Python :

print( "--------------------" )
print( "--- partie 1 - chaînes de caractère seules (UTF8)" )
print( "--------------------" )

message = "&é\"'(-è_çà)"

print( "--- partie 1.1 - sans précision sur le type d'argument" ) 
malib.test_string.restype = c_char_p
resultat = malib.test_string(
  # n'ayant pas indiqué le type d'argument attendu, je dois faire une transformation 
  # moi-même. Attention cependant, il est toujours préférable d'indiquer le bon type 
  c_char_p( bytes( message, "utf-8" ) ) 
)

print( "--- partie 1.2 - avec précision sur le type d'argument" ) 
malib.test_string.argtypes = [c_char_p,] # ici la précision du type 
malib.test_string.restype = c_char_p
resultat = malib.test_string( message.encode() ) # par défaut, ".encode()" est en UTF-8

print( "[PYTHON] ===>", resultat.decode() )

Résultat :

julien@julien-Vostro-7580:~/Developpement/rust-python$ cargo build && ./test-ffi.py 
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
--------------------
--- partie 1 - chaînes de caractère seules (UTF8)
--------------------
--- partie 1.1 - sans précision sur le type d'argument
[RUST] -( 1 )-> 0x7f67723d3e90
[RUST] -( 2 )-> "&é\"'(-è_çà)"
--- partie 1.2 - avec précision sur le type d'argument
[RUST] -( 1 )-> 0x7f67723d3e90
[RUST] -( 2 )-> "&é\"'(-è_çà)"
[PYTHON] ===> &é"'(-è_çà)

Facile.

Partie 2 - Les structures

Côté Rust :

#[repr(C)]
#[derive(Debug)]
pub struct MonObjet {
  pub a: c_int
}

#[no_mangle]
pub unsafe extern "C" fn test_structure(mut monobj: MonObjet) {
  // du fait que l'aligment se fait sur le C, on peut directement récupérer l'objet 
  println!("[RUST] -(3)-> {:?}", monobj); 
  // et comme on l'a déclaré "mut(able)" alors on peut agir dessus ; voir ci-après (1)
  monobj.a += 1; 
  println!("[RUST] -(4)-> {:?}", monobj); 
}

#[no_mangle]
pub unsafe extern "C" fn test_structure_ref(ptr_monobj: *mut MonObjet) {
  // le format '&mut *' semble étrange mais est parfaitement valide. On déréférence d'abord le pointeur, puis on créé un emprunt (mutable) au format Rust pour agir dessus ; voir ci-après (2)
  let monobj = &mut *ptr_monobj; 
  println!("[RUST] -(3)-> {:?}", monobj); 
  monobj.a = 3; 
  println!("[RUST] -(4)-> {:?}", monobj); 
}

nb (1) : attention à la déclaration de l'objet en argument dans test_structure. Si mut n'était pas déclaré, il serait impossible d'agir sur l'objet, conformément aux règles de la Rouille…

error[E0594]: cannot assign to `monobj.a`, as `monobj` is not declared as mutable
  --> src/lib.rs:69:5
   |
67 | pub unsafe extern "C" fn test_structure(monobj: MonObjet) {
   |                                         ------ help: consider changing this to be mutable: `mut monobj`
68 |     println!("[RUST] -(3)-> {:?}", monobj); 
69 |     monobj.a += 1; 
   |     ^^^^^^^^^^^^^ cannot assign

For more information about this error, try `rustc --explain E0594`.
error: could not compile `analyse-terme` due to previous error

nb (2) : dans le cas que je présente, l'emprunt est nécessaire car la structure MonObjet n'implémente pas le trait de copie, comme le signale très bien le compilateur…

error[E0507]: cannot move out of `*ptr_monobj` which is behind a raw pointer
  --> src/lib.rs:75:22
   |
75 |     let mut monobj = *ptr_monobj; 
   |                      ^^^^^^^^^^^
   |                      |
   |                      move occurs because `*ptr_monobj` has type `MonObjet`, which does not implement the `Copy` trait
   |                      help: consider borrowing here: `&*ptr_monobj`

For more information about this error, try `rustc --explain E0507`.
error: could not compile `analyse-terme` due to previous error

Côté Python :

print( "--------------------" )
print( "--- partie 2 - structures et passage par référence" ) 
print( "--------------------" )

print( "--- partie 2.1 - envoi par valeur (l'objet initial n'est pas modifié)" ) 

# il s'agit d'une classe un peu particulière, qui prend l'héritage de "Structure" :
# Structure permet via un attribut lui-aussi particulier "_fields_", d'indiquer à cType 
# ce qui est nécessaire d'envoyer à la fonction C partagée 
class MyStruct(Structure): 
  _fields_ = [ 
    ("a", c_int)
  ] 
monobjet = MyStruct()
monobjet.a = 2
# monobjet.b = 3 --> vous pouvez essayer sans problème, mais l'attribut n'étant pas déclaré dans _fields_, le champ ne sera pas transmis 

# notez que je n'ai pas déclaré le type d'arguments attendus 
resultat = malib.test_structure(
  monobjet # j'envoi l'objet via un pointeur 
)
print( "[PYTHON] ===>", monobjet.a ) # pas de modification sur l'objet initial, a = 2 

print( "--- partie 2.2 - envoi par référence (l'objet initial est modifié)" ) 
resultat = malib.test_structure_ref(
  byref( monobjet ) # j'envoi une référence à l'objet via un pointeur 
)
print( "[PYTHON] ===>", monobjet.a ) # modification sur l'objet initial, a = 3 

Résultat :

julien@julien-Vostro-7580:~/Developpement/rust-python$ cargo build && ./test-ffi.py 
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s

(...)

--------------------
--- partie 2 - structures et passage par référence
--------------------
--- partie 2.1 - envoi par valeur
[RUST] -(3)-> MonObjet { a: 2 }
[RUST] -(4)-> MonObjet { a: 3 }
[PYTHON] ===> 2
--- partie 2.2 - envoi par référence (l'objet initial est modifié)
[RUST] -(3)-> MonObjet { a: 2 }
[RUST] -(4)-> MonObjet { a: 3 }
[PYTHON] ===> 3

Simple non ?

Partie 3 - Les tableaux

Le cas de transfert des tableaux est un peu plus délicat. Il n'est pas comparable à une chaîne de caractère. En effet une chaîne de caractères représente, comme son nom l'indique, un tableau contigu de caractères (peu importe leur taille individuelle). Cependant pour le tableau d'entiers par exemple, ce procédé ne fonctionne pas… car la valeur "0" est une valeur légitime.

Il faut donc passer deux éléments :

  • le tableau en lui-même, ici sous la forme d'un pointeur,
  • la taille réelle du tableau derrière le pointeur.

De la même façon, cela me permet d'introduire l'usage de Box au lieu de l'oubli par mem::forget() comme vu jusque là pour la gestion des pointeurs de Rust vers C.

Côté Rust :

#[repr(C)]
#[derive(Debug)]
pub struct ValeurRetour {
    pub a: c_int,
    pub contenu: Vec<c_int>
}

#[no_mangle]
#[allow(improper_ctypes_definitions)]
pub unsafe extern "C" fn test_array( nbre: c_int, ptr_tab: *mut [c_int] ) {
    let tab = &mut *ptr_tab; 
    println!("[RUST] -(5)-> {:?}", nbre);
    for i in 0..(nbre as usize) {
        println!("[RUST] -(6)-> [{:?}] {:?}", i, tab[i]);
    }
} 

#[no_mangle]
#[allow(improper_ctypes_definitions)]
pub unsafe extern "C" fn test_array_retour_simple( nbre: c_int, ptr_tab: *mut [c_int] ) -> *mut c_int {
    let tab = &mut *ptr_tab; 
    println!("[RUST] -(7)-> {:?}", nbre);
    let nbre = nbre as usize; // une version courte (mais sale) du casting : attention aux valeurs max admissibles par le système pour 'usize' dans un tel cas 
    for i in 0..nbre {
        println!("[RUST] -(8)-> [{:?}] {:?}", i, tab[i]);
        tab[i] += 1;
        println!("[RUST] -(8')-> [{:?}] {:?}", i, tab[i]);
    }
    let mut nouveau_vecteur: Vec<c_int> = vec![42; nbre+1]; 
    // pas propre mais fonctionnel 
    let p = nouveau_vecteur.as_mut_ptr();
    std::mem::forget(nouveau_vecteur);
    p 
} 

#[no_mangle]
pub unsafe extern "C" fn test_array_retour_complexe( nbre: c_int ) -> *mut ValeurRetour {
    // notre 'nbre' reçu depuis le monde Python via un c_int, devra changer pour être utilisé dans deux contexte différent 
    println!("[RUST] -(9)-> {:?}", nbre); 
    let nbre_c_int: c_int = (nbre+1).try_into().unwrap(); 
    let nbre_usize: usize = (nbre+1).try_into().unwrap(); 
    let vecteur_retour = Box::new( 
        ValeurRetour { 
            a: nbre_c_int, // ici un entier au format c_int 
            contenu: vec![42; nbre_usize] // ici un usize pour définir la taille finale du vecteur, même si ce dernier aurait pu être conçu "à la volée" en ajoutant progressivement des valeurs - ici c'est juste plus efficient 
        }
    ); 
    println!("[RUST] -(10)-> {:?}", vecteur_retour);
    // plus propre que 'mem::forget()' 
    Box::into_raw( vecteur_retour ) 
} 

Côté Python :

Peut-être une expression va vous choquer : (c_int * len(tab_valeurs))(*tab_valeurs). Elle est pourtant tout à fait correcte ! Une fois décomposée, elle est très simple à comprendre :

tab_valeurs = [1, 2, 3, 4]
taille_tab_valeurs = len(tab_valeurs)
taille_fixe_tableau_c_int = c_int * taille_tab_valeurs

… La dernière partie est l'assignation des valeurs contenues dans tab_valeurs vers taille_fixe_tableau_c_int, comme si l'on faisait une boucle for. Attention une telle boucle n'est pas réellement possible (d'où l'appel de fonction) :

julien@julien-Vostro-7580:~/Developpement/rust-python$ python3
Python 3.10.4 (main, Jun 29 2022, 12:14:53) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import * 
>>> tab_valeurs = [1, 2, 3, 4]
>>> taille_tab_valeurs = len(tab_valeurs)
>>> taille_fixe_tableau_c_int = c_int * taille_tab_valeurs
>>> taille_fixe_tableau_c_int
<class '__main__.c_int_Array_4'>
>>> for i, v in enumerate(tab_valeurs): 
...   taille_fixe_tableau_c_int[i] = v
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: '_ctypes.PyCArrayType' object does not support item assignment

Vous aurez noté au passage le type : Class __main__.c_int_Array_4 (avec 4 qui correspond à la taille) ; notre multiplication est en réalité la construction d'un objet.

Pour l'étoile, c'est exactement le même principe que l'argument du reste pour une fonction ou lors de la construction des listes ou dictionnaires:

julien@julien-Vostro-7580:~/Developpement/rust-python$ python3
Python 3.10.4 (main, Jun 29 2022, 12:14:53) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = [0,1,2,3]
>>> b = [*a,]
>>> b
[0, 1, 2, 3]
>>> c = {"ok":1}
>>> d = {**c,}
>>> d
{'ok': 1}
>>> d = {**c,'ko':0}
>>> d
{'ok': 1, 'ko': 0}

… plus de mystère !

print( "--------------------" )
print( "--- partie 3 - tableaux et passage par référence" ) 
print( "--------------------" )

print( "--- partie 3.1 - envoi par référence (l'objet initial est modifié)" ) 
tab_valeurs = [1, 2, 3, 4] 
tableau = (c_int * len(tab_valeurs))(*tab_valeurs)
malib.test_array( 
  len(tableau), 
  byref( tableau ) 
) 
print( "[PYTHON] ===>", len(tableau), list( tableau ) )

print( "--- partie 3.2 - envoi par référence x2 et acquisition pré-connue retours" ) 
malib.test_array_retour_simple.restype = POINTER(c_int)
r1 = malib.test_array_retour_simple( 
  len(tableau), 
  byref( tableau ) 
) 
print( "[PYTHON] =( r1 )=>", len(tableau), list( tableau ) ) 
print( "[PYTHON] =( r1 )=>", len(tableau)+1, [ r1[i] for i in range(0,len(tableau)+1) ] )
r2 = malib.test_array_retour_simple( 
  len(tableau), 
  byref( tableau ) 
) 
print( "[PYTHON] =( r2 )=>", len(tableau), list( tableau ) ) 
print( "[PYTHON] =( r2 )=>", len(tableau)+1, [ r1[i] for i in range(0,len(tableau)+1) ] )

print( "--- partie 3.2 - création d'un objet de retour de taille indéterminée à l'appel" ) 
class ValeurRetour(Structure): 
    _fields_ = [ 
      ( "a", c_int ),
      ( "contenu", POINTER(c_int) )
    ] 
malib.test_array_retour_complexe.restype = POINTER( ValeurRetour )
r3 = malib.test_array_retour_complexe( 
  len(tableau) 
) 
a = r3.contents.a 
v = r3.contents.contenu 
print( "[PYTHON] ===>", a, [ v[i] for i in range(0,a) ] )

Parfait.

Conclusion

Nous avons fait un tour rapide mais j'espère assez complet du propriétaire. En fonction de vos retours (coquilles ou ajouts majeurs), je demanderais peut-être à un admin de pouvoir passer un dernier coup de polish sur l'article…

En attendant, bon code à tous ! :)

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Chef de projet en technologies vocales

by Valerie_Mapelli from AFPy discuss

ELDA (Agence pour l’évaluation et la distribution de ressources linguistiques), société spécialisée dans les technologies de la langue dans un contexte international, cherche à pourvoir immédiatement un poste de chef de projet, spécialisé dans les technologies vocales.

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Pour les parisiens - Meetup django le 16 novembre

by sabderemane from AFPy discuss

Bonjour à tous,

Meetup Django le 16 novembre dans les locaux de Polyconseil 14-16 Bd Poissonnière · Paris.

L’occasion de se retrouver et entre autre en apprendre davantage sur la performance backend avec Django et de comprendre comment débogguer avec l’outil Kolo.

Inscription juste ici : Django Paris Meetup

Passer une belle journée !

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Manuel de rédaction de tickets de bug à l'attention de personnes non-techniques

by Éloi Rivard <eloi@yaal.coop> from Yaal

Dans un projet informatique, les tickets d'anomalie (bug ou incident) et d'évolution sont des moyens de communication entre les utilisateurs ou les clients, et l'équipe technique, mais font aussi office d'outil d'organisation, de documentation ou de support de réflexion.

Un ticket d'anomalie est généralement rédigé après avoir constaté un comportement inattendu d'un outil informatique. L'auteur cherche à transmettre à l'équipe technique les détails qui vont lui permettre de comprendre ce qu'il s'est passé, trouver les causes du problèmes, et enfin le résoudre.

Cela prend généralement la forme de cette suite d'actions : communiquer, diagnostiquer, enquêter, résoudre.

Les trois dernières étapes sont la responsabilité de l'équipe technique, mais la compréhension de l'évènement anormal se passe souvent dans le ticket d'anomalie. L'enjeu pour l'auteur de celui-ci est donc de décrire son expérience de manière à ce que l'équipe technique la comprenne, et puisse être efficace pour résoudre le problème. Tout le temps que l'équipe passer à lever les ambiguités ou demander des informations complémentaires repousse d'autant la résolution finale du problème.

Voici quelques pistes pour bien communiquer avec une équipe technique :

Comment rédiger un rapport d'anomalies

Le titre

Le titre d'un ticket devrait être le plus court possible en contenant les mots les plus signifiants. Il devrait à lui seul donner une idée du contenu du ticket. Il devrait être descriptif plutôt qu'interrogatif :

  • Lorsqu'il s'agit d'une tâche programmée ou d'une évolution souhaitée, utilisez de préférence des verbes à l'infinitif. Par exemple « Traduire la page d'accueil », « Maquetter la page abonnement », « Importer le jeu de données des contours des communes françaises ».
  • Lorsqu'il s'agit d'une anomalie, utilisez plutôt des phrases nominales, c'est à dire sans verbe, qui décrivent factuellement l'anomalie observée. Par exemple « Message d'erreur lors de la validation du formulaire d'inscription », « Résultats de recherche incohérents pour les achats vieux d'un an », « Pas d'affichage des véhicules sur la carte après connexion ».

La description

Il est beaucoup plus efficace de ne décrire qu'un seul et unique problème à la fois. Ne décrivez pas tout ce qui est survenu lors d'une session d'utilisation/de test par exemple mais faites autant de tickets que nécessaires si vous avez constaté plusieurs anomalies. Ne cherchez pas non plus à faire des groupes de problèmes : si deux problèmes se révèlent en fait liés ou en doublon, c'est l'équipe technique qui les fusionnera, puisque le diagnostic du problème est de sa responsabilité. C'est toujours ça de moins à faire au moment d'écrire le rapport !

S'il existe un modèle de rapport d'anomalie, utilisez-le bien sûr. Celui-ci vous fera gagner du temps et vous guidera pour ne pas oublier d'information. Sinon rappelez-vous de ce que devrait contenir un rapport (et n'hésitez pas à suggérer à l'équipe technique de créer un modèle) :

1. ce que j'ai fait.

La première chose que va tenter de faire l'équipe technique, c'est de tenter de constater l'anomalie, et donc reproduire la situation qui vont a amenées à l'anomalie. C'est de votre responsabilité de transmettre les bonnes informations pour que les techniciens réussissent cette étape.

Donnez le contexte dans lequel l'anomalie est survenue, éventuellement énumérez la suite d'actions qui a emmené jusqu'au bug. Rappelez avec quel compte vous êtes connectés, donnez le lien de la page web concernée par le bug, et l'heure à laquelle il a survenu. Donnez ces informations à chaque fois, même si ça vous semble rébarbatif ou non pertinent. Ce sont des informations précieuses pour l'équipe technique. Un bug est peut être spécifique à ce contexte précis et difficilement reproductible en dehors. La date par exemple sert à retrouver les informations susceptibles d'aider à la compréhension dans les journaux d'erreurs techniques.

Exemple : « J'ai rencontré l'anomalie sur la plateforme de recette, jeudi 30 juin vers 14h30. J'étais connecté avec le compte Alice et après avoir ajouté un vélo dans son compte avec la position géographique (48° 52.6 S, 123° 23.6 O), j'ai cliqué sur l'icône carte qui amène sur http://monservice.example/carte. »

2. ce que j'ai constaté.

Expliquez le comportement non attendu qui a été observé, si possible illustré d'une capture d'écran ou d'une vidéo.

Exemple : « La carte s'affiche bien : on voit la rue dans laquelle habite Alice mais le point "vélo" n'apparait pas. »

3. ce que j'aurais du voir.

Parfois c'est évident, mais souvent ça ne l'est pas. Expliquez brièvement le comportement que vous espériez, et pourquoi ce que vous observez n'y correspond pas.

Exemple : « La carte devrait montrer l'endroit où est situé le vélo, puisque le vélo est situé en France métropolitaine. »

Enfin, un rapport d'anomalie ne devrait probablement PAS contenir :

  • un diagnostic : Astreignez-vous à ne décrire que les comportements observés, éventuellement les impacts réels ou anticipés sur votre usage ou celui des autres utilisateurs. Établir le diagnostic d'un problème fait partie du travail de l'équipe technique, ne perdez de temps sur cet aspect au risque de brouiller les pistes.

  • un brainstorming : N'ouvrez pas de nouvelles questions. Les tickets de bug ont pour fonction de décrire l'existant, les idées d'évolution et les brainstorming doivent avoir une place distincte ! Selon les méthodes de travail, cela peut être dans un autre outil ou bien dans un ticket avec une priorité dédiée à celà.

La priorité

Si vous faites partie de l'équipe produit et que c'est à vous de juger la priorité entre plusieurs tickets (via un indicateur sur le ticket par exemple), celle-ci doit être bien choisie.

La répartition des tickets doit avoir une forme de pyramide : peu de priorité très haute, un peu plus de priorité haute, encore un peu plus de priorité moyenne etc. Si tout est en priorité très haute alors les tickets sont probablement mal priorisés.

Considérez que les tickets les plus prioritaires seront dans la mesure du possible traités en premier. S'ils sont tous au même niveau, cela devient chronophage voire impossible pour l'équipe technique de déterminer l'ordre de réalisation le plus pertinent.

Pour organiser efficacement les tickets en fonction de leur priorité, pensez à ce à quoi vous êtes ou n'êtes pas prêts à renoncer, en cas de réduction des moyens de production. Si demain la capacité de développement était divisée par deux et que vous deviez vous séparer de la moitié des tickets, lesquels gardriez-vous ?

L'assignation

Même si l'outil utilisé le permet, n'assignez pas des tickets à des membres de l'équipe technique. C'est le rôle de l'équipe technique de se répartir les tickets. Par exemple même si vous utilisez simplement le mail, utilisez une adresse non nominative pour adresser le rapport.

Par contre, faites en sorte que les tickets d'anomalie et d'évolution parviennent de façon efficace à l'équipe technique : ne mélangez pas tickets non techniques et tickets techniques. Les sujets de communication ou de commerce devraient avoir leur propre listes de tickets. Utilisez par exemple une adresse mail spécifique dédiée dans le cas d'emails.

Lire la suite…

specialist : Un outil pour étudier les optimisations de Python 3.11

by mdk from AFPy discuss

Un projet intéressant pour creuser les optimisations de Python 3.11, c’est un outil qui surligne notre code en fonction des optimisations appliquées par Python, démo :

Le vert signifie que Python 3.11 a pu spécialiser les instructions, par exemple utiliser une multiplication et une soustraction fonctionnant spécifiquement avec des floats dans ce cas.

Le rouge signifie que l’interpréteur n’a pas pu optimiser. Typiquement ici l’accès à la globale TEST_VALUES n’a pas pu être optimisé (alors qu’il est optimisable) puisqu’il n’a été exécuté qu’une seule fois.

C’est bien sûr sur PyPI :

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Webinaire le 23 novembre : développeuses et dévelopeurs Python : arrêtez de bidouiller !

by dmerej from AFPy discuss

Bonjour tout le monde,

La boîte où je bosse - arolla - organise un webinaire qui je pense pourra vous intéresser.

Voici un court descriptif:

Python est un langage très simple à apprendre et à utiliser. Par conséquent, il offre un grand niveau de liberté lorsqu’on code. Mais cette liberté peut aussi se retourner contre nous, mener à bidouiller et donc créer de la dette technique sans s’en rendre compte. Mais pas de panique. Ce n’est pas une fatalité. Alors que diriez-vous de faire du Python, mais de la bonne manière ?

Je serai l’un des animateurs donc n’hésitez pas à poser vos questions ci-dessous.

Si vous souhaitez participer, il suffit de s’inscrire sur EventBrite

=> Développeur.euse.s Python : arrêtez de bidouiller Billets, Le mer 23 nov. 2022 à 12:30 | Eventbrite

Sentez-vous libres de partager le lien autour de vous :slight_smile:

J’ai hâte d’échanger avec vous sur ce sujet en tout cas !

3 messages - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Opportunités à Montréal 🇨🇦 - Développeurs Python

by Pauline-Huber from AFPy discuss

Vous êtes intéressés par les opportunités de carrière à l’étranger et plus particulièrement au Canada / au Québec :airplane::earth_africa:?

Boostsecurity.io est une startup Montréalaise en croissance, nous sommes à la recherche d’un(e) Développeur Back End Sénior, ainsi que d’un(e) Développeur Full Stack.
La compagnie offre de sponsoriser le processus d’immigration pour les candidats sélectionnés.

À propos de la compagnie:
Boostsecurity.io est en “stealth mode”, ce qui signifie que leur produit est encore confidentiel.
Ils ont une excellente réputation dans le domaine de la cybersécurité et représentent une des compagnies les mieux financées à Montréal, avec des investisseurs au Canada, en Europe et dans la Silicon Valley.

En rejoignant Boostsecurity.io, vous travailleriez sur un produit créé par des développeurs pour les développeurs: une application hautement scalable et event-driven. L’opportunité idéale pour les développeurs qui aiment résoudre des problèmes techniques et architecturaux complexes.

Responsabilités:

  • Concevoir, tester et implémenter des nouvelles fonctionnalités pour notre infrastructure back end hautement performante.
  • Développer en utilisant la méthodologie TDD (Test Driven Development).
  • Travailler en collaboration avec un Gestionnaire de Produit, un Designer et les autres développeurs en mode Agile; nous cherchons constamment à trouver un équilibre entre vélocité et maintenir des standard de qualité très élevé pour notre code et notre produit
  • Offrir du mentorat aux développeur juniors afin de les aider à grandir

Expérience recherchée:

  • Une expérience confirmée sur des applications hautement performantes, scalable et event-driven
  • Expérience sur des architectures micro-services et dans le développement Back End sur des applications cloud-based
  • Une expérience éprouvée dans le développement d’application axée sur la qualité et des équipes orientées produit.

La stack:

  • Frontend: React, Typescript
  • Backend: Python, architecture microservices, Kafka
  • Infrastructure: AWS, serverless, K8s

Pourquoi se joindre à Boost?

  • Poste permanent avec stock options à la clé, nous cherchons à bâtir une équipe sur le long terme
  • Travailler aux côtés d’une équipe expérimentée, très avancée avec les pratiques TDD, DevSecOps, Infra as Code
  • Boostsecurity.io ont un bureau à Montréal, mais le poste s’effectuera principalement en télétravail (possibilité de 100% remote également à partir du Canada)

Si vous êtes intéressés ou souhaitez plus d’informations, n’hésitez pas à me contacter directement à pauline@bridgeeleven.ca.

Au plaisir d’échanger!

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Besoin d'un forge pour vos projets open source ? L'AFPy vous ouvre les portes de sa forge git.afpy.org/

Autant vous dire qu'on est heureux de se débarrasser petit à petit de notre dépendance à .

Merci à @gitea pour cette solution.

Lire la suite…

Web Backend Engineer (Python) @ GitGuardian

by Antonin from AFPy discuss

Bonjour à tous,

je vous joins une offre d’emplois pour laquelle nous recrutons potentiellement plusieurs personnes (~10 d’ici 1 an).

Cette offre est donc assez ouverte et peut déboucher sur plusieurs postes possibles en fonction de l’équipe dans laquelle vous travaillerez.

La job description est en anglais mais si vous voulez plus de détails je serais heureux de vous donner plus de renseigner.

Job description

We are looking for a passionate software engineer to help us develop a developer-first cybersecurity solution.
You will be a part of GitGuardian’s journey, that protects the open source community against hackers and makes it a robust, scalable and globally trusted product!
You will build a set of tools that scan GitHub public activity and git private repositories.

By joining our team, you will take an active part in:

  • Doing hands-on software development
  • Working closely with other highly-skilled developers
  • Working with an agile methodology with your Product Manager and your Lead Developer on 2 weeks sprints releases
  • Maintaining and ensuring an excellent quality of developed code
  • Participating in the growth of our technical teams! We are growing from 30 to 50 developers to support our growth in 2022.

Depending on your preferences and the team you will integrate your mission may be vary:

  • Backend web developer, private and public api
  • Full-stack python/react to work on user facing dashboards
  • Backend / sre, working on on premise solution for big tech
  • R&D to improve analyze the performance of our algorithms in specific cases, suggest and implement improvements
  • R&D to develop our next generation of code security scanners from scratch to production

Our technical stack:

  • Backend: Python + Django, Go, RabbitMQ, Redis
  • DB: PostgreSQL, Redis, Elasticsearch (+ Kibana)
  • Frontend: React / Typescript
  • Infrastructure: Docker, Kubernetes, Terraform, AWS

Why should you join us?

As a post Series B startup, we are facing many exciting & strategic challenges and we are experiencing very rapid growth: our goal is to recruit +100 people in 2022!

  • :palm_tree: A remote-friendly environment up to 3 days / week for people in “Ile de France” and full-remote policy for people living outside
  • :money_with_wings: An attractive package that includes stock-options
  • :computer: The latest setup equipment including cool apps, tools and technologies
  • :facepunch: Working to develop a meaningful product → we already helped more than 200k developers!
  • :beer: Lots of team-building activities
  • :rocket: Many opportunities for career development in the long term
  • :chart_with_upwards_trend: A strong engineering culture
  • :dog2: Pet-friendly offices → every Guardian gets to bring their dogs to the office and we love it!
  • :couple: Lots of trust & autonomy on your perimeter with a very transparent internal communication

Preferred experience

  • Degree in engineering, computer science or similar technical field
  • 2+ years of web software development experience, with a strong Python knowledge
  • Experience working with the following: web application development, Unix/Linux environments, distributed and parallel systems.
  • Dynamic and proactive personality with good communication skills

Bonus points:

  • You know how to set up a development environment with Docker
  • You don’t embed API keys in your code :wink:
  • Experience handling big data ( 100 Go < < 10 To) with PostgreSQL, MongoDB, ELK stack
  • Deep understanding of the startups dynamics and challenges
  • Have experienced strong team growth in a previous company

About GitGuardian

GitGuardian is a global post series B cybersecurity startup, we raised $44M recently with American and European investors including top-tier VC firms.

Among some of the visionaries who saw this unique market value proposition, are the co-founder of GitHub , Scott Chacon, along with Docker co-founder and CTO Solomon Hykes.

We develop code security solutions for the DevOps generation and are a leader in the market of secrets detection & remediation.

Our solutions are already used by hundreds of thousands of developers in all industries and GitGuardian Internal monitoring is the n°1 security app on the GitHub marketplace. GitGuardian helps organizations find exposed sensitive information, that could often lead to tens of millions of dollars in potential damage.

We work with some of the largest IT outsourcing companies, publicly listed companies like Talend or tech companies like Datadog.

Based in Paris we are a true citizen of the world with more than 80% of our customers in the United States.

The Guardians are young, passionate and aiming high! :raised_hands:

Recruitment process

  1. visio call with a recruiter
  2. technical test
  3. team interview (office based or remotely)
  4. final interview with the CTO

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Python 3.11 est disponible

by David Delassus from Linuxfr.org

Ce journal est une traduction de https://discuss.python.org/t/python-3-11-0-final-is-now-available/20291

Nouveautés

Changements généraux

  • PEP 657 - Introduction de meilleures sources d'erreurs

Exemple :

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    x['a']['b']['c']['d'] = 1
    ~~~~~~~~~~~^^^^^
TypeError: 'NoneType' object is not subscriptable
  • PEP 654 - Groupes d'exceptions et except*
  • PEP 680 - tomllib rejoint la librairie standard
  • GH-90908 - Introduction des groupes de tâches dans asyncio
  • GH-34827 - Groupes atomiques ((?>...)) and quantifieur possessifs (*+, ++, ?+, {m,n}+) sont maintenant supportés dans les expressions régulières

Le Faster CPython Project fournit des résultats intéressant. Python 3.11 est jusqu'à 10-60% plus rapide que Python 3.10. En moyenne, une amélioration de 1.22x a été mesurée avec la suite de test de performance standard. Voir la page Faster CPython pour plus de détails.

Changements sur le typage

  • PEP 673 - Type Self
  • PEP 646 - Type générique "variadique" (avec un nombre variable de paramètres)
  • PEP 675 - Type "LiteralString" arbitraire (n'accepte pas les variables de type str)

Exemple :

def foo(bar: LiteralString) -> None: ...

bar = "hello"
foo(bar)      # bad
foo("world")  # good
  • PEP 655 - Les éléments d'un TypedDict peuvent être marqué en tant que requis ou potentiellement manquant

Exemple:

class Movie(TypedDict):
    title: str
    year: NotRequired[int]  # a ne pas confondre avec Optional[int] qui signifie "int | None"
  • PEP 681 - Transformation de "data class"

Plus de resources

Conclusion du traducteur

Une nouvelle version forte intéressante, cela fait plaisir de voir que Python est en constante évolution et n'est pas prêt de s'arrêter.

Ah oui, je sais, je n'ai pas traduit le (long ?) passage sur les trous noirs et la relativité générale. Ceci est un exercice laissé au lecteur :)

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Le changement de mot passe, c'est maintenant avec Vaultwarden

by Bearstech from Bearstech

Un peu de suivi sur la question de la gestion des mots de passe au quotidien. Il y a deux ans, nous vous présentions dans cet article les pré-requis et les choix technologiques (Seafile + KeePass) que nous avions retenu. Cette solution est restée fonctionnelle et satisfaisante, mais quelques (presque) nouveautés nous ont convaincu.

Nous vous avions parlé de syspass en mentionnant discrètement un "élégant clone de Bitwarden". Après 6 mois d'utilisation personnelle, il fut proposé au reste de l'équipe. Et après 6 mois d'utilisation collective, on vous en parle.
Il va être compliqué de parler de Vaultwarden sans parler de sa version open source certes, mais surtout commerciale, Bitwarden. Pour faire court et laisser à sa réimplémentation en Rust les lauriers de ses fonctionnalités, reconnaissons principalement l'efficacité de ses clients, qui fonctionnent parfaitement avec Vaultwarden. Que vous soyez sous Firefox, Chromium/Chrome, Android, iOS, vous retrouverez le même client, avec la même interface, sans grand reproche à lui faire (et nous n'avons pas testé les clients desktop, mais vu l'uniformité sur le reste des plateformes, on vous les conseille sans trop prendre de risque).
Passons maintenant à Vaultwarden!
Des fonctionnalités en pagaille
Un point essentiel dans l'acceptation de l'outil, on trouve rapidement dans l'interface l'outil pour importer vos anciens mot de passe avec plus de 50 formats supportés. Outre l'import de notre vieux fichier au format KeePass2, nous avons validé pour vous les imports : Chrome, Password Safe et Passbolt



Comparé à notre précédent système (un unique fichier chiffré avec une passphrase connue de l'ensemble de l'équipe), on a gagné quelques fonctionnalités. Tout d'abord, Vaultwarden nous permet maintenant une gestion des comptes utilisateurs et de groupes ("Organizations"). La gestion de compte permet facilement l'arrivée ou le départ d'utilisateurs, chacun possédant d'ailleurs son "Vault" privé dans lequel il peut stocker ses mots de passe. La gestion de groupes nous a permis d'étendre grandement le partage des mots de passe (pour atteindre le même niveau de satisfaction, on aurait dû faire plusieurs fichiers KeePass avec chacun leur passphrases, une lourdeur qui nous avait jusqu'alors bloqué dans un entre-deux où seulement la part minimum de nos mots de passe se retrouvaient partagés). On retrouve évidemment ce que l'on attend, les différents types d'utilisateurs ("User", "Manager", "Admin", "Owner"), la limitation d'accès à un groupe, voir même uniquement à un ou des dossiers d'un groupe. On notera en particulier la possibilité très appréciable de donner un accès en "Hide Passwords" (l'extension de l'explorateur sera capable de remplir le mot de passe mais l'utilisateur ne le verra pas !), parfait pour un intervenant externe, un stagiaire, ...
Vaultwarden fournit aussi un ensemble de rapports sur vos mots de passe. Vos mots de passe ont-ils (encore) été exposés dans des leaks récentes ou anciennes ? Utilisez-vous (encore) le même mot de passe pour différents comptes ? Avez-vous (encore) des mots de passe que l'on peut considérer comme faibles ? Est-ce que vous n'utilisez (encore) pas de 2FA alors que le site le propose ? Toute une série de questions auxquelles il est difficile de répondre manuellement vu le nombre de mots de passe utilisés. Vaultwarden vous offre ça en deux clics.

On trouve aussi un bon générateur de mot de passe et de passphrase configurable à souhait et appelable directement sur une page de création de compte avec un clic droit.
Et last but not least, l'intégration 2FA. Elle existe théoriquement sous KeePassXC, mais suivant les plateformes elle était accessible... ou non. Ici on la trouve directement dans chaque fiche de mot de passe et on peut même scanner directement via les applications sur téléphone pour renseigner le champ "automagiquement". On pourrait reprocher aux extensions de ne pas détecter le champ TOTP et le remplir automatiquement, mais il semblerait que ces champs soient moins bien uniformisés que ceux des identifiants/mots de passe. Au moment de la rédaction de ce paragraphe, j'ai tout de même découvert que l'extension de mon explorateur mettait dans le presse-papier le TOTP après avoir automatiquement rempli les identifiants, un simple "ctrl-v" à la page suivante suffi donc à remplir le code TOTP!
Enfin un petit bonus (pour utilisateurs paranoïaques) ou malus (pour celui qui oubliera sa passphrase), il n'y a pas de fonction de récupération de compte. D'un côté vous serez responsable de la perte de vos mots de passe, mais de l'autre vous n'avez pas à vous poser la question de la bienveillance ou non de votre admin préféré. Sans votre passphrase, ni récupération ni intrusion possible.
Installation et build de Vaultwarden
Utilisé dans un premier temps avec l'image Docker fournie, l'usage a été pérénisé en automatisant les deux builds bien documentées nécessaires au fonctionnement de Vaultwarden (Vaultwarden, le coeur en Rust, et web-vault, l'interface web). Vous pouvez aussi bien utiliser les releases de l'un comme de l'autre. La configuration Apache et le service Systemd sont triviaux.
Un peu de sucre d'admin parano
Le premier point qui nous a gêné était la perte d'historique par rapport à notre Seafile et donc la possibilité de corriger une erreur humaine. On s'est accordé que le problème n'était pas tant d'identifier le coupable que la possibilité de revenir en arrière. Nous avons donc décidé de rester sur une base de données sqlite3 (avec une petite quinzaine d'utilisateurs pour plus de 1 500 mots de passe stockés, on est à 6M) en se gardant un backup local de la base toutes les 5 minutes sur 24h (on pousse à un peu plus de 600M de backups, bien penser à utiliser la command backup de sqlite). Couplé avec notre système de backup glissant (8 derniers jours, 4 dernières semaines et 12 derniers mois), on s'est donné un niveau de stress minimal sur le risque de perdre des données.
Le deuxième point de tension était sur l'exposition au monde de l'interface de Vaultwarden. Bien que l'équipe de dev de Vaultwarden ait l'air très sérieuse, il nous a semblé difficile de l'être, nous, en utilisant Vaultwarden ouvertement via une URL publique (pour l'interface utilisateur, Vaultwarden propose une interface admin, celle là reste cachée, point). La solution la plus appropriée est bien évidemment le VPN de l'entreprise, ce qui a été mis en place. Mais ce faisant, on perdait son usage sur nos téléphones (et qui veut connecter son iDevice à un réseau sérieux ?). Ce n'était pas vraiment acceptable ni professionnellement, ni dans l'objectif de fournir aux employés ce gestionnaire de mots de passe y compris à usage personnel.
Un compromis a été trouvé en bloquant l'accès public à l'URL publique de notre Vaultwarden aux IP fixes des ours qui en ont (le très simple "Require ip" d'Apache fait le job) et en laissant aux autres l'accès via le VPN.

Pour ceux avec IP fixe, on peut synchroniser ordinateur et téléphone de chez soi, et utiliser le cache lors de déplacement.
Pour ceux sans IP fixe, on peut assez facilement faire un reverse proxy sur un ordinateur ayant accès au VPN pour donner à son téléphone l'accès sur son réseau local, et retomber donc sur le cas précédent (avec un petit jeu pour que votre CA et celui de l'entreprise soit reconnu).

server {
listen 443 ssl http2;

server_name vaultwarden.yourlocalnetwork.lan;

ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/certificate.key;

location / {
proxy_pass https://vaultwarden.yourenterprisenetwork.lan;
}
}

Bilan
Après 6 mois d'utilisation chez Bearstech et un peu plus d'un an pour ma part, Vaultwarden s'impose comme une solution fiable pour la gestion de vos mots de passe et bénéficie du sérieux commercial de Bitwarden pour ses clients (extensions, apps, ...). L'essayer c'est l'adopter ! Et pour la suite on a promis de tester Cozy Pass, à dans 2 ans.

Lire la suite…

[Freelance] Espace Client B2B / Django + Rest Framework

by romain from AFPy discuss

Dans le cadre de l’évolution d’un projet d’espace client dans le domaine du BTP (location d’équipements de chantier B2B), nous cherchons un freelance python (python3.9, django, django rest framework) pour prendre en charge dans un premier temps en binôme avec moi puis au sein d’une équipe autonome plus complète (ajout d’un designer et d’un développeur front) des évolutions mineures puis majeures du projet.

La base de code actuelle est maîtrisée à 100% et sa couverture de teste est excellente (chaque feature est testée), et la partie backend est principalement constituée d’une API REST (DRF) consommée par le frontend et d’une administration django.

Le projet est développé en suivant des pratiques pérennes : sprints hebdomadaires (roadmap, estimations, développement, livraison, démo, rétro), tests systématiques, intégration continue, déploiement continu capable de monter des environnements par branche, builds dans des conteneurs déployés sur google cloud (12factor), pair-programming régulier …

Modalités

  • Freelance (contrat)
  • Télétravail (en France depuis un lieu fixe)
  • 4 jours par semaine
  • Démarrage en Novembre 2022
  • Facturation mensuelle
  • Tarif jour à déterminer ensemble en fonction du profil

Recherche

  • Au moins 5 ans d’expérience en développement Web (backend)

Compétences/connaissances requises

  • Bases d’algorithmique (structures de données, complexité, …)
  • Fonctionnement du Web (HTTP, échanges réseau client/serveur, …)
  • Python (3.9)
  • Django (3.2) + Django REST Framework
  • PostgreSQL (ou autre moteur de bases de données relationnel)
  • Pytest (ou expérience avec un autre outil de tests python)
  • Git

Compétences/connaissances optionnelles mais appréciées

  • Docker / K8S
  • Google Cloud Platform
  • Typescript / React

Le projet étant réalisé par une équipe 100% distribuée / à distance (et ce depuis le premier jour du projet, il est impératif pour le bon déroulé d’être capable de communiquer efficacement et de collaborer dans l’intérêt du projet malgré la distance physique. L’outillage moderne nécessaire à cette collaboration à distance est fourni (voire adapté par l’équipe au fil des besoins) mais les outils ne font pas à notre place, et il est donc important de mettre un effort particulier sur cette communication qui est un vrai point clef de succès du projet.

Si ce projet vous semble correspondre à vos recherches, discutons en plus en détails par mail ou téléphone :

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Lire un item d'un sous-menu avant clic ou appui sur RETURN

by PETERPAN31 from AFPy discuss

Bonjour le Forum,

C’est un membre de la ML debian-user-french qui me conseillait d’aller sur votre site, que j’ai donc découvert.

Je découvre Python et étant proche d’être aveugle je tente de réaliser des apps avec tkinter qui seraient entièrement vocalisées avec ‘espeak’.
En effet je m’aperçois que ce que j’ai su coder jusque présent n’est pas compatible avec mon lecteur d’écran Orca.

Je galère sur le sujet des items des sous-menus que je ne parviens pas du tout à vocaliser (quand ils prennent le focus mais avant qu’il y ait clic de la souris ou surtout de la frappe de Return) pour que leurs labels puissent être passés au module os.
Par contre, je n’ai pas de difficultés avec les widgets classiques.

Je passe d’un item au suivant avec les touches fléchées.

J’ai examiné moult alternatives avec les événements.

Auriez-vous un lien pour me dépanner ?

peterpan31

3 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Série de webinaires autour de Python et Django

by tchappui from AFPy discuss

Bonjour,

Je poste ici, car on me l’a suggéré dans le discord. J’organise une série d’ateliers virtuels gratuits entre le 1er novembre et le 19 décembre. J’ai préparé un programme ici https://placepython.fr.

Je suis toujours hésitant avant de poster un lien externe sur un forum, donc dites-moi si ce n’est pas opportun.

Thierry

4 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

Signaler un spam en CLI

by mdk from AFPy discuss

Ce matin j’ai reçu un spam (qui ne commençait pas par « Dear Python, » cette fois, ça c’était hier, faut suivre !

J’ai donc voulu le remonter à signal-spam.fr mais en ce moment j’utilise Protonmail…

Depuis Protonmail c’est simple de télécharger un email, donc je me retrouve avec un .eml et à coup de xclip c’est vite copié dans le formulaire de signal-spam.fr, mais bon, on peut faire mieux.

J’ai donc vite fait écrit :

Voilà, ça m’évite un copier-coller.

Je sais que tu as le flag « une parenthèse n’est pas fermée » levé dans ton cerveau depuis la première ligne, c’est pas agréable ? Aller je suis gentil, voilà ) tu peux baisser ton flag et passer une bonne journée.

7 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

Utiliser de la syntaxe Python pour les prototypes de fonction

by mdk from AFPy discuss

Dans la doc de Python, la syntaxe utilisée pour les arguments optionnels fait mal aux yeux des débutants, n’est pas de la syntaxe Python, et se mélange avec la syntaxe des listes, par exemple :

complex([real[, imag]])

Je propose de convertir ça en syntaxe Python :

complex(real=0, imag=0)
complex(string, /)

En faisant d’une pierre trois coups :

  • C’est de la syntaxe Python, donc les “débutants” découvrent que / c’est valide, sans pour autant découvrir ce que ça veut dire.
  • Ça permet de documenter les valeurs par défaut lorsqu’il y en a.
  • Parfois, comme pour complex j’en profite pour rajouter les constructeurs alternatifs manquants à la doc, comme le fait que complex accepte aussi une chaîne.

C’est dans cette PR :

Et je me demande encore si c’est plus lisible avant ou après, j’aimerai l’avis de la communauté :relaxed:

5 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

Besoin de conseils architecturaux

by WrathOfThePixel from Linuxfr.org

Bien le salut, la compagnie mytilicultrice !

Je me lance dans un side-project, libre et gratuit, d'une envergure encore inédite pour moi.
Je vais vous esspliquer un peu ce que je compte faire, et comment. Si certains d'entre vous, en passant par là, avait envie de donner un avis constructif, voire des conseils, des idées, bienvenue à eux.

L'idée est de programmer un synthétiseur FM virtuel, dans la lignée de FM8 de Native Instruments, par exemple. Il en existe déjà quelques uns dans le monde du libre, mais pour les avoir à peu près tous essayés, aucuns ne me satisfont vraiment, que ça soit dans l'ergonomie, les possibilités, ou la qualité de rendu du son. J'ai donc envie de produire une "killer app" qui fasse concurence aux plus grands du domaine (ça semble peut-être un peu prétentieux dit comme ça, mais j'aime pas trop partir en me disant que je vais faire de la merde, voyez-vous ?).

Voilà pour le résumé du projet. J'ai déjà pas mal bossé en amont. En programmant déjà quelques synthés plus simple pour voir si j'étais à la hauteur de la tâche, en réunissant un peu toutes les maths nécessaire à la simulation de cette synthèse particulière, en réfléchissant à comment faire "discuter" toutes ces équations pour obtenir le résultat voulu, en étudiant de près ce que devrait-être l'ergonomie d'un tel soft pour garder un minimum d'intuitivité sans rien sacrifier aux fonctionnalités et à la modularité, et d'autres choses. Bref, je pars pas les mains vides.

Non, si je viens vous parler de ça aujourd'hui, c'est parce qu'il est temps de me lancer à tapoter du code, et si j'ai déjà une idée assez précise de comment je vais articuler le tout, j'ai besoin de savoir si mon approche est déjà techniquement possible, et si oui, à quel point vais-je m'arracher les cheveux/me casser les dents, ou si mes compétences hétéroclites ne m'ont pas permis de voir qu'il y à beaucoup mieux à faire.

Alors d'avance merci pour vos avis éclairés.

D'abord, c'est quoi un synthé FM ?
(si vous le savez déjà, vous pouvez sauter à la partie suivante)

C'est un ensemble d'opérateurs (entre deux et huit en général, pourquoi ne pas en imaginer plus) qui intéragissent entre eux via une matrice de modulation.
Un opérateur est constitué d'un oscillateur, d'une ou plusieurs enveloppes ADSR pour contrôler ses parametres (niveaux de sortie, d'entrée, fréquence, etc.), éventuellement de filtres passe-haut/bas/bande/notch pour modeler ses harmoniques, d'une entrée de modulation, et d'une sortie.

Ces opérateurs entrent et sortent joyeusement les uns dans les autres pour se moduler réciproquement suivant des algorithmes (le plus souvent programmés dans une matrice) pour nous procurer du (parfois bon) son.

Ok, comment j'ai prévu de faire ça ?

Alors moi, je sais faire des interfaces en python avec Pyside, et je sais faire des synthés en C. Fort de cette constatation, j'ai envie d'utiliser Pyside pour la partie UI, et le C pour la partie synthèse (ou C++ peut-être, mais j'avoue être un peu frileux à cette idée). Jusque là, tout va bien =D

Mais comment articuler tout ça ? Petit schéma, avec essplications en dessous :

Schéma

Légende :
Chaque rectangle est un thread,
En bleu, c'est du python,
En rose, c'est du C,
Les flèches grasses signifient "crée ce thread",
Les flèches maigres (rouges) -> échange de données,
L'entrée d'exécution est indiquée par "Entrée d'exécution"

Résumé :
On appelle un programme en C, qui crée un thread Python pour nous présenter une zoulie interface utilisateur. De là on demande au thread principal de nous créer une matrice de modulation et des opérateurs à mettre dedans (chacun dans des thread séparés), et on fait boucler le tout pour faire du bruit.

Le truc qui me chiffonne, c'est que je ne suis pas vraiment très à l'aise avec la création/gestion de threads (mais ça me fera une bonne occasion d'apprendre), surtout dans les langages différents. Alors déjà, est-ce seulement possible de faire ça d'après vous ?
Ça à l'air complexe, mais quand pensez-vous ? Vous croivez que je vais y arriver comme même ?

Merci en tout cas d'avoir lu jusqu'au bout, et d'avance merci encore pour les idées, conseils, pistes, et encouragements (ou découragements aussi).

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Développeur·se Front Fullstack

by f.oliveau from AFPy discuss

Nous recherchons un·e développeur·se avec déjà une première expérience professionnelle significative en Vue / Typescript pour poursuivre le développement de notre application. Avoir également de l’expérience avec Python, Docker ou Ansible est un plus.

Type d’emploi : CDI ou CDD, temps plein ou 4/5, télétravail en France possible.
Ce n’est pas un poste de data scientist.

Qui est OctopusMind ?

OctopusMind, spécialiste de l’Open Data économique, développe des services autour de l’analyse des données. Nous éditons principalement une plateforme mondiale de détection d’appels d’offres : www.j360.info
L’entreprise, d’une dizaine de personnes, développe ses propres outils pour analyser quotidiennement une grande masse de données, en alliant intelligence humaine et artificielle www.octopusmind.info
Nos bureaux, dans le centre ville de Nantes, sont adaptés au télétravail (de 0 à 4 jours par semaine, en fonction des envies de chacun·e).
Un télétravail complet est envisageable, si résidence hors de la région nantaise, sous réserve d’une présence continue en début de contrat (pour faciliter l’intégration), puis quelques jours (3/4 fois par an).

Nous vous proposons

L’équipe IT, sans lead developer, est en lien avec l’équipe R&D ML et l’équipe de veille des marchés. Nous suivons un SCRUM maison, ajusté régulièrement selon nos besoins. Nous discutons ensemble de nos priorités et nous les répartissons à chaque sprint selon les profils et envies de chacun·e.

Vous participerez :

  • Au développement front de l’application j360 (Vue3/Quasar/Typescript).
  • Au développement back de j360 (Python/Django/DRF).
  • À la définition et à l’évolution du design dans le respect de la charte graphique.
  • À la relecture de code et l’accompagnement vos collègues en leur fournissant du mentorat sur les bonnes pratiques, l’architecture, les design patterns, etc.

En fonction de vos centres d’intérêts :

  • Au développement du back-end de j360 (Python/Django, PostgreSQL, ElasticSearch).
  • Au déploiement des applications (Docker/Docker-Compose, Ansible).
  • Aux scripts de collecte de données (Python/Scrapy).
  • À la réflexion produit, analyse technique et à la définition des priorités de l’entreprise (Trello).
  • À l’ajustement de nos méthodes de travail au sein de l’équipe et de l’entreprise.

Avantages :

  • Horaires flexibles - RTT - Titres-restaurant - Participation au transport - Épargne salariale - Plan d’intéressement et plan épargne entreprise
  • Télétravail en France possible
  • Statut cadre en fonction du diplôme/l’expérience ( Syntec)

Processus de recrutement :

  • CV + présentation de vous et de ce qui vous intéresse à adresser par mail à job @ octopusmind.info
  • Vous pouvez illustrer vos compétences techniques avec des exemples de projets ou passer notre test technique.
  • Echanges et précisions par mail ou téléphone avec le dirigeant d’OctopusMind (~ 30 minutes).
  • Test technique.
  • Entretien final dans nos bureaux (avec quelques membres de l’équipe IT, ~1h), puis vous serez invité·e à déjeuner avec nous.
  • Offre (salaire en fonction de l’expérience/niveau)

SVP pas de démarchage pour de l’outsouring ou cabinet RH, merci

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Développeur·se Python

by f.oliveau from AFPy discuss

Nous recherchons un·e développeur·se avec déjà une première expérience professionnelle significative en Python pour poursuivre le développement de nos services. Avoir également de l’expérience avec Vue, Typescript, Docker ou Ansible est un plus.

Type d’emploi : CDI ou CDD, temps plein ou 4/5, télétravail en France possible.
Ce n’est pas un poste de data scientist.

Qui est OctopusMind ?

OctopusMind, spécialiste de l’Open Data économique, développe des services autour de l’analyse des données. Nous éditons principalement une plateforme mondiale de détection d’appels d’offres : www.j360.info
L’entreprise, d’une dizaine de personnes, développe ses propres outils pour analyser quotidiennement une grande masse de données, en alliant intelligence humaine et artificielle www.octopusmind.info
Nos bureaux, dans le centre ville de Nantes, sont adaptés au télétravail (de 0 à 4 jours par semaine, en fonction des envies de chacun·e).
Un télétravail complet est envisageable, si résidence hors de la région nantaise, sous réserve d’une présence continue en début de contrat (pour faciliter l’intégration), puis quelques jours (3/4 fois par an).

Nous vous proposons

L’équipe IT, sans lead developer, est en lien avec l’équipe R&D ML et l’équipe de veille des marchés. Nous suivons un SCRUM maison, ajusté régulièrement selon nos besoins. Nous discutons ensemble de nos priorités et nous les répartissons à chaque sprint selon les profils et envies de chacun·e.

Vous participerez :

  • Au développement back de j360 et son back-end (Python/Django, PostgreSQL, ElasticSearch).
  • Aux scripts de collecte de données (Python/Scrapy).
  • À la relecture de code et l’accompagnement vos collègues en leur fournissant du mentorat sur les bonnes pratiques, l’architecture, les design patterns, etc.

En fonction de vos centres d’intérêts :

  • Au développement front de l’application j360 (Vue3/Quasar/Typescript).
  • Au déploiement des applications (Docker/Docker-Compose, Ansible) et intégration des services R&D (Gitlab CI).
  • À la réflexion produit, analyse technique et à la définition des priorités de l’entreprise (Trello).
  • À l’ajustement de nos méthodes de travail au sein de l’équipe et de l’entreprise.

Avantages :

  • Horaires flexibles - RTT - Titres-restaurant - Participation au transport - Épargne salariale - Plan d’intéressement et plan épargne entreprise
  • Télétravail en France possible
  • Statut cadre en fonction du diplôme/l’expérience (Syntec)

Processus de recrutement :

  • CV + présentation de vous et de ce qui vous intéresse à adresser par mail à job @ octopusmind.info
  • Vous pouvez illustrer vos compétences techniques avec des exemples de projets ou passer notre test technique.
  • Echanges et précisions par mail ou téléphone avec le dirigeant d’OctopusMind (~ 30 minutes).
  • Test technique.
  • Entretien final dans nos bureaux (avec quelques membres de l’équipe IT, ~1h), puis vous serez invité·e à déjeuner avec nous.
  • Offre (salaire en fonction de l’expérience/niveau)

SVP pas de démarchage pour de l’outsouring ou cabinet RH, merci

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Développeuse Python @ OVHcloud

by mlcdf from AFPy discuss

Poste basé sur l’un des huit bureaux OVHcloud en France.

Département

Nous recherchons une Développeuse Python H/F pour notre département IT, technology & Product qui conçoit et développe les produits, les services, les infrastructures qui construisent ensemble l’avenir d’OVHcloud.

Toujours en quête d’innovation, ces passionnés s’attachent à résoudre des problèmes technologiques complexes.

Vous intégrez l’équipe Object Storage qui a pour ambition de construire l’offre Object Storage la plus performante du marché.

Missions

Rattachée au Team Leader, vous relevez les défis suivants :

  • Développer les évolutions sur les différents services constituant notre produit, en assurant un haut niveau de performance et en garantissant la qualité, la scalabilité, et l’efficacité des développements réalisés.
  • Participer aux phases de conception en analysant les besoins et en préconisant les solutions techniques à mettre en œuvre.
  • Participer à la maintenance corrective du produit.
  • Rédiger la documentation technique.
  • Participer aux revues de code.
  • Participer aux phases de recette du produit.

Chez OVHcloud, nous encourageons l’audace et l’initiative. Au-delà de ces missions, nous attendons donc de vous que vous soyez proactif et que vous participiez à l’amélioration continue de votre périmètre.

Profil

  • Vous justifiez d’une expérience significative dans le développement de systèmes distribués.
  • Vous êtes à l’aise en programmation Python et/ou C++.
  • Vous maitrisez les bonnes pratiques de développement (tests unitaires, code coverage, CI,…).
  • Vous maitrisez idéalement les outils suivants est importante : MySQL, SQLite, Redis, Zookeeper, Git, Docker, Nginx, Puppet, CircleCI, Travis.
  • Dotée d’un grand sens du service, vous avez à cœur d’avoir un impact positif sur vos interlocuteurs internes et/ou externes.
  • Vous êtes ouverte sur le monde et travailler dans un contexte international est un critère important pour vous.
  • Vous êtes autonome et capable de travailler dans un environnement rapide et challengeant.

Vous voulez utiliser vos talents et votre énergie pour soutenir un projet ambitieux ? Vous êtes au bon endroit.

N’hésitez plus et rejoignez l’aventure OVHcloud !

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Au challenge de la PR la plus courte, je propose…

by mdk from AFPy discuss

Une espace de trop et boom, du déjàvu …

Une espace qui manque et boom, classique …

Mais une espace insécable de largeur nulle en trop et boom, déjà vu ?

J’espère que github a prévu un achievement pour ça.

3 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

Nouvelle « sidebar »

by mdk from AFPy discuss

Ils disaient :

donc on test.

J’ai changé la page d’accueil en conséquence : les catégories sur la page d’accueil ça faisait vraiment doublon, j’ai juste laissé “Récents”.

Vous en pensez-quoi ?

3 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

gaufre, un serveur gopher minimaliste

by Mindiell from AFPy discuss

Oui, je sais que ça peut paraitre bizarre et/ou étrange, mais figurez-vous que j’ai découvert que “gaufre” était à la fois un truc sucré qui se mange et un mammifère qui vit dans des trous. Il s’agit de la traduction (l’orthographe gauphre existe également) du mot “gopher” en anglais.

Tout ça pour dire que j’ai donc créé récemment un serveur gopher (Gopher — Wikipédia) en python3. Pour le moment il s’agit d’un truc minimaliste (moins de 200 lignes de code) mais qui semble tenir le coup.

Je vais y ajouter des morceaux au fur et à mesure, et peut-être également y ajouter d’autres protocoles…

Ah, oui forcément j’ai zappé le lien vers le code source : Mindiell / gaufre · GitLab

13 messages - 4 participant(e)s

Lire le sujet en entier

Lire la suite…

Création d'une calculatrice sur Python

by Scorpii5141 from AFPy discuss

Bonjour,
J’ai un devoir de créer une calculatrice sur Python mais je suis novice en programmation et n’est donc pas toutes les bases.
J’ai réussi à faire l’affichage d’un écran et des boutons mais pour l’instant la calculatrice ne sait pas calculer. J’ai un inconvénient qui est d’apprendre à la calculatrice à faire toutes les opérations (je sais que Python sait les faire, mais pour mon sujet il n’est pas censé savoir les faire), en partant de l’addition, en lui apprenant chaque addition de 0 à 9, si quelqu’un à des idées pourrait - il m’en faire part ?

De plus il faut que j’ajoute un bouton effacé “Del” mais je ne sais pas comment le définir pour qu’il efface l’écran de la calculatrice

Merci pour votre aide d’avance

4 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Vérification de la syntaxe de certains fichiers de configuration

by ascendances from ascendances

Certains logiciels fournissent aussi la possibilité de vérifier la syntaxe des fichiers de configuration qu’ils utilisent. Cela permet d’éviter des erreurs ou interruptions de service dûes à une erreur dans le fichier. Voici trois exemples :

1. Apache

Apache2 fournit apachectl. Si la syntaxe des sites actifs est correcte, la sortie sera :

# apachectl -t
Syntax OK

Avec un fichier de configuration incorrect nommé conte.conf contenant

<VirtualHost a.oree.du.bois:80>
    ServerName le.grand.mechant.loup.example
    CustomLog /il/etait/une/fois combined
    RencontreChaperonRouge on
</VirtualHost>

la sortie sera 

# apachectl -t
[Sun Sep 18 22:18:32.305781 2022] [core:error] [pid 14382:tid 139846731306112] (EAI 2)Name or service not known: AH00547: Could not resolve host name a.oree.du.bois -- ignoring!
AH00526: Syntax error on line 4 of /etc/apache2/sites-enabled/conte.conf:
Invalid command 'RencontreChaperonRouge', perhaps misspelled or defined by a module not included in the server configuration
Action '-t' failed.
The Apache error log may have more information.

Attention, les vérifications d’apachectl ne sont pas exhaustives et une erreur peut encore survenir lors du redémarrage du serveur Apache. Ici le chemin vers le fichier n’existe pas mais n’a pas été détecté. Si apachectl -t détecte une erreur, il y a un problème. S’il n’en détecte pas, il n’y a peut-être pas de problème.

(test réalisé avec Apache/2.4.38)

2. OpenSSH

La commande sshd -t exécutée avec des droits root permet de vérifier la validité de la configuration du serveur openSSH (le fichier /etc/ssh/sshd_config sous Debian).
Si le fichier est correct, alors rien n’est affiché et la valeur de sortie est 0.
Avec un fichier sshd_config commençant par :

PetitPotDeBeurre on
Tartiflette off

La sortie sera :

# sshd -t
[sudo] password for stephane: 
/etc/ssh/sshd_config: line 1: Bad configuration option: PetitPotDeBeurre
/etc/ssh/sshd_config: line 2: Bad configuration option: Tartiflette
/etc/ssh/sshd_config: terminating, 2 bad configuration options

avec une valeur de sortie de 255.

(test réalisé avec OpenSSH_7.9p1, OpenSSL 1.1.1d)

3. Sudo

Si une erreur est faite dans le fichier /etc/sudoers qui empêche sa relecture par l’exécutable sudo, il devient impossible d’utiliser la commande sudo. visudo permet d’éviter ce désagrément.
Supposons que l’utilisateur ait ajouté à la ligne 12,

Hello           MereGrand

puis enregistre le fichier :

% sudo visudo
/etc/sudoers:12:25: erreur de syntaxe
Hello           MereGrand
^
Et maintenant ?

Lorsque le fichier est incorrect, trois choix sont possibles :

  • remodifier le fichier
  • quitter sans enregistrer
  • quitter en enregistrant (une déception pourrait arriver peu de temps après)

L’éditeur par défaut utilisé par visudo est vi. Cela est modifiable en paramétrant des variables d’environnement comme $EDITOR. (En réalité, c’est plus compliqué: il y a deux autres variables d’environnement possibles et deux variables de configuration de sudo permettent de modifier de comportement des éditeurs par défaut. man sudo si vous pensez que cette complexité a un intérêt dans votre cas.)

(testé avec visudo version 1.9.5p2, version de la grammaire de visudo : 48)

Faim de loup, fin d’article

Ces outils sont pratiques pour éviter de mettre un service en panne ou s’enfermer dehors. Ils sont complémentaires de vérificateur générique de syntaxe JSON, YAML, etc.

Lire la suite…

Appel à sponsors pour la PyConFr

by Melcore from AFPy discuss

Bonjour,

comme chaque année la PyConFr est gratuite afin d’être ouverte à toutes et tous. Cependant, ce n’est pas gratuit à organiser. Bien que les membres de l’AFPy sont bénévoles, et que les locaux nous sont mis à disposition gratuitement par l’Université de Bordeaux, il reste encore quelques dépenses à faire pour la sécurité, les boissons chaudes et fraîches, le nettoyage, la captation vidéo…

Si vous êtes ou connaissez une entreprise ou une entité qui serait intéressée à sponsoriser une conférence francophone de python, n’hésitez pas à nous contacter à tresorerie@afpy.org

Rappel des contreparties :

Bénéfice Cœur (montant libre) Bronze (500 €) Argent (1000 €) Or (2000 €)
Nom et logo sur la page « Sponsors » :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
Présentation de 1000 caractères sur la page « Sponsors » - :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
Logo sur la page d’accueil - :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
Logo sur les affiches et documents imprimés - :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
Panneau dans les salles de conférence - - :heavy_check_mark: :heavy_check_mark:
Présentation de l’entreprise (2 min) en conférence plénière (samedi) - - :heavy_check_mark: :heavy_check_mark:
Stand dans le hall - - - :heavy_check_mark:

Trois niveaux « Platine » sont également disponibles. Ces niveaux spéciaux comportent les bénéfices du niveau « Or », plus une contrepartie particulière :


Transcription (4000 €)

Votre logo sur l’écran de transcription textuelle et sur les vidéos sous-titrées grâce aux transcriptions.

Boissons et viennoiseries (4000 €)

Votre logo sur les tables accueillant les viennoiseries et les boissons.

Vidéo (6000 €)

Votre logo au début des captations vidéos.

Les contreparties sont effectives dès réception du réglement.

4 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

La est la seule Pycon gratuite au monde grâce aux sponsors afin de permettre à toutes et tous de pouvoir y participer.

Lire la suite…

by AFPy - Mastodon from AFPy - Mastodon

Appel à sponsors PyconFr23 avec logo de l'afpy et une adresse mail tresorerie@afpy.og

Lire la suite…

Des nouvelles de WeasyPrint, ou comment développer du libre à (presque) plein temps

by liZe,Benoît Sibaud,Xavier Teyssier,Ysabeau from Linuxfr.org

WeasyPrint est un générateur de documents qui transforme du HTML/CSS en PDF. C’est écrit en Python, c’est libre (bah oui, sinon on n’en parlerait pas ici), et nous en avions déjà discuté ici il y a quelques années dans un petit article.

Avec le temps (plus de 11 ans depuis le premier commit, que le temps passe vite ma p’tite dame…), le logiciel a gagné une sacrée ribambelle d’utilisateurs avec plus de 750 000 téléchargements par mois. Parmi tous ces gens qui utilisent WeasyPrint, on a forcément rencontré plein de gens avec plein d’idées pour générer plein de drôles de trucs ! Nous avons croisé entre autres des rapports de sécurité informatique 🖥️, des livres de jeu de rôle 🎮️, des tickets 🎫️, des documents scientifiques 🧮️, des factures de sites de vente en ligne 📄️, des compte-rendus biologiques ⚛️, des modes d’emploi de fours 🧑‍🍳️, des lettres officielles 💌️, des étiquettes électroniques 🏷️, des affiches promotionnelles en pharmacies ⚕️, des diplômes universitaires 🎓️…

Forts de ce petit succès, Lucie Anglade et moi (Guillaume Ayoub) avons créé depuis deux ans une structure qui s’appelle CourtBouillon (oui, parce que notre autre passion est la bonne nourriture) dédiée au développement de WeasyPrint et de ses dépendances. Nous avons donc pu passer beaucoup de temps à travailler sur le logiciel et apporter plein de nouveautés, tout en nous posant beaucoup de questions pour assurer un modèle économique viable. Voilà ce que l’on aimerait partager avec vous.

Sommaire

Deux ans à toute vitesse

Depuis le début de l’an dernier, nous avons publié 4 versions majeures qui englobent une bonne liste de fonctionnalités dont voici les plus importantes :

  • les notes de bas de page,
  • les coupures de blocs après un certain nombre de lignes (pour que le texte ne dépasse pas de la page),
  • les coupures forcées ou interdites dans les colonnes,
  • le respect de la norme PDF/A (pour avoir des documents archivables),
  • les coupures de pages dans les cellules d’un tableau, les blocs flottants et les blocs absolus,
  • la gestion des polices bitmap (pratique pour faire des étiquettes électroniques parfaites au pixel près),
  • l’insertion de points de suite (mais si, vous savez ce que c’est, ce sont les petits points entre le nom d’un chapitre et le numéro de page dans une table des matières),
  • la génération reproductible de fichiers PDF,
  • le support des principaux sélecteurs CSS de niveau 4 (comme :is(), :where(), :has()),
  • sans oublier une génération bien plus rapide et des fichiers générés plus petits.

Nous en avons également profité pour créer pydyf, une bibliothèque bas niveau de génération de PDF, histoire d’avoir les mains libres pour ajouter certaines fonctionnalités. C’était une volonté depuis de longues années (pour supporter le format PDF/A par exemple) mais la spécification PDF a nécessité un peu de temps avant d’être apprivoisée 😉️.

Pour parler de tout cela, nous avons écrit une toute nouvelle documentation que nous espérons mieux organisée et plus claire. Nous avons également rédigé une longue série d’articles avec nos copains de Madcats qui ont créé de très jolis documents dont vous pouvez vous inspirer pour créer les vôtres.

En bref, on n’a pas chômé. Mais où a-t-on trouvé tout ce temps ?

Le temps et l’argent

La raison d’être de CourtBouillon est de créer, développer et maintenir des logiciels libres. Et pour cela, il faut avoir du temps, beaucoup de temps, vraiment beaucoup de temps.

Tout le monde veut toujours plein, plein, plein de fonctionnalités, et nous avons un avantage de ce côté-là : CSS en voit fleurir de nombreuses à un rythme soutenu. Comme nous nous appuyons rigoureusement sur ces spécifications, nous avons donc « juste » à les implémenter. Évidemment, à chaque fois qu’une nouvelle propriété est supportée par les navigateurs, les gens se ruent sur nous pour demander pourquoi WeasyPrint ne la supporte toujours pas alors que Chrome et Firefox la gèrent très bien depuis au moins 2 semaines (j’éxagère à peine 😁️). Pour la faire court : ça prend du temps.

Au-delà du code et de ses fonctionnalités, nous passons des jours entiers à trier les tickets, répondre aux questions, tweeter, écrire des articles, corriger des bugs et peaufiner la documentation. Ce travail est peu visible mais il prend bien plus de temps que ce que la plupart des utilisatrices et des utilisateurs imaginent. C’est pourtant un travail de fond nécessaire pour garder nos projets en bonne santé et ne pas crouler rapidement sous les demandes insatisfaites.

Encore au-delà ce travail peu valorisé se cache tout le travail de l’ombre que l’on ne voit pas du tout. Lire des spécifications, que ce soit pour CSS ou PDF, est devenu une seconde nature pour nous, et nous nous sommes habitués au langage étrange que l’on trouve dans ces documents. Certaines rumeurs disent même que nous en rêvons la nuit… Nous devons également faire particulièrement attention à la qualité du code. Nous sommes une toute petite équipe et nous avons, mine de rien, à maintenir un moteur de rendu HTML/CSS… Il est par conséquent très important de s’assurer au quotidien que la dette technique ne s’accumule pas et que l’architecture globale est toujours bien solide, sous peine de se retrouver sous l’eau dans le futur à l’ajout de la moindre fonctionnalité. Au-delà de l’interminable suite de tests (car oui, dans WeasyPrint nous avons plus de lignes de Python pour les tests que pour le code), il est nécessaire de retoucher l’architecture de nos bibliothèques de temps en temps, tout comme nous devons supporter les dernières versions de Python et des diverses dépendances que nous avons.

Pour avoir tout ce temps et en même temps gagner quelque argent pour manger (parce qu’on aime beaucoup ça, je vous le rappelle), nous fournissons divers services à des clients utilisateurs un peu partout dans le monde. Certaines fonctionnalités sont ainsi payées par des entreprises qui ont des besoins spécifiques et sont ensuite ravies d’avoir une belle version toute neuve qui répond parfaitement à leurs besoins. D’autres nous contactent pour avoir de l’aide à la création de documents, nous nous occupons alors de créer du HTML et du CSS aux petits oignons (miam) en accord avec leurs maquettes et leur charte graphique. Nous avons enfin un système de sponsoring et de dons qui ouvre droit à afficher un beau logo sur notre site et à avoir un support prioritaire par mail pour les questions techniques.

Et pour l’instant, ça marche.

Le futur

Même si CourtBouillon est jeune, nous arrivons actuellement à vivre en passant la grande majorité de notre temps de travail sur le libre.

Bien sûr, c’est une situation extrêmement grisante et souvent très épanouissante : qui n’a jamais rêvé de vivre du libre dans ce bon vieux repaire de libristes extrémistes qu’est LinuxFR 😍️ ? Nous avons travaillé notre communication pour toucher des personnes qui partagent nos valeurs, ce qui nous a amenés à rencontrer des gens absolument formidables. Nous avons pu croiser la route de clients disséminés un peu partout dans le monde, nous ouvrir à des problématiques que nous ne connaissions pas et apporter notre aide à des personnes pour lesquelles nous avons beaucoup d’estime et de sympathie…

Il y a bien sûr des contreparties à tout ce bonheur. Au niveau financier, si l’activité actuelle nous permet de nous rémunérer (et c’est déjà appréciable au bout de deux ans), nous sommes loin des standards auxquels nous pourrions postuler en tant qu’ingénieurs en informatique. Nos sponsors et nos clients nous apportent aujourd’hui la majorité de nos revenus, nous sommes donc évidemment soumis aux aléas de la demande avec une alternance de semaines chargées lorsque nous avons beaucoup de clients et des semaines plus creuses où nous pouvons nous atteler au travail invisible. Nous essayons donc au maximum de développer les dons et les sponsors récurrents pour assurer autant que possible la stabilité de notre modèle.

Au niveau des fonctionnalités qui arrivent (parce que c’est ça qui intéresse les gens, hein !), nous avons ouvert un sondage pour mieux connaître les besoins attendus. Celui de l’an dernier nous avait éclairés sur les points à traiter en priorité, nous avons donc pu mettre notre énergie au service des attentes les plus grandes… et bien sûr des clients qui ont gracieusement financé certains de ces développements ! Plusieurs fonctionnalités toutes fraîches sont déjà bien avancées : nous proposerons par exemple dans les prochains mois la possibilité de générer des fichiers PDF plus accessibles (avec le support partiel de PDF/UA) et le support des polices variables.

Et un jour, peut-être, nous pourrons enfin nous lancer à corps perdu dans le support de CSS Grid… si le temps nous le permet 😀️.

En attendant la suite

En attendant la suite des aventures, n’hésitez pas à nous suivre, à jeter un coup d’œil à WeasyPrint si vous ne l’avez jamais essayé, à ouvrir des tickets pour râler si vous rencontrez des problèmes, à nous soutenir si vous aimez ce que l’on fait, et à nous solliciter si vous avez des envies particulières.

Pour celles et ceux qui sont moins intéressés par le côté technique, nous sommes également ouverts pour discuter de gestion de projets libres, du lien à la communauté, de modèles économiques, et de tout ce qui pourrait vous intéresser sur le sujet !

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Dernières contributions à des logiciels libres par l'équipe Yaal Coop (été 2022)

by Éloi Rivard <eloi@yaal.coop> from Yaal

squeekboard

Un clavier virtuel pour Wayland

libcall-ui

Interface utilisateur pour les appels téléphoniques sous Linux

Mozilla Web Docs

Documentation sur les technologies du web, dont CSS, HTML et Javascript

canaille

Serveur OpenID Connect simpliste, basé sur OpenLDAP

Python

python-caldav

Debian Archive Kit (dak)

Programmes utilisés pour maintenir les archives du projet Debian

Python2 finira par disparaître

  • Suppression d'un contournement pour les version antérieures à 2.6 dans Webtest
  • Documentation : suppression d'un exemple basé sur python2 dans Honcho
  • Suppression de cas spécifiques à python2.7 dans setuptools
  • Suppression de python2 dans msgpack

tracker-miners

Collecteurs de données pour GNOME Tracker

poetry

Outil pour la gestion des dépendances et des paquets en Python

fhir-kindling

Brique de connexion à des serveurs de ressources FHIR

keyring_pass

Connecteur Password Store (pass) pour python-keyring

dnserver

Serveur DNS simpliste pour le développement

nextcloud-oidc-login

Plugin OpenID Connect pour nextcloud

Lire la suite…

Last FOSS contributions from the Yaal Coop team (summer 2022)

by Éloi Rivard <eloi@yaal.coop> from Yaal

squeekboard

An on-screen-keyboard input method for Wayland

libcall-ui

User interface for Linux phone calls

Mozilla Web Docs

Documentation about web technologies, including CSS, HTML, and JavaScript

canaille

Simplistic OpenID Connect provider over OpenLDAP

Python

python-caldav

Debian Archive Kit (dak)

Programs used to maintain the Debian project's archives

Python2 will disappear

  • Removal of a workaround for older releases than 2.6 in Webtest
  • Documentation: removal of an example based on python2 in Honcho
  • Removal of python2.7 specific cases in setuptools
  • Removal python2 support in msgpack

tracker-miners

Data collectors for GNOME tracker

poetry

Tool for dependency management and packaging in Python

fhir-kindling

FHIR resource and synthetic data set creation and management tool

keyring_pass

Password Store (pass) backend for python's keyring

dnserver

Simple development DNS server

nextcloud-oidc-login

Nextcloud login via a single OpenID Connect 1.0 provider

Lire la suite…

Pour les lyonnais − Meetup le 29 septembre

by grewn0uille from AFPy discuss

Bonjour à tous !

C’est la reprise des meetups sous le format présentation + moment d’échange, et pour l’occasion @freezed vient nous parler de Log Data Platform.

Rdv dès 19h le jeudi 29 septembre dans les locaux d’OVH Cloud à Lyon !

Merci de vous inscrire sur l’évènement meetup si vous venez :slight_smile:

Histoires d'un SRE perfectionniste sous pression

2022-09-29 19:00 (Europe/Paris) → 2022-09-29 21:00 (Europe/Paris)

2 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Développeuse / développeur frond-end

by Sylvain_Thenault from AFPy discuss

Le poste

Nous recherchons une nouvelle ou un nouveau camarade pour développer
avec nous une application de suivi énergétique à destination des
professionnels : collecter des données (factures fournisseurs, données
de consommation des distributeurs / capteurs, données de météo, etc)
pour les brosser, les croiser, bref, les rendre fiables,
compréhensibles, puis de les exploiter pour détecter les dérives, faire
des plans d’actions et afficher de beaux tableaux de bords dans le
navigateur de nos clients. Nous ne manquons pas d’occasion de nous
intéresser à des sujets tant pointus techniquement que d’actualité.

Nous appliquons au quotidien les principes agiles et les bonnes
pratiques du développement (gestion de sources distribuée, revue de code
par les pairs, intégration continue, etc).

Nous sommes basés autour de Toulouse et télé-travaillons majoritairement
(coworking 1 à 2 jours par semaine). Temps partiel et télétravail total
possible selon profil.

Profil

Nous recherchons une développeuse ou un développeur expérimentée,
capable de maintenir, développer et prendre des initiatives sur la
partie frond-end. Vous serez néanmoins amené à travailler sur l’ensemble
de l’application ainsi que sur les projets clients l’utilisant.
L’autonomie, la capacité à travailler en équipe et à intéragir avec les
clients sont indispensables.

Notre plateforme de suivi énergétique est construite sur une pile de
technologies libres dont il faudra maîtriser tout ou partie sur un poste
sous linux :

  • python (fastapi, pandas) / postgresql / kubernetes pour le back-end,
  • typescript / react (mui, echarts) pour le front-end.

Entreprise et philosophie

Lowatt est une jeune société, créée en 2018 qui accompagne ses clients
vers des économies d’énergies.

Nous hébergeons nous même notre plateforme et utilisons uniquement des
logiciels libres pour nos besoins quotidiens : element/matrix,
nextcloud, jenkins, vault, wekan, odoo pour ne citer qu’eux.

Nous proposons un cadre de travail attractif et motivant, avec des
valeurs d’ouverture et de partage. Nous sommes également attachés à la
transparence et offrons des possiblités d’implications en dehors du
cadre purement technique.

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Partage interpréteur

by pierre.imbaud from AFPy discuss

Je suis retraité depuis Janvier 2022, et j’ai un peu décroché.
Mais je fais une initiation pour un proche, on n’habite pas la meme ville, et je voudrais poursuivre cette initiation en remote.
Je cherche une solution facile à mettre en place pour partager un interpréteur, ipython de préférence, autre sinon.
Mon élève est sous windows, sinon screen aurait pu etre le bon support (je suis moi sous linux).
Jupiterlab: un peu trop lourd à mettre en place.
J’ai fait de telles sessions partagées, sur un interpréteur situé sur un site web, mais je ne sais plus ou.
Une idée, quelqu’un?
Je n’ai pas de vm sur le net, je ne suis pas à l’aise avec l’ouverture de mon firewall (freebox) à l’extérieur, utiliser un interpréteur mis à disposition par une communeauté serait l’idéal.
Merci!
Bon je peux ouvrir mon firewall

10 messages - 4 participant(e)s

Lire le sujet en entier

Lire la suite…

python: ellipsis operator (...)

by killruana from Linuxfr.org

J'ai découvert l'ellipsis operator de python (...). Dans le contexte où je l'utilise, c'est équivalent à pass, autrement dit ne rien faire. C'est utilisé principalement pour quand python attend qu'un bloc syntaxique soit rempli (corps d'une fonction, d'une boucle, …), mais qu'on a vraiment rien à y faire. Je trouve que ça permet de faire des interfaces plus élégantes.

from abc import ABC, abstractmethod

class CarElementVisitor(ABC):
    @abstractmethod
    def visitBody(self, element):
        ...

    @abstractmethod
    def visitEngine(self, element):
        ...

    @abstractmethod
    def visitWheel(self, element):
        ...

    @abstractmethod
    def visitCar(self, element):
        ...

plutôt que

from abc import ABC, abstractmethod

class CarElementVisitor(ABC):
    @abstractmethod
    def visitBody(self, element):
        raise NotImplementedError

    @abstractmethod
    def visitEngine(self, element):
        raise NotImplementedError

    @abstractmethod
    def visitWheel(self, element):
        raise NotImplementedError

    @abstractmethod
    def visitCar(self, element):
        raise NotImplementedError

La perte de l'exception n'est pas un problème car elle n'est de toute façon jamais lancé, abc (Abstract Base Classes, module python ajoutant les notions de classes abstraites et d'interfaces s'occupant d'en lancer une automatiquement:

$ ipython
Python 3.10.6 (main, Aug  3 2022, 17:39:45) [GCC 12.1.1 20220730]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from abc import ABC, abstractmethod
   ...: 
   ...: class CarElementVisitor(ABC):
   ...:     @abstractmethod
   ...:     def visitBody(self, element):
   ...:         ...
   ...: 
   ...:     @abstractmethod
   ...:     def visitEngine(self, element):
   ...:         ...
   ...: 
   ...:     @abstractmethod
   ...:     def visitWheel(self, element):
   ...:         ...
   ...: 
   ...:     @abstractmethod
   ...:     def visitCar(self, element):
   ...:         ...
   ...: 

In [2]: CarElementVisitor()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [2], in <cell line: 1>()
----> 1 CarElementVisitor()

TypeError: Can't instantiate abstract class CarElementVisitor with abstract methods visitBody, visitCar, visitEngine, visitWheel
Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

MEILLEURE FORMATION PYTHON

by Reeeflex from Linuxfr.org

Bonjour à tous,
Je souhaite absolument faire la meilleure formation python possible. Pouvez-vous me conseiller les meilleurs organismes SVP ? Je suis directeur logistique et ai créé un super outil hyper performant qui apporte une solution logistique globale dans mon entreprise (Groupe national de +ieurs usines). Je n'ai aucune formation informatique et j'ai fait ça avec VBA que j'ai appris seul. J'y ai pris beaucoup de plaisir et aimerai apprendre à programmer "pour de vrai lol" et créer mes propres solutions logistiques. Merci beaucoup pour vos conseils.

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Questionnaire CourtBouillon / WeasyPrint

by grewn0uille from AFPy discuss

Salut tout le monde !

Vous le savez peut-être déjà, avec @liZe on développe WeasyPrint.
C’est une librairie écrite en Python (bien sûr), qui permet de convertir des documents HTML/CSS en magnifiques PDFs :).

Il y a deux ans on s’était regroupé sous le nom CourtBouillon pour s’en occuper comme il faut, et en vue de cet anniversaire des deux ans, on a lancé un nouveau sondage pour connaître mieux les usages et attentes sur WeasyPrint et aussi pour évaluer un peu notre com sur CourtBouillon.

Donc si vous êtes utilisateur (en pro ou en perso) de WeasyPrint (ou d’un autre projet CourtBouillon), hésitez pas à répondre au sondage, il est ouvert jusqu’au 10 octobre.

Et sinon, hésitez pas à tester x)

7 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

Lead Developer Python - Orange Cyberdefense

by hugo.rifflet from AFPy discuss

Lead Developer Python

Vos missions

Vous intégrez l’équipe CTI du CERT dédiée au développement et à la maintenance d’une offre SaaS de Threat Intelligence commercialisée depuis 2020. Le service a pour mission de récupérer, en temps réel, des millions de données afin qu’elles soient contextualisées, agrégées, corrélées et scorées afin de protéger nos clients. La connaissance du domaine cybersécurité et de la Threat Intelligence sont un plus.

La plateforme est basée sur des technologies Big Data telles que ElasticSearch, Apache Kafka & Cassandra, ArangoDB, Redis, PostgreSQL et MongoDB ainsi que des process et outils de CI/CD tels que Jenkins, et Docker.

Le cœur de la plateforme est développé en langage Python.

Vous intégrerez l’équipe OCD en tant que lead developer. Le service est développé en suivant la méthodologie et un cadre agile mature. Il est soutenu par une quinzaine de développeurs à temps plein sur l’ensemble des composants.

Pour cela, vous participerez aux développements :

· En coordonnant les études techniques associées aux évolutions du service en concertation avec les développeurs

· En participant au développement et au design des nouveaux composants ainsi que l’évolution des composants existants

· En garantissant le suivi et le respect des bonnes pratiques et critères de qualité du code (tests unitaires, fonctionnels, revue de code, etc.)

· En garantissant le maintien en conditions opérationnelles de la plateforme via du monitoring, de la maintenance préventive et si nécessaire des hotfix

· En anticipant les problématiques de scalabilité et de résilience

· En participant aux recettes et mise en production

Et pourquoi vous ?

Vous êtes diplômés d’un bac+3 minimum et vous disposez de 3 à 4 ans d’expérience réussie en tant que développeur.

Vous disposez de compétences avancées sur les technologies Python, ElasticSearch et Docker.

La connaissance d’autres technologies utilisées par le projet, ou du domaine de la cybersécurité et la Threat Intelligence sont un plus.

Votre niveau d’aisance en anglais doit vous permettre d’échanger de manière quotidienne à l’oral comme à l’écrit sur le projet.

Capable d’analyser des problèmes non structurés, vous savez être force de proposition sur les solutions à mettre en place.

Autonome et motivé(e), vous savez faire preuve de curiosité et de créativité pour contribuer à notre innovation.

Et si vous avez un attrait pour le secteur de la cybersécurité ou l’envie d’en découvrir plus, c’est encore mieux.

Le poste, basé de préférence à Lyon (69) peut également être ouvert à La Défense (92) et est à pourvoir dès à présent.

Pour postuler

https://orange.jobs/jobs/v3/offers/117146?lang=fr

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Conférence Mercurial Paris du 21 au 23 septembre 2022 (évènement annulé)

by franckdev,Julien Jorge,Benoît Sibaud,Pierre Jarillon,Ysabeau from Linuxfr.org

La conférence Mercurial Paris 2022, est une conférence internationale dédiée au gestionnaire de version Open Source Mercurial. Elle se tiendra fin septembre 2022 à Paris, Université Paris Sorbonne.

Mercurial est un gestionnaire de versions, libre et multi-plateforme, qui aide les équipes à collaborer sur des documents tout en conservant l’historique de l’ensemble des modifications. Équivalent fonctionnellement aux biens connus Git ou Svn, il s’en distingue sur de nombreux points techniques, ergonomiques et pratiques.

Doté d’une interface orientée utilisateur facile d’accès et simple à comprendre, il offre des capacités avancées de personnalisation du workflow et s’illustre aussitôt qu’il y a besoin de performances adaptées aux très gros dépôts. (Les équipes de Google et Facebook utilisent en interne des solutions basées sur Mercurial pour gérer l’ensemble de leur code source.).

Après une première édition en 2019, l’équipe d’Octobus aidée de Marla Da Silva, organisent cette nouvelle mouture qui se déroulera du 21 au 23 septembre dans les locaux de l’Irill (Initiative de Recherche et Innovation sur le Logiciel Libre), Université Sorbonne, Paris.

Titre de l'image

La participation à l'évènement nécessite votre contribution pour absorber les frais d'organisation. 40€ pour la journée de workshop, 40€ pour la journée de conférence, repas du midi compris. Les sprints sont gratuits. Réserver mon ticket.

Si vous avez un statut étudiant et n'avez pas le budget pour participer aux trois jours, contactez-nous.

Vous trouverez l’ensemble des informations sur le site https://mercurial.paris dont voici le programme résumé :

Mercredi 21 septembre, Workshops

La première journée sera dédiée aux ateliers. L’occasion de découvrir, se former, évoluer sur le sujet.

  • Mercurial usage and workflow
  • Heptapod: Using Mercurial with the GitLab DevOps platform

Jeudi 22 septembre, Talks

Présentations d’experts internationaux et retours d’expérience en entreprise.

  • Stability and innovation
    • Mercurial and Logilab
    • Using Mercurial, evolve and hg-git in an academic context
    • Mercurial usage at XCG Consulting
    • XEmacs and Mercurial: fifteen years of good experiences
  • Toolings
    • Heptapod, three years of Mercurial in GitLab and growing
    • Lairucrem presentation
  • Mercurial at Scale
    • How Mercurial is used to develop Tryton
    • Mercurial usage at Nokia: scaling up to multi-gigabyte repositories with hundreds of developers for fun and games
    • Mercurial usage at Google
  • Development Update
    • Mercurial Performance / Rust
    • State of changeset evolution

Vendredi 23 septembre, Sprints

Enfin, le vendredi 23 se dérouleront les “sprints”, groupes de travail pour faire évoluer Mercurial, sa documentation, son eco-système, etc. Pour toute personne contributrice, développeuse expérimentée ou simplement curieuse, c’est le moment de contribuer !

À propos d'Octobus

Octobus est une société de service française dédiée au logiciel libre, spécialiste des langages Rust et Python, son équipe totalise le plus grand nombre de contributions au logiciel Mercurial dont elle maintient l’infrastructure de développement et est en charge de la distribution des nouvelles versions.

Octobus est également éditrice de la solution Heptapod, forge logicielle libre prenant en charge Mercurial Hg mais aussi Git. Une solution d’hébergement en France clef en main est également proposée en partenariat avec Clever Cloud. Une instance publique dédiée à l'hébergement de logiciels libres est disponible sur foss.heptapod.net (pour y soumettre).

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Appel à graphiste pour la réalisation du logo de la PyConFr 2023

by entwanne from AFPy discuss

Bonjour,

Comme vous le savez peut-être, la prochaine PyConFr devrait avoir lieu en février 2023 à Bordeaux (on a encore quelques points de détails à régler avant d’annoncer officiellement les dates) ! :tada:

Dans cette optique on va remettre au goût du jour le site de la PyConFr et on serait à la recherche d’une personne avec des talents de graphiste pour travailler sur le logo de cette nouvelle édition.

Alors n’hésitez pas à faire vos propositions !

Merci d’avance :wink:

27 messages - 11 participant(e)s

Lire le sujet en entier

Lire la suite…

Un démineur pour apprendre...

by Space_e_man from Linuxfr.org

Bonjour,

Voici donc un démineur en Python, en mode textuel et graphique Tk.

En mode textuel, il faut prendre la main en interactif après avoir exécuté demineur.py

>>> explorer((5,5))
False
>>> print_cases()
__________________________1X1___
________111_______111_____1X1___
______113X2_______1X1_____111___
______1XXX2_______111___________
11____11211_____________________
X1______________________________
11___________________111________
_____________________1X1________
_____________111_____111________
_____________1X1________________
_____________111________________
________________________________
________________________________
111_____________111_____________
XX1_____________1X1_____________
XX1_____________1X1_____________
Sur les 10 bombes, il vous en reste 10 à trouver.

demineur-g.py permet d’avoir une interface graphique. Le nombre de bombes se trouve indiqué dans la barre de titre.

Titre de l'image

Je l’ai fait dans le cadre du cours que je commence à donner à mes élèves pour apprendre Python.

Moi-même j’apprends le langage depuis peu. Il y a donc certainement plein d’améliorations à faire sur ce code. Je compte sur vos commentaires pour m’aider à améliorer celui-ci.

Je pense devoir faire une version sans récursivité car avec de trop grands terrains, Python atteint une limite… À moins qu’il ne soit possible (dans le code-même ?) de paramétrer cette limite ?

Bien entendu, d’un point de vue didactique, cela doit rester simple, pas trop long, etc.

Merci d’avance:)

(page web dédiée sur mon site)

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

La première bêta de Slidge (passerelles XMPP) est dehors !

by Nicoco from Linuxfr.org

Note: ceci est la traduction de ce billet de mon blog, avec plus de blagues reloues dedans parce que je suis quand même plus à l'aise en français.

Après un an et demi de travail ~acharné (presque autant que pour un album d'Asterix), une très longue pause et quelques ré-écritures, c'est avec joie et fierté que je vous annonce une nouvelle révolution dans le monde de l'informatique, et dans l'histoire de l'humanité en général, la sortie de la première bêta de Slidge.

Noël est en avance cette année

Slidge? Kekecé?

Slidge te permet d'utiliser ton client XMPP habituel pour parler à tes potes qui n'ont pas encore entendu parler de notre seigneur et sauveur XMPP et qui utilisent d'autres réseaux de messagerie instantanés "historiques". C'est un composant serveur XMPP, qui se comporte comme un client alternatif pour l'autre réseau tout pourri (=pas XMPP), en utilisant ton compte sur cet autre réseau. Tes potes "historiques" ont un "JID marionnette" (gros-naze@msn.example.com) et tu leur parles en oubliant que ces nazes t'ont dit que tu étais relou la dernière fois que tu as entamé ta diatribe sur les protocoles ouverts, la décentralisation, et Meta qui tue des bébés phoques; et qu'ils ont refusé d'essayer Quicksy sur leur ordiphone.

Slidge à proprement parler n'est en réalité qu'une bibliothèque, et n'est utile pour un utilisateur final qu'à travers ses plugins. Bonne nouvelle, il existe déjà des plugins pour 7 différents réseaux tout pourris (+ 1 pour être notifié de réponses à ses commentaires sur hackernews, mais c'est vraiment un gadget).

Mais pourquoi tu as fait ça?

Après avoir découvert la messagerie instantané avec mIRC, ICQ et ensuite MSN dans les années 90/début 2000, j'ai été émerveillé par pigdin et j'en ai été un utilisateur ravi pendant des années (et j'ai sacrément impressionné du monde avec son mode "madame Irma").

Mais depuis quelques années, depuis que j'ai finalement cédé aux sirènes de la téléphonie mobile intelligente, j'étais assez frustré de ne pas avoir la même chose, mais en mode "multi périphériques" (waou).

Heureusement, c'est possible -théoriquement- avec les passerelles XMPP, mais à part l'excellent biboumi pour IRC, ça n'a jamais marché aussi bien que j'aurais voulu, pour les réseaux tout pourris qui m'intéressent, du moins. Spectrum2 est le logiciel généralement recommandé pour les passerelles XMPP, mais il n'est plus tellement mis à jour et notamment, ne compte pas implémenter les nouveaux trucs modernes™ comme les réactions aux messages (que je trouve pas aussi inutiles qu'elles n'y paraissent à première vue; seul movim les implémente à ma connaissance, j'espère que d'autres clients suivront).

Mais ça marche vraiment?

Pour moi oui.
Mais pour l'instant que pour les messages directs; les groupes devraient faire partie de la version 0.2.0, un jour.

Je serais ravi si vous le testiez chez vous et/ou que vous jetiez un œil au code source. Je suis avide de retours de tout types, rapports de bogue comme critiques sur l'implémentation, les technos utilisées, le style, n'importe quoi ! Écrire du code un peu moins dégueu est une des raisons qui m'ont poussé à m'investir dans ce projet, et je suis pas susceptible (enfin pas trop, quoi).

Des détails techniques

Slidge est écrit en python asynchrone, avec slixmpp. J'essaye d'y utiliser mypy de manière intelligente, et y a même quelques tests (trop peu…) qui se lancent avec pytest.

Mon plan c'est de rendre l'écriture de plugins facile avec l'interface des plugins, qui devrait raisonnablement abstraire les spécificités de XMPP et exposer des méthodes et classes faciles à utiliser. Normalement, grâce à la richesse de l'écosystème python, les plugins ne devraient être que de fines couches entre bibliothèques spécifiques à un réseau tout pourri et l'interface des plugins.

Captures d'écran

Plutôt que de tristes captures d'écran de logs, voici movim (gauche) et l'application signal officielle (droite):

Gauche: movim; droite: application de bureau signal

C'est-y pas trop cool ? Ça marche aussi avec n'importe quel autre client XMPP, et du coup c'est encore plus cool.

Mais comment je fais pour l'essayer ?

Le plus simple c'est d'utiliser des conteneurs, comme moi sur mon serveur XMPP perso, mais il y a aussi un paquet pypi pour ceux qui préfèrent.

Cloner le dépôt git et tout essayer localement est très facile avec docker-compose, qui lance un serveur XMPP de test localement et un client XMPP dans le navigateur.

Faire ça est une très bonne idée, comme ça vous aurez déjà votre environnement de développement tout prêt pour réparer le bug que vous avez trouvé et/ou implémenter une nouvelle fonctionnalité. ;-)

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Récupérer le n° de ligne QTableWidget avec une QCheckBox intégré

by jbone from AFPy discuss

Bonjour,

Débutant voir même, extrêmement novice avec Python, je viens de réussir à créer et alimenter via une BDD une QTableWidget.

Certes, mon code est certainement loin d’être parfait mais pour le moment, il fonctionne plus ou moins.

Pour des raisons d’esthétisme, j’utilise une feuille de style CSS qui, ajoute une image lors de la coche des QCheckBox.

Si je vous parle de ça ! C’est tout simplement parce que j’ajoute à la QTableWidget, l’objet QCheckBox avec un appel de fonction lors du clique sur celle-ci.

L’appel de la fonction lors du clique fonctionne correctement, cependant, pour les besoins de mon utilisation, je n’arrive pas à récupérer le n° de la ligne où est située la QCheckBox qui vient d’être cochée.

Je vous note ci-dessous le code pour que cela soit le plus compréhensible pour vous.

       # boucle de lecture de la requête
        try:
            while self.query.next():
                # widget checkbox
                checkbox_widget = QWidget()
                checkbox_widget.setStyleSheet('background-color: transparent;')

                layout_cb = QtWidgets.QHBoxLayout(checkbox_widget)
                self.table_ep_cb = QtWidgets.QCheckBox()
                layout_cb.addWidget(self.table_ep_cb)
                layout_cb.setAlignment(Qt.AlignmentFlag.AlignCenter)
                layout_cb.setContentsMargins(0, 0, 0, 0)
                checkbox_widget.setLayout(layout_cb)

                tablerow = self.table_ep.rowCount()

                self.table_ep.insertRow(tablerow)

                self.table_ep.setItem(tablerow, 0, QtWidgets.QTableWidgetItem((self.query.value('col1'))))
                self.table_ep.setItem(tablerow, 1, QtWidgets.QTableWidgetItem((self.query.value('col2'))))
                self.table_ep.setItem(tablerow, 2, QtWidgets.QTableWidgetItem((self.query.value('col3'))))
                self.table_ep.setItem(tablerow, 3, QtWidgets.QTableWidgetItem((str(self.query.value('col4')))))
                self.table_ep.setItem(tablerow, 4, QtWidgets.QTableWidgetItem((str(self.query.value('col5')))))
                self.table_ep.setItem(tablerow, 5, QtWidgets.QTableWidgetItem((str(self.query.value('col6')))))
                self.table_ep.setItem(tablerow, 6, QtWidgets.QTableWidgetItem((self.query.value('col7'))))
                self.table_ep.setItem(tablerow, 7, QtWidgets.QTableWidgetItem((str(self.query.value('col8')))))
                self.table_ep.setItem(tablerow, 8, QtWidgets.QTableWidgetItem((str(self.query.value('col9')))))
                self.table_ep.setCellWidget(tablerow, 9, checkbox_widget)

                self.table_ep.resizeRowsToContents()

                self.table_ep_cb.stateChanged.connect(self._itemClicked)

        except self.query.lastError() as error:
            print("Erreur de chargement de la requête SQL", error)

        self.query.finish()

La fonction (simple pour le moment):

        row = self.table_ep.currentRow()
        print(row)

Vous remerciant à tous d’avance pour votre aide.

3 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

TD et TP de Python (introduction à la programmation) à l'Université de Saint-Étienne

by twitwi from AFPy discuss

Bonjour à tous,

Si vous pouvez être intéressés par intervenir en donnant des TD ou TP de programmation en Python à l’université de Saint-Étienne (UJM, Fac. des sciences, Licence 1 principalement), contactez moi pour les détails !
Il y a des possibilités aussi au premier ou second semestre.

Merci de faire tourner le message aux gens qui pourraient être intéressés autours de vous.

Merci,
Rémi Emonet

2 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

La cochonnerie en boite que sont les systèmes de dépendances

by small_duck from Linuxfr.org

Aujourd'hui, un autre journal qui dénonce grave.

Il est de bon ton de nos jours pour chaque langage de programmation qui se respecte de débarquer avec un système intégré de dépendances (ou plusieurs, mais nous y reviendrons) permettant plus ou moins automatiquement de télécharger des paquets logiciels. Souvent, il est possible de faire tourner un dépôt de paquets en interne, où l'on pourra d'une part cacher ses dépendances externes, et d'autre part envoyer ses propres paquets. L'on nommera Maven pour Java, Npm pour Javascript, Cpan pour Perl, Cargo pour Rust, Opam pour Ocaml, et même Conan pour C++ (je vais me laver la bouche au savon et je reviens). Et Pip et Conda pour Python.

J'essaie d'aimer le Python. J'essaie vraiment fort. C'est juste Python qui ne m'aime pas. Et en particulier la daube infecte qu'est Conda, Miniconda, Mamba et tous leurs amis.

Déjà, le concept d'environnement. Alors ça semble vachement malin sur le papier, pouvoir dire "aujourd'hui, je mets ma casquette de data scientist, je veux Panda, Keras, et Numpy, bim, je charge l'environnement kivabien, demain je mettrai ma casquette de webdev, et je voudrai Flask et Selenium". Sauf qu'en pratique, c'est vite le bordel, dans quel environnement je suis, comment j'en change, qu'est-ce qu'il y a dedans, comment je le mets à jour. Au point que Conda décide sans rien me demander d'aller bidouiller mon prompt pour y ajouter le nom de l'environnement courant. Non mais de quoi je me mêle ? Ça va vite être un mélasse sans nom si chaque technologique que j'utilise décide d'aller se torcher dans mon .bashrc !

Ensuite, histoire que ça marche chez tout le monde, mon équipe a mis en place des environnement partagés, c'est à dire que quand je récupère la dernière version de notre code source, régulièrement y'a des scripts qui pètent, et il faut simplement aller faire tourner une bordée de scripts moches qui vont aligner l'environnement sur ma machine. Quand ça marche.

Finalement, bien sûr, ce tas de bouse se retrouve à partir en Prod. Et comme une certaine catégorie de développeurs a décidé que la modernité, c'était d'aller chercher des petites briques partout et de les combiner de manière plus ou moins heureuse parce que ça ressemble furieusement à une compétition de qui aura le plus de dépendances, on se retrouve avec des petits scripts tout simples qui ne peuvent s'empêcher d'aller appeler un obscur paquet Python pour faire quelque chose qui tenait en une ligne de bash. Et qui débarquent avec toutes leur dépendances à la noix. Bon, et puis, ces paquets, ils sont sûrs ? Ils ont des bugs ? Est-ce que la mise à jour risque de causer des problèmes ? On s'en tamponne, #YOLO !

Pouf pouf.

Ne prenons pas les enfants du bon dieu pour des canards sauvages. Les gens qui ont développé ces trucs savaient ce qu'ils faisaient, du moins je l'espère : il s'agit à mon sens d'une approche très monoposte (et monolangage) du développement, justement d'une manière très data scientist, comme on dit. Je bidouille un truc dans mon notebook Jupyter, tiens, je ferais bien tel traitement, une ligne de commande et hop, j'ai téléchargé la chose, je teste, ça marche, super, ça marche pas, je teste autre chose. Mais le raisonnement ne tient plus lorsqu'il s'agit d'utiliser le Python comme langage de script secondaire, en équipe, et de déployer des services un poil stables en production.

Je ne connais pas la solution parfaite. Les paquets système (RPM, deb) sont stables, testés, et mis à jour de manière intelligente, mais parfois on a besoin d'une version plus récente. Faire ses propres paquets systèmes et les charger dans un Docker ou un Puppet semble bien, mais c'est un investissement en temps (et en larmes). Les systèmes de paquets liés à un langage en particulier sont vite invivables, moches et instables et pètent quand ils veulent.

Donc, allez vous faire voir, Mabma, Conda, et tous vos amis. Et non, chef, je refuse catégoriquement d'intégrer Conan à notre base de code C++ juste parce que "les systèmes de dépendances, c'est le futur", parce que là ça juste marche, alors pas touche.

Alors, s'il vous plaît, dites moi comment vous faites pour échapper à l'enfer des dépendances.

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Utilitaire Python pour gerer les commandes NordVpn sous linux Debian.

by bdeschabis from AFPy discuss

NordVpn ne délivre pas de GUI pour linux, contrairement à Windows. Mais il fournit un utilitaire et une liste de commandes qui permettent de faire fonctionner correctement ce VPN. Pour les amateurs de la ligne de commande, cela est suffisant.
Pour les autres : ce programme Python3 ne fait que composer et lancer lui-même ces commandes en présentant des fenêtres de choix (choix du pays et de la ville de sortie du VPN, choix de la technologie OpenVpn ou Nordlynx, Obfuscation du serveur, Killswitch, autoconnect) dans lesquelles il suffit de cliquer pour ouvrir le VPN NordVpn.

Ce programme ne peut intéresser que ceux qui utilisent sous linux NordVpn. Il fonctionne bien sous Debian, Mint, Kubuntu.
Mais mais mais … : je ne suis pas programmeur, et débutant en Python3 TK. Une relecture et des conseils seraient bien utiles. Comment partager et montrer le source ?

2 messages - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Programme Py modif add suppr reorg lignes de NVRAM multiboot UEFI

by bdeschabis from AFPy discuss

Programme Python3 (linux) pour modifier, ajouter, supprimer, créer des lignes de boot_loaders dans la NVRAM d’un PC multi-système. Ce programme fonctionne très bien sur des PC et vieil Appel avec OS Debian, Mint, Kubuntu. Il permet en particulier de replacer en tête de liste de NVRAM le loader qu’une installation de Grub ou de Windows10 ou Windows 11 a repoussé en seconde position, sans passer par le BIOS. En fait, il compose et lance les commandes “efibootmgr” qui sinon auraient dû être laborieusement écrites et lancées dans un terminal avec de forts risques d’erreurs graves (exemple : sur un PC comportant 2 SSD et 3 HDD, systèmes, CM Asus, systèmes Win10, Mint, Debian, Win 11, et lanceur habituel Refind)

Mais mais mais… je suis débutant autodidacte en programmation Python et pas du tout programmeur. Une relecture et des conseils seraient bienvenus. Comment partager le code et montrer les ScreenShots ?

4 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Sondage sur l'utilisation de Python, Django, sur Debian

by Vincent from AFPy discuss

Bonjour,

Que vous utilisez ou non Django sur Debian, j’ai mis un petit sondage ici: Sondage Python Django - Support Debian - debian-fr.org.

Environ 50% des participants actuels sur Debian ne programment pas en Python; c’est l’occasion d’associer à ce sondage une ou deux réponses de remerciements tout en faisant la promotion de l’activité principale de l’AFPy par une ligne ou deux.

Pas de doute, pour beaucoup de développeurs, il y a une complémentarité dans les deux sens entre ce forum et celui sur https://www.debian-fr.org !

2 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Moniteur de tunnels SSH Tunnelmon en version 1.1

by nojhan,Benoît Sibaud,Florent Zara from Linuxfr.org

Tunnelmon, un moniteur de tunnels sécurisés SSH, sort en version 1.1. Il est publié sous GPLv3. Le code est en Python.

  • Il propose une interface de supervision et de gestion des tunnels SSH s'exécutant sur un système.
  • Il peut afficher soit une liste des tunnels sur la sortie standard, soit une interface interactive en mode texte dans le terminal.
  • Il peut également afficher la liste des connexions réseaux issues de chaque tunnel et leur état.

Capture d'écran

Tunnelmon gère aussi les tunnels mis en place avec autossh, une application qui peut redémarrer automatiquement vos tunnels en déroute.
Avec cette version 1.1, il gère maintenant les trois méthodes de redirection de ports proposées par SSH.

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Pyrates - Initiation ludique, pédagogique & gratuite au language Python

by lucas.cimon from AFPy discuss

J’ai récemment eu le plaisir de découvrir via @sebsauvage le site https://py-rates.fr de Matthieu Branthome :

Il s’agit d’un court site web ludique dédié à l’apprentissage de la programmation en Python, et adapté à des débutants complets comme des enfants ayant déjà découvert Scratch.

Ce projet est issu d’une thèse en didactique de l’informatique portant sur l’enseignement-apprentissage de la programmation informatique dans l’enseignement secondaire.

J’ai contacté l’auteur à propos des sources et de la licence logicielle, et il m’a répondu ceci :

Concernant le code source, il est pour l’instant dans un repository privé sur GitHub. Je diffuserai le code en GPL quand je trouverai le temps de le faire. Cette année, je suis sur la rédaction de mon manuscrit de thèse donc je suis bien occupé.

Je vous encourage en tout cas à tester le site, il est très amusant et bien conçu, et à partager cette belle ressource pédagogique autour de vous !

2 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Débutant cherche documentation

by Flyounet from Linuxfr.org

Bon(jour|soir),

J'ai commencé il y a peu (une semaine), une autoformation sur Python (avec l'aide Pluralsight).

Je pense avoir compris les bases, mais je bute principalement sur la recherche de documentations.

Premièrement, je n'arrive pas à trouver un équivalent des man pour les modules python. Ça me semble quand même plus simple de ne pas sortir de mon terminal.

Genre ce qui m’intéresse, c'est de trouver la documentation de sys.path.insert(). Or dans la doc Python pour ce module, je ne trouve pas la référence à la méthode insert().

J'ai vu que la méthode existait bien pour ce module :

>>> from sys import path as test
>>> dir(test)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

Je sais qu'elle a besoin de 2 arguments :

>>> test.insert()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: insert() takes exactly 2 arguments (0 given)

Mais là, je bloque, je n'arrive pas à savoir quels sont les arguments.

Et pendant que j'écris ces lignes, je découvre help() :

>>> help(test.insert)
Help on built-in function insert:

insert(...) method of builtins.list instance
    L.insert(index, object) -- insert object before index

Bon OK, finalement je m'en sortirai avec ça. Mais finalement, y a-t-il une documentation facilement accessible (dans mon terminal) sur Python quand on débute ?

Merci.

Bonne (soir|journ)ée.

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Static Site Generator

by Mimoza from Linuxfr.org

Bonjour'nal
Il y a quelques temps je me suis décidé a monter un blog perso pour raconter quelques idées que j'ai en tête. Je me suis donc mis en quête d'un outil qui me conviendrait.

Je ne voulais pas d'un mastodonte lié à une BDD, mes besoins étant modeste je voulais quelque chose de léger et hébergable facilement. Donc j'ai assez rapidement exclu les Wordpress, DotClear et autre supertanker du domaine.

J'ai jeté un œil aux «Flat file CMS», tel que Grav. Ils sont sympa avec une jolie interface mais requière PHP pour fonctionner. Pas insurmontable pour l'hébergement, mais je voulais quelque chose d'encore plus simple.

C'est aussi à ce moment que je me suis posé des questions sur la pérennité de ce que j'allais produire. C'est à dire sous quel format ma production allait être stocké. Mes besoin n'étant pas immense du Markdown me paraissait tout à fait suffisant, mais en grattant un peu j'ai découvert «ReStructuredText» qui semble plus poussé et un peu mieux normalisé. Cette deuxième possibilité entrait en ligne de compte sans être discriminatoire.

Enfin j'arrête mon choix sur un «Static Site Generator», tout se passe en fichier plat avec une phase de construction pour obtenir du pur HTML. Avantage non négligeable, pas de sécurité a prendre en compte, ce qui m'allait bien. En plus avec les «worker» Git[lab|hub] et leur possibilité de «pages», il est possible avec un commit sur un dépôt d'automatisé la génération et publication, TOP !

Passons aux choses sérieuses, quel produit prendre. Je vous passe les heures de recherche (merci Jamstack pour finalement opter pour «Pelican». Pourquoi ? Parce que je suis plus a l'aise avec du Python que du Go. Donc même si Hugo a le vent en poupe avec des performance largement supérieur, mes petits besoins n'ont pas besoin de grosse perfs.

Et me voilà partis a essayer de monter tout ça. Je passe un temps certains a me battre avec l'automatisation sous Gitlab (le modèle proposé faisait des choix «étrange», heureusement corrigé maintenant) et je regarde les thèmes proposés.
Première déception : ils sont datés, et pas qu'un peu pour certains, sans compter ceux qui ne sont même plus fonctionnel :-(
J'arrive tout de même a en trouver un a mon goût et le test, malheureusement il n'est qu'a moitié fait et remonte des erreurs. Je me dit que je vais pouvoir ajouter ma pierre a l'édifice en corrigeant ça et terminant le travail. La correction est finalement assez trivial et j'en profite pour faire quelques retouches. Je découvre aussi la source du thème et voie qu'il y a mieux. Donc je me dit que je pourrais repartir de zéro sur un thème encore plus joli !

Je monte donc un environnement pour faire tout ça, récupère tout ce qu'il faut et commence à m'atteler à la tâche. Je découvre un peu plus Jinja pour le templating, que je trouve assez bien fait et intuitif. En dédupliquant le code HTML, j'arrive rapidement a vouloir utiliser l'héritage de Jinja. Et là c'est la catastrophe :-( je n'arrive pas a comprendre pourquoi ça fonctionne avec certains block déjà présent et pas le nouveau que j'essaye de faire. Je retourne le soucis dans tous les sens pour finalement comprendre que le soucis ne viens pas de moi.

Deuxième déception : en lisant cette demande de changement et relisant attentivement la doc, sans la survoler et comprendre ce qu'il veulent vraiment dire) je comprend que Pelican souffre d'un soucis de chargement des ressources lors de la processus de Jinja. Donc soit on se base sur leur thème «simple» pour avoir un bout d'héritage, soit on duplique le code dans tous les coins :-(
Au vu de l'ancienneté du bug remonté (2013) il est peu probable que ça se débloque. Il y avait un petit espoirs avec cet autre bugmais fermé automatiquement par manque d'activité :-( il semble tout de même y avoir une voie de contournement mais pas super propre.

Bon dans tout ça je me dit que je devrais peut être changer d'outil, tel que MkDocs qui a l'air d'avoir une bonne popularité mais est plus orienté documentation technique …

Bref, qu'es-ce que tu utilise toi ?

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

PyPI déploie le système 2FA pour les projets critiques écrits en Python

by Startrek1701,Benoît Sibaud,Xavier Teyssier,palm123 from Linuxfr.org

PyPI (de l’anglais « Python Package Index ») est le dépôt tiers officiel du langage de programmation Python. Son objectif est de doter la communauté des développeurs Python d’un catalogue complet recensant tous les paquets Python libres.
Google, par l’intermédiaire de l’Open Source Security Foundation (OpenSSF) de la Linux Foundation, s’est attaqué à la menace des paquets malveillants et des attaques de la chaîne d’approvisionnement des logiciels open source. Elle a trouvé plus de 200 paquets JavaScript et Python malveillants en un mois, ce qui pourrait avoir des « conséquences graves » pour les développeurs et les organisations pour lesquelles ils écrivent du code lorsqu’ils les installent.
PyPI déploie le système 2FA (pour double authentification ou authentification à deux facteurs) pour les projets critiques écrits en Python.

Ainsi, comme il est possible de le lire sur le compte twitter de PyPI (version nitter fdn.fr ou censors.us), le dépôt va implémenter le 2FA obligatoire pour les projets critiques écrits en Python.

Nous avons commencé à mettre en place une exigence 2FA : bientôt, les responsables de projets critiques devront avoir activé 2FA pour publier, mettre à jour ou modifier ces projets.

Pour s’assurer que ces mainteneurs puissent utiliser des méthodes 2FA fortes, nous distribuons également 4000 clés de sécurité matérielles !

Clé Titan

Les 4000 clés de sécurité matérielles sont des clés de sécurité Google Titan. Ces clés seront distribuées aux responsables de projets, avec l’aide de l’équipe de sécurité open source de Google.

Vente autorisées, mais pas partout

La vente des clés Titan n’est autorisée que dans certaines régions géographiques. Ainsi, seuls les développeurs d’Autriche, de Belgique, du Canada, de France, d’Allemagne, d’Italie, du Japon, d’Espagne, de Suisse, du Royaume-Uni et des États-Unis peuvent en recevoir une gratuitement.

Le 2FA en progressions

Il y a déjà un certain nombre de développeurs qui ont activé le 2FA, ainsi, et en toute transparence selon PyPI, le dépôt publie les données sur les comptes 2FA.
Selon PyPI, il y a déjà plus de 28 600 utilisateurs avec 2FA activé, dont près de 27 000 utilisant une application TOTP (par exemple FreeOTP+ sur mobile Android ou via KeepassXC sur un ordinateur).

La PSF (Python Software Foundation) indique qu’elle considère comme critique tout projet figurant dans le top 1 % des téléchargements au cours des six derniers mois. Actuellement, il y a plus de 350 000 projets sur PyPI, ce qui signifie que plus de 3 500 projets sont considérés comme critiques. PyPI calcule ce chiffre quotidiennement, de sorte que le don de Titan devrait permettre de couvrir une grande partie des mainteneurs clés, mais pas tous.
Bien que la plupart des développeurs soient familiers avec le système 2FA, cette exigence pourrait créer des difficultés de connexion.

En effet, si, par exemple, un utilisateur perd sa clé 2FA et qu’il n’a pas configuré d’autres options 2FA, il risque de perdre l’accès à son compte et donc la nécessité de récupérer entièrement un compte, ce qui est lourd et prend du temps à la fois pour les mainteneurs et les administrateurs de PyPI. Il serait donc préférable d’avoir plusieurs méthodes 2FA pour réduire les perturbations potentielles si l’une d’entre elles est perdue.

Conclusion

Est-ce que le 2FA va réellement sécuriser les projets Python ? C’est l’avenir qui le dira. En attendant, il semblerait que PyPI et plus globalement la PSF ait décidé de prendre les choses en main quant à la sécurité des projets Python.

N. D. M. : voir aussi le journal PyPI et les projets critiques sur le même sujet, abordant notamment l'ajout de contraintes supplémentaires (complexité, temps, éventuel coût matériel, vérification régulière du 2FA à effectuer, etc.) pour les passionnés/hobbyistes.

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Quelqu'un pour me faire bosser (bénévole) au mois d'aout?

by Zepman from AFPy discuss

Salut,

Je souhaiterai intégrer une équipe 1 ou 2 semaines au mois d’août pour voir si le boulot de développeur à temps plein est vraiment ce que je souhaite faire.
J’espère retirer de cette expérience la confirmation de cette réorientation profesionnelle et pouvoir juger de mon niveau afin de savoir sur quoi travailler pour m’améliorer.

Mon métier à la base est le developpement de produits (conception 3D), j’ai fait de la plasturgie, de la fonderie, etc… mais ce n’est pas ce qui nous interesse ici.
J’ai obtenu le diplome «développeur d’application Python» d’OpenClassroom en 2019, j’ai donc théoriquement des bases HTML/CSS/JS/Django mais il faudra que je rafraichisse (j’ai fait des sites web en amateur plus jeune donc je n’etais pas parti de rien).

Depuis l’obtention de mon diplome je n’ai finalement pas quitté ma boite car j’ai proposé un nouveau projet basé sur des outils d’automatisation que j’ai développé moi même en Python:

  • une librairie d’interface pour automatiser le logiciel 3D (opensource: creopyson) et une autre basée sur la 1ere qui permet de simplifier son utilisation (propriétaire coup)
  • une librairie d’analyse de fichiers 3D (STL) issue de scans (utilisation de Open CV pour récupérer des coordonnés sur des images)
  • une application desktop (tkinter) qui permet de lancer tout un process de création de fichiers dans un intranet à partir d’un fichier de commande Excel (openpyxl), il n’y a pas vraiment d’API et intranet ultra sécurisé donc j’ai utilisé Selenium pour certaines actions (J’ai créé une liraire pour cette partie et j’ai eu l’occasion de l’utiliser sur un autre petit projet)
  • et le programme principal qui permet d’automatiser la réalisation de fichiers 3D. J’ai pour ambition de faire une interface avec Django pour faire le suivi et d’autres choses mais je ne m’y suis pas encore mis, pour l’instant c’est juste un bat qui lance la console et demande le numéro de commande à réaliser, cela convient parfaitement aux utilisateurs à l’heure actuelle.
  • J’ai un peu joué avec Jupyter/pandas/numpy/matplotlib pour faire des analyses de production et de jolis graphiques.

J’ai suivi une formation sur les design patterns il y a quelques mois et c’est quelque chose qui m’interesse beaucoup, la logique d’architecture, la structure du code.
Tout ce que j’ai développé pour le boulot est testé, j’ai mis du temps mais j’ai eu le «déclic» du TDD.

J’arrive à la fin de mon projet actuel et je me pose la question de faire le grand saut vers le développement «pour de vrai».
Je recherche donc une boite qui pourrait m’accueillir pendant mes vacances afin que je puisse filer un coup de main et me mettre dans la peau d’un développeur.
Je peux développer une petite fonctionnalité, faire des tests, etc…

Je n’ai pas de convention de stage donc je ne sais pas si légalement cela pose un problème que je vienne passer du temps dans une entreprise, j’ai mon PC donc pas besoin de m’en mettre un à disposition. Je suis en vacances les 3 premières semaines d’août mais j’aimerai quand meme prendre un peu de temps pour autre chose donc l’idéal serait 1 ou 2 semaines. J’habite en banlieu parisienne, donc idéalement sur Paris.

Vous pouvez me contacter par message privé

17 messages - 5 participant(e)s

Lire le sujet en entier

Lire la suite…

À la recherche d'un nom pour HackInScience

by mdk from AFPy discuss

Je sais, le sujet est bizarre, HackInScience a déjà un nom.

Mais il ne me convient plus. HackInScience état destiné à enseigner Python à des chercheurs, c’était donc cool comme nom à l’époque.

J’aimerai aujourd’hui quelque chose de plus « lisible », associé plus clairement à l’apprentissage de Python.

J’ai plein de mauvises idées, comme pycole, pynte, pyscine, champy, génépy, épyce, ioupy, wapyti, apyc, épyc, pypo, hipy, mais pas de bonnes idées.

Quoi que Pycole c’est vachement bien : c’est la contraction de Python et de école. OK je sors :frowning: :frowning: :frowning:

#help

10 messages - 7 participant(e)s

Lire le sujet en entier

Lire la suite…

GitLab, une alternative souveraine à Github

by Bearstech from Bearstech

Github ou l'émergence d'une plateforme centralisée
Git apparait dans sa première version en 2005. Il s'est rapidement imposé comme un outil de gestion de versions moderne et robuste. Initialement conçu pour le développement du noyau GNU Linux par Linus Torwald lui-même, il rencontre son succès pour ses singularités, à commencer par son architecture décentralisée, ses performances et la scalabilité de ce qui constitue son coeur, c'est-à-dire son système de stockage de fichiers. Les traditionnels Subversion, CVS ou Mercurial sont peu à peu remplacés par Git.
En 2008, c'est le lancement de Github qui au fil des ans vient assoir l'hégémonie de Git en offrant un service d'hébergement gratuit pour de nombreux projets libres. Le revers de la médaille c'est qu'il devient un point de centralisation incontournable du libre offrant une plateforme alliant fonctionnalités sociales et utilitaires à destination des développeurs. A peine deux ans après son lancement, Github accueille plus d'un million d'utilisateurs, et plus de deux millions l'année suivante pour environ le double de dépôts.
Le rachat de Github par Microsoft
Si Github, la plateforme sociale du code a grandement aidé à la popularisation de Git en offrant une forge logicielle gratuite à des millions de développeurs de logiciels libres à travers le monde (Github héberge à ce moment-là 75 millions de projets), il attire la convoitise de Microsoft, alors gros utilisateur de la plateforme, qui finit par se l'offrir pour 7,5 milliards de dollars. Le jour même de l'annonce, ce sont plus de 100 000 projets qui quittent Github, donc plus de 50 000 pour migrer sur GitLab.
En juillet 2019 et jusqu'à janvier 2021 Github a restreint les comptes de développpeurs situés en Iran, en Syrie, en Crimée, à Cuba et en Corée du Nord, appliquant les sanctions du gouvernement américains sur ces pays concernant les exportations de technologies. L'accès à ses services via des VPN était dans le même temps bloqué pour ces mêmes utilisateurs. L'État Américain s'octroie donc le droit de vie ou de mort sur le code, et sur des projets de logiciels libres sous couvert de sanctions économiques. Cet épisode avait mis toute la communauté du logiciel libre en émoi.
Gitlab.com SaaS , une deuxième offre centralisée alternative mais toujours insuffisante en terme de souveraineté
Si l'offre SaaS GitLab.com vient proposer des fonctionnalités appréciables (CD/CI), son service d'hébergement des projets n'en demeure pas moins lui-même également soumis aux droits et aux restrictions américaines sur les exportations technologiques ou sur le copyright (le service avait migré de Microsoft Azure à Google Cloud Platform en 2019). En ce sens, il n'apporte pas, au sens de la CNIL, un niveau satisfaisant de compatibilité avec le règlement européen sur la protection des données (RGPD), comme indiqué sur cette carte du monde affichant le niveau de protection des données par pays et leur compatibilité avec le droit communautaire européen.

La concentration des services et des données que l'on connait aux USA est de fait problématique, d'autant que le pays est loin d'offrir, aux yeux de l'Union européenne, un niveau de protection des données satisfaisant pour se montrer en adéquation avec le RGPD.
Avoir conscience de la mécanique qu'implique nos choix d'architecture est un premier pas, agir pour une meilleure décentralisation et protection de nos données est souvent une question plus délicate. On peut aisément le constater à l'heure où le "cloud souverain de confiance" se met en place en France avec le renfort assumé de Microsoft.
Des instances Gitlab hébergées de manière indépendante et sécurisée en France
Bon nombre d'entreprises européennes ont parfaitement assimilé cette problématique et se refusent de courir le moindre risque, que ce soit en matière de propriété de leur code, qu'il soit propriétaire ou sous licence libre, et beaucoup font l'effort de se responsabiliser en matière de protection des données induites par le RGPD. En France la CNIL publiait fin 2021 un ensemble de guidelines à destination des développeurs. On notera dans ces directives la fiche n°4 sur la gestion du code source et la fiche n°5 concernant les choix d'architecture.
Convaincu de la puissance de Git et de Gitlab qui constituent des outils essentiels de notre organisation depuis plus de 10 ans, Bearstech fait le choix de proposer une offre infogérée d'hébergement de votre Gitlab, pour permettre à votre code de rester sur le territoire national et ainsi de contribuer à la nécessaire déconcentration du patrimoine logiciel. Notre nouvelle infrastructure couplée à plus de 10 années d'expérience en matière d'hébergement de Gitlab pour nous comme pour nos clients nous confère une expertise pour assurer une haute disponibilité de votre code et de votre production.
Nous assurons également les mises à jour de la plateforme, un support expert à taille humaine, et nous proposons une facturation mensuelle qui sera en plus moins chère à nombre d'utilisateurs comparé.

Lire la suite…

[Nantes] Relance des Meetup ?

by dancergraham from AFPy discuss

Hello, y a t-il des personnes intéressées pour reprendre les Meetups Python sur Nantes? https://www.meetup.com/fr-FR/nantes-python-meetup/
Je pars en vacances outre-manche bientôt et j’imagine que c’est similaire pour pas mal de monde alors peut-être a partir de la rentrée ?

Meetup Python à Nantes

2022-09-27 19:00 (Europe/Paris) → 2022-09-27 22:00 (Europe/Paris)

4 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Offre de CDD - Ingénieur d'études pour la cartographie par télédétection grande échelle (H/F)

by mfauvel from Linuxfr.org

Sommaire

Bonjour,

Dans le cadre nos activités de recherches, nous recherchons un développeur informatique Python pour travailler sur la chaîne de traitements logiciels Iota2 (source : https://framagit.org/iota2-project/iota2, documentation : https://docs.iota2.net/develop/). Cette chaîne à notamment permis de produire la première cartographie nationale de l'occupation des sols par télédétection, à partir de séries temporelles d'images Sentinel-2:

Occupation des sols 2016

Nous avons pour l'instant 12 mois de contrat, plus une prolongation de 12 mois. Le poste est au CESBIO, sur Toulouse. Pour une grille de salaire IE, selon expérience (https://www.emploi-collectivites.fr/grille-indiciaire-etat-ingenieur-etudes-classe-normale/0/5150/9541.htm).

Quelques détails:

Mission

La télédétection par satellite est un domaine de recherche actif, avec des applications dans les sciences de l'environnement, de l'agriculture et du changement climatique. Plusieurs missions satellitaires ont été lancées au cours des dernières décennies, comme le programme européen Copernicus, et fournissent des données massives d'observation de la Terre en libre accès.
Parmi les différents produits issus de ces missions, la cartographie à grande échelle de l'occupation du sol est sûrement le plus opérationnel. De nos jours, une telle cartographie est utilisée pour une large gamme d'applications environnementales et revêt une importance primordiale dans le contexte du changement climatique. Plusieurs réalisations ouvertes et privées ont été annoncées récemment (par exemple, https://www.theia-land.fr/en/ceslist/land-cover-sec/ ou https://viewer.esa-worldcover.org/worldcover). Ce sujet est toujours un domaine actif de recherche et d'ingénierie. L'un des principaux problèmes limitants est la capacité à traiter efficacement la très grande quantité de données auxquelles les chercheurs et les ingénieurs sont confrontés.

Dans ce cadre, le logiciel open-source iota2 a été initié par le laboratoire CESBIO comme une chaîne de traitement générique pour traiter intégralement les séries temporelles satellitaires récentes, telles que SENTINEL-1 et SENTINEL-2 ou Landsat-8. Elle a permis de produire la première carte de l'occupation du sol sur le territoire français métropolitain (e.g., https://theia.cnes.fr/atdistrib/rocket/#/collections/OSO/21b3e29b-d6de-5d3b-9a45-6068b9cfe77a).

Pour étendre le développement du logiciel, en dehors du laboratoire du CESBIO, le projet CNES PARCELLE a été mis en place pour favoriser l'utilisation de iota2 à d'autres problèmes de cartographie à grande échelle. Trois thèmes principaux sont considérés dans le projet.
1. Une évaluation quantitative et qualitative des performances de iota2 pour différents types de paysages (par exemple, Afrique du Sud ou Amérique du Sud) et/ou différents types d'occupation du sol.
2. L'intégration méthodologique des algorithmes de pointe des partenaires du projet.
3. Promouvoir l'utilisation d'iota2 par le biais de formations et de réunions scientifiques.

Activités

La première mission de la personne recrutée est de travailler sur le développement de nouvelles fonctionnalités pour iota2, comme l'inclusion d'algorithmes de deep learning (super-résolution, classification, inversion…). Le candidat peut consulter le dépot du projet pour plus de détails (https://framagit.org/iota2-project/iota2/-/issues).

La deuxième mission est liée à la formation d'autres membres du projet et des utilisateurs institutionnels (ex. https://docs.iota2.net/training/labworks.html et son dépôt https://gitlab.cesbio.omp.eu/fauvelm/formation-iota2). De plus, du temps sera consacré à répondre aux questions des utilisateurs (principalement via l'interface des issues du dépôt).

La troisième mission de la recrue sera de coordonner les différents développements menés par les partenaires.

Compétences

Le candidat doit avoir une solide expérience en python (numpy, pandas, scikit-learn, pytorch), en informatique scientifique, en linux et en système de contrôle de version distribué (git). Une expérience en documentation de logiciels (docstrings, sphinx) sera appréciée, ainsi que des connaissances en traitement d'images de télédétection, en géomatique, en systèmes d'information géographique et en bases de données.

Contexte de travail

Le poste est au CESBIO, à Toulouse pour 12 mois plus 12 mois renouvelable. Le travail à distance est autorisé après 6 mois de services, deux jours par semaine.

La recrue bénéficiera de la vie scientifique du laboratoire CESBIO (https://www.cesbio.cnrs.fr/), comme les séminaires Data Science (https://src.koda.cnrs.fr/activites-ia-cesbio/ds-cb/-/blob/master/README.md) et des séminaires de laboratoire internes (https://gitlab.cesbio.omp.eu/conferences/midipile).

Pour plus d'informations sur l'activité, le candidat peut consulter les ressources suivantes :
• Blog du laboratoire : https://labo.obs-mip.fr/multitemp/.
• Documentation générale sur les produits OSO : https://artificialisation.developpement-durable.gouv.fr/bases-donnees/oso-theia et https://www.theia-land.fr/product/carte-doccupation-des-sols-de-la-france-métropolitaine/.
• Publication scientifique sur les produits OSO : https://www.mdpi.com/2072-4292/9/1/95.

Les candidatures doivent se faire via le portail emplois du CNRS: https://emploi.cnrs.fr/Offres/CDD/UMR5126-EMIBAS-013/Default.aspx

Je me tiens à votre disposition pour plus de renseignements.

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Petit benchmark...

by Mindiell from AFPy discuss

Coucou,

Au hasard de mes pérégrinations, j’ai souhaité vérifié qu’un fichier correspond à une extension précise, parmi une liste d’extensions bien entendu.

Je fais donc une recherche, pour chaque fichier, parmi toutes les extensions listées pour voir s’il en fait partie ou pas.

J’ai donc commencé par un truc tout bête, genre :

if name[:-3] in (liste des extensions):

Et forcément, ça ne fonctionne que pour des extensions de 3 caractères. Oubliées les “.md” et autres “.epub”

J’ai donc amélioré la chose avec une simple liste de compréhension :

[1 for extension in test_extensions if name.endswith(extension)]

Ici, name est le nom du fichier, test_extensions est la liste d’extensions à tester. Je crée donc une liste qui contiendra un élément si mon fichier correspond à une extension, sinon la liste sera vide. Il me suffit alors de vérifier la longueur de la liste résultante.

Et puis j’ai pensé à utiliser filter qui est souvent bien pratique :

list(filter(lambda x: name.endswith(x), test_extensions))

C’est plus court, mais pas forcément plus lisible je trouve. Pour faire plus court, on peut remplacer list par set (oui, on y gagne 1 seul caractère, c’est de l’optimisation de forcené qui n’a rien d’autre à faire de ses journées :smiley: )

J’ai aussi voulu tester avec map :

list(filter(None, map(name.endswith, test_extensions)))

Et c’est encore plus court finalement ! Ah ah ah ! Mais peut-être encore moins lisible ?

Bon, et forcément, vu que mon projet n’est pas si important, j’ai largement le temps de faire un poil de benchmark :

import pathlib
import random
import timeit

# On prépare les données
extensions = ("txt", "png", "md", "ico", "gif", "zip", "rst", "epub",)
test_extensions = (".txt", ".rst", ".md")
files = []
for i in range(10):
    files.append(f"test.{random.choice(extensions)}")

# On lance les banchmarks
print("set, filter map")
print(timeit.timeit("[len(set(filter(None, map(name.endswith, test_extensions)))) for name in files]", globals=globals(), number=100000))
print("list, filter map")
print(timeit.timeit("[len(list(filter(None, map(name.endswith, test_extensions)))) for name in files]", globals=globals(), number=100000))
print("set, filter lambda")
print(timeit.timeit("[len(set(filter(lambda x: name.endswith(x), test_extensions))) for name in files]", globals=globals(), number=100000))
print("list, filter lambda")
print(timeit.timeit("[len(list(filter(lambda x: name.endswith(x), test_extensions))) for name in files]", globals=globals(), number=100000))
print("simple")
print(timeit.timeit("[len([1 for extension in test_extensions if name.endswith(extension)]) for name in files]", globals=globals(), number=100000))
print("pathlib")
print(timeit.timeit("[pathlib.PurePosixPath(name) in test_extensions for name in files]", globals=globals(), number=100000))

Et voici les résultats (obtenus sur mon PC, sous Windows 10 (je suis au bureau, désolé)) :

set, filter map
0.8425506
list, filter map
0.870825
set, filter lambda
1.0246678000000002
list, filter lambda
1.0588134
simple
0.7103302
pathlib
3.2523364

Émerveillement de la nature, on s’aperçoit que list est légèrement plus lente que set, mais surtout qu’on s’en sort très bien sans filter.
Pour information, l’ajout du calcul de la longueur ne joue pas sur les temps de réponse.

La morale de cette histoire ?

  1. Les fonctions intégrées sont souvent intéressantes, mais elles ne font pas tout
  2. J’ai vraiment du temps à perdre ce matin

Voilà, et bonne journée à vous !

EDIT : Ajout de pathlib, qui est donc à oublier même si très pratique :wink:

10 messages - 4 participant(e)s

Lire le sujet en entier

Lire la suite…

Python sur le comptoir du libre

by mdk from AFPy discuss

Je viens à l’instant d’ajouter Python au comptoir du libre :

Ça nous permet de se déclarer utilistateur, formateur, prestataire, …

Pour ceux qui découvrent, le comptoir du libre est un service de l’ADULLACT :

Fondée en 2002, l’ADULLACT a pour objectifs de soutenir et coordonner l’action des Administrations et Collectivités territoriales dans le but de promouvoir, développer et maintenir un patrimoine de logiciels libres utiles aux missions de service public.

4 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Développeuse/Développeur Python

by Chloe from AFPy discuss

HashBang est une société coopérative (SCOP) de services informatiques basée à Lyon. Nous sommes une équipe de 12 personnes.

Nous développons des applications sur mesure avec une approche de co-construction. Nous intervenons sur toute la chaine de production d’un outil web, de la conception à la maintenance. Nos technologies préférées sont Python, Django, Vue.js, Ansible. Nos méthodes s’inspirent des méthodes agiles. Nos clients sont des startups/TPEs/PMEs/associations et en particulier des organisations qui font partie de l’Économie Sociale et Solidaire (associations, coopératives).

Nous sommes attachés aux questions de qualité du code et de maintenabilité, ainsi qu’au bien-être au travail.

Nous privilégions la prise de décision collective. Notre organisation est horizontale, basée sur la sociocratie. Après une phase d’intégration, chaque salarié·e est amené·e à intervenir et participer à la gestion de la coopérative dans différent domaines (ressources humaines, comptabilité, gestion du planning, commercial, etc.)

Le poste

Contexte

Hashbang crée un poste de développeuse/développeur, en contrat à durée déterminée pour accroissement temporaire d’activité de 7 mois.

Missions

Vous aurez pour principales missions :

  • Développer des applications web à l’aide des frameworks tels que Django et Vue.js
  • Développer des outils d’administration de bases de données
  • Développer des outils en Dash, Flask, Plotly, et SQLAlchemy
  • Tester votre code
  • Faire des revues de code
  • Savoir traduire les besoins du client en une solution fonctionelle
  • Participer à la vie de la coopérative

Conditions

Le poste est à pourvoir dans nos locaux : Hashbang, 13 ter Place Jules Ferry, 69006 LYON

Le contrat proposé est à durée déterminée pour accroissement temporaire d’activité. Le temps de travail est de 35h par semaine. Le salaire est fixé selon une grille en fonction de votre ancienneté et de votre expérience passée. Nous proposons des tickets restaurants et un forfait mobilité durable qui prend en charge les frais de transport en commun et/ou de déplacement à vélo. En tant que SCOP, une partie des bénéfices est reversée aux salarié·e·s.

Compétences recherchées

Pré-requis techniques

Pour occuper ce poste, vous aurez besoin de :

  • Savoir chercher de l’information par vous-même, rester en veille technologique
  • Savoir utiliser un logiciel de gestion de version (Git / …)
  • Etre à l’aise avec Python / Javascript / HTML et CSS
  • De préférence, avoir déjà utilisé Django et Vue.js
  • Etre à l’aise dans la relation client et la gestion de projet

C’est un plus si vous avez déjà utilisé :

  • numpy
  • pandas
  • Postgresql
  • Dash, Flask, Plotly, Elasticsearch et SQLAlchemy

Qualités professionnelles

Pour ce poste et pour vous épanouir dans notre coopérative, vous aurez besoin :

  • D’être curieux ;
  • D’une forte attirance pour le travail collaboratif ;
  • D’un sens de la communication afin de vous exprimer en groupe, ainsi qu’avec nos clients;
  • D’une capacité à prendre des décisions en groupe et individuellement ;
  • D’être force de proposition ;
  • Prendre des initiatives, tester, rater, recommencer, réussir;
  • D’être capable de travailler en autonomie.

Vous êtes en phase avec nos valeurs et êtes intéressé·e par le modèle coopératif, l’informatique libre et l’organisation horizontale.

Candidater

Envoyez un mail de candidature à rh@hashbang.fr avec un CV et la description de vos motivations pour cette offre en particulier.

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Ingénieur·e d'affaire / Technico-commercial·e

by Chloe from AFPy discuss

HashBang est une société coopérative (SCOP) de services informatiques basée à Lyon. Nous sommes une équipe de 12 personnes.

Nous développons des applications sur mesure avec une approche de co-construction. Nous intervenons sur toute la chaine de production d’un outil web, de la conception à la maintenance. Nos technologies préférées sont Python, Django, ArchLinux, Vue.js, Ansible. Nos méthodes s’inspirent des méthodes agiles. Nos clients sont des startups/TPEs/PMEs/associations et en particulier des organisations qui font partie de l’Économie Sociale et Solidaire (associations, coopératives).

Nous sommes attachés aux questions de qualité du code et de maintenabilité, ainsi qu’au bien-être au travail.

Nous privilégions la prise de décision collective. Notre organisation est horizontale, basée sur la sociocratie. Après une phase d’intégration qui permet d’appréhender les enjeux de chaque groupe de travail, chaque salarié·e est amené·e à intervenir et participer à la gestion de la coopérative.

Le poste

Contexte

Dans le cadre de son développement, Hashbang crée un poste d’ingénieur d’affaire / Technico commercial.

Missions

Vous aurez pour principales missions d’être l’interface entre Hashbang et son environnement commercial. A ce titre, vos principales missions seront:

Développer le portefeuille clients de HashBang :

  • Prospecter de nouveau clients, en participant/organisant à des événements du monde du logiciel libre et de l’univers de scop
  • Fidéliser des clients existants, en réalisant des entretiens de suivi client avec nos chefs de projet
  • Suivre les objectifs de ventes et de l’état du carnet de commande
  • Communiquer : créer des posts LinkedIn, twitter, des articles de blog sur notre site internet, créer et diffuser des supports de communication sur notre offre de service.

Réaliser la vente :

  • Analyser les besoins client
  • Etre en lien avec l’équipe projet pour traduire le cahier des charges
  • Faire des propositions technico-commerciales adaptées
  • Participer à la rédaction de réponses à appel d’offres / devis
  • Participer à la vie de la coopérative

C’est un plus si vous savez réaliser et présenter des éléments marketing pour nos projets de développement.

Conditions

Le poste est à pourvoir dans nos locaux : Hashbang, 13 ter Place Jules Ferry 69006 LYON

Le contrat proposé est à durée indéterminée. Le temps de travail est de 35h par semaine.

Le salaire est fixé selon une grille en fonction de votre ancienneté et de votre expérience passée. Nous proposons des tickets restaurants et un forfait mobilité durable. En tant que SCOP, une partie des bénéfices sont reversées aux salarié·e·s.

Compétences recherchées

Pré-requis techniques

Pour occuper ce poste, vous aurez besoin de :

  • Savoir chercher de l’information par vous-même,
  • Prendre des initiatives, tester, rater, recommencer, réussir

C’est un plus si vous avez une connaissance technique suffisante pour proposer des solutions aux prospects / clients

Qualités professionnelles

Pour ce poste et pour vous épanouir dans notre coopérative, vous aurez besoin :

  • D’être curieux/curieuse ;
  • D’une forte attirance pour le travail collaboratif ;
  • D’un sens de la communication afin de vous exprimer avec les prospects / clients mais aussi en groupe ;
  • D’une capacité à prendre des décisions en groupe et individuellement ;
  • D’être force de proposition ;
  • D’être capable de travailler en autonomie.

Vous êtes en phase avec nos valeurs et êtes intéressé·e par le modèle coopératif, l’informatique libre et l’organisation horizontale.

Candidater

Envoyez un mail de candidature à rh@hashbang.fr avec un CV et la description de vos motivations pour cette offre en particulier.

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

bord arrondi avec tkinter

by yabb85 from AFPy discuss

Bonjour,

j’essaie d’utiliser des layout avec bord arrondi dans tkinter mais j’obtiens un soucis lors de la mise au propre du code.

J’ai une version du code qui est écrite de façon simple pour ne pas dire yolo qui elle marche.
ok.py (3,1 Ko)
résultat
ok

Si je met au propre ce même code en séparant dans des fonctions celui ci ne marche plus
ko.py (3,3 Ko)
résultat
ko

Avez vous une idée d’où pourrait être l’erreur svp?

Merci

5 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Moteur 2D pour Python (Pygame Web)

by pmp-p from AFPy discuss

Salut, pour la Pycon DE 2022 j’avais envisagé de faire tourner Pygame directement dans les navigateurs internet ( via WebAssembly, sans installation, ni serveur web dynamique* ).

Ayant réussi à temps, j’ai ultérieurement créé un petit outil d’aide à la publication pour que tout le monde en profite ( même sans linux ni compilateur, juste python 3.8+ ):

l’outil est là : pygbag · PyPI

le jeu de référence (injouable trop dur!) : Stuntcat by pmp-p publié en moins d’une minute sur itch.io .

Quelques tech démos içi : https://pmp-p.github.io/pygame-wasm/
qui ont servi pour
Christian Heimes: Python 3.11 in the Web Browser - A Journey (Keynote) - YouTube ( les sous titres Fr sont potables ).

Mieux comprendre la technologie mais en Anglais :

NB: un problème de son est à prévoir sur le navigateur web Brave. C’est surement temporaire il y a une issue déjà ouverte.

* katasdk ferait en gros la meme chose pour du code pygame mais avec le serveur proprio Kata.games.

7 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

Module email de Python 3.7

by ThierryP from AFPy discuss

Salut,

dans la documentation (version 3.7) il est indiqué qu’un objet de classe email.message.Message possède une méthode .get_body().

Par contre chez moi (Python 3.7):

AttributeError: ‘Message’ object has no attribute ‘get_body’

Une idée?

3 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

DevOps Python Front/Back Chez OctopusMind

by f.oliveau from AFPy discuss

Nous recherchons une ou un développeur(se) avec déjà une première expérience significative en python/open source pour poursuivre le développement de nos services autour de l’analyse de données. Vous souhaitez développer des briques innovantes front ou back autour de la data, contactez-nous ! Ce n’est pas un poste de data scientist même si vous pourrez y goûter…

Qui est OctopusMind ?

OctopusMind, spécialiste de l’Open Data économique, développe des services autour de l’analyse des données. Nous éditons, notamment, www.J360.info, plateforme mondiale de détection d’appels d’offres.

L’entreprise d’une dizaine de personnes développe ses propres outils en mode agile à partir de technologies Open Source pour analyser une grande masse de données quotidiennement. Elle est engagée dans des projets innovants axés sur l’intelligence humaine et artificielle (TALN & Deep Learning).

Pour en savoir plus : OctopusMind

L’équipe IT fonctionne en mode scrum / sprint sans lead developer.

Nous vous proposons

Nous recherchons une ou un développeur(se) avec déjà une première expérience en python/open source pour poursuivre le développement de nos services autour de la valorisation des données.

Vous souhaitez développer des briques innovantes front ou back autour de la data, contactez-nous !

Vous participerez :

  • Au développement des applications web de l’entreprise sur la base de Python, Django, VueJS, REST, PostgreSQL, Docker, Ansible, ElasticSearch…

  • Aux tâches d’administration système, de maintenance de l’infrastructure, déploiement des applications, problématiques de performance

  • Aux scripts de collecte de données

L’organisation de travail est rythmé par des sprints. Les missions sont discutées et réparties à chaque cycle selon les profils de chacun.

Si vous êtes enthousiaste, vous aimez apporter votre touche personnelle, vous êtes à l’aise avec l’agilité… notre entreprise vous plaira.

Candidature

  • 2 ans minimum d’expérience professionnelle

  • Salaire : Selon le niveau

  • Horaires flexibles

  • Bureau : Nantes (44)

  • CV + Lettre de motivation (pourquoi vous souhaitez nous rejoindre notre entreprise) à adresser par mail à job @ octopusmind.info

  • Merci d’illustrer vos compétences techniques avec des exemples de projets ou codes

  • Echanges et précisions par mail ou téléphone, suivi d’entretiens physiques ou visio, et un entretien final dans nos bureaux.

  • CDI ou CDD, temps plein ou 4/5, télétravail en France possible

Autres

  • Chèques déjeuner et mutuelle entreprise
  • Plan d’intéressement et plan épargne entreprise
  • Participation au transport
  • Participation frais télétravail au réel

SVP pas de démarchage pour de l’outsouring, merci

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

[Strasbourg] Relance des meetup ?

by Jeffd from AFPy discuss

Hello,

En février 2020 on avait tenté un petit meetup sur Strasbourg (qui avait tout de même rassemblé 14 personnes). Ensuite il y a eu une pandémie qui a cassé notre élan et notre motivation.

:arrow_right: J’aimerais bien savoir si des personnes présentes sur ce discuss sont de Strasbourg (ou des environs) et serait interessées pour des meetup (en présentiel) :question:

Si oui je vous laisse faire un signe, sinon vous pouvez toujours relayer cette information (sur le discord par exemple) :upside_down_face:

2 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Revue logicielle du Librem 5 de Purism

by Éloi Rivard <eloi@yaal.coop> from Yaal

Après plusieurs années d'attente, nous venons de recevoir le Librem 5 que nous avions commandé chez Purism. C'est un téléphone orienté vie-privée dont les fonctionnalités notables sont :

  • l'utilisation de PureOS, une distribution GNU/Linux basée sur Debian, à la place d'Android ou iOS ;
  • l'interface graphique est GNOME avec quelques modifications ;
  • la présence de boutons permettant de physiquement éteindre le Wifi, le Bluetooth, les données mobiles, le microphone ou la caméra (c'est à dire couper l'arrivée électrique).

Utiliser Linux sur un téléphone mobile ouvre à de nouveaux usages qui concernent surtout des personnes technophiles, mais cela vient aussi avec son lot d'inconvénients. Les plus notables sont que les téléphones sous Linux sont quelque chose de nouveau, et les applications ne sont simplement pas prêtes : les interface ne sont adaptées aux écrans mobiles, les interactions pratiques sur un téléphone mobile (comme le glissement du pouce) ne sont pas utilisées, et plus généralement les applications n'ont pas encore été assez testées par des utilisateurs mobiles.

Les développeurs de logiciels libres font de leur mieux, et un sacré travail a déjà été fait. Cependant nous ne sommes pas encore à un point où les téléphones sous Linux peuvent être mis entre toutes les mains. Avec notre regard vierge (c'est la première fois que nous voyons un téléphone sous Linux), nous voulons lister ici ce que nous pensons qu'il manque à l'écosystème pour fournir un bonne expérience utilisateur (du moins pour notre usage biaisé de technophiles).

Nous nous sommes concentrés sur les applications GNOME Core et Circle, ainsi que sur les applications mobiles développées par Purism.

Ce que nous attendons d'un téléphone est qu'il nous permette de :

  • passer des appels
  • recevoir et envoyer des SMS
  • recevoir et envoyer des emails
  • être utilisé comme réveil
  • gérer ses contacts
  • gérer des listes de tâches
  • être utilisé comme un appareil de géolocalisation
  • naviguer sur internet
  • jouer de la musique
  • prendre des photos
  • prendre des notes
  • afficher des documents
  • partager sa connexion internet
  • être utilisé comme lampe-torche
  • discuter avec des gens

Comme produire des correctifs a encore plus de valeur que rapporter des bugs, cette liste pourrait nous servir de liste de tâches à faire si nous (ou vous ?) nous ennuyons un jour.

Nous avons testé le téléphone sous PureOS byzantium, et mis à jour les applications grâce à Flatpak quand c'était possible afin de bénéficier des avancées de GNOME 42.

Bloquants

Dans cette catégorie nous listons les problèmes qui nous découragent fortement pour une utilisation quotidienne. Cela concerne principalement du stress et de la friction dans l'expérience utilisateur, ainsi que des fonctionnalités manquantes ou inutilisables.

Confort

Dans cette catégorie nous lisons ce qui améliorerait notre confort. Cela concerne principalement les interfaces.

Paillettes

Dans cette catégorie nous listons toutes les autres choses que nous avons rencontrées, il s'agit surtout de petites améliorations d'interface et quelques fonctionnalités qui permettraient par exemple un usage hors-ligne.

Lire la suite…

Purism Librem 5 software review : our list to Santa

by Éloi Rivard <eloi@yaal.coop> from Yaal

After several years of waiting, we just received our Librem 5 phone from Purism. The Librem 5 phone is a privacy-oriented phone which notable features are:

  • it uses PureOS, a GNU/Linux distribution based on Debian, instead of Android or iOS;
  • the interface is based on GNOME with a few modifications;
  • it has kill switches to physically disable wifi, bluetooth, cellular data, camera and microphone.

Running a Linux on a cellular phone enables new uses, especially for tech savvy, but it comes with its lot of drawbacks. The main notable ones is that Linux phones is a brand new field, and a lot of apps are simply 'not ready'. Either because their UI is not adaptive, because they have not been adapted to mobile user interactions (swiping and other gestures), or just because they have not been tested enough by users, so some actions feels convoluted.

FOSS developers do their best, and a whole lot of great work has been done so far. However we are not yet at a point where Linux phones can be put in the hands of a larger audience. With our fresh eyes of new Linux mobile users, we want to list here the main things that we felt were really missing to provide a good user experience (at least for our biased geeky use). We focused on GNOME Core and Circle apps, and mobile/Librem5 specific apps developped by Purism. What we expect from a phone is to:

  • place calls
  • receive and send SMS
  • receive and send emails
  • be used as an alarm clock
  • manage contacts
  • manage tasks
  • be used as a geolocation navigation device
  • browse the internet
  • play music
  • take photos
  • take notes
  • display documents
  • share internet connection
  • be used as a torchlight
  • discuss with people

As patching has even more value than reporting, this list could be used by us (or you?) as a to-do list for some day if we get bored.

We have tested the phone running PureOS byzantium, and we updated all the apps through Flatpak when possible so we could get the latest GNOME 42 fixes.

Blockers

In this category we put the issues we feel are very discouraging for a daily use. This mainly concerns UX friction and stress, and missing or broken features.

Comfort

In this category we put the issues that would improve our comfort. This mainly concern mobile UX improvements.

Sparkles

In this category we put everything else that we met during our test, from nice-to-have features to slight mobile UX improvements:

Lire la suite…

Thumbnail de communication

by Melcore from AFPy discuss

Bonjour,

Dans le but d’organiser un peu la communication, j’ai préparé des “thumbnails” pour communiquer plus facilement sur les réseaux sociaux. Les médias étant mis en avant sur certains réseaux sociaux. J’ai fait des tests sur figma.

Si vous avez d’autres idées ou des remarques sur ceux-ci, n’hésitez pas !

6 messages - 5 participant(e)s

Lire le sujet en entier

Lire la suite…

À propos de la catégorie PyConFr

by mdk from AFPy discuss

(Remplacez ce paragraphe par une courte description de votre nouvelle catégorie. Cette information apparaîtra dans la zone de sélection de la catégorie, veillez donc à saisir moins de 200 caractères.)

Utilisez les paragraphes suivants pour une plus longue description ou pour établir des règles :

  • À quoi sert cette catégorie ? Pourquoi les utilisateurs choisiraient-ils cette catégorie pour leur discussion ?

  • En quoi est-elle différente des autres catégories existantes ?

  • Quels sont les sujets qui devraient figurer dans cette catégorie ?

  • Avons-nous besoin de cette catégorie ? Devrions-nous fusionner celle-ci avec une autre catégorie ?

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Un stand AFPy à l'#OSXP2022?

by mdk from AFPy discuss

Je serai partant pour tenir un stand à l’OSXP2022 :

Si je ne suis pas tout seul. Et si on trouve un peu de déco/goodies AFPy/Python (réutilisable pour faire un stand AFPy à la PyConFr !)

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Dev Backend Python Django @Procsea

by procsea from AFPy discuss

A propos de ProcSea

Chez ProcSea, nous croyons à un futur où la ressource de notre planète est protégée, où la sécurité alimentaire est assurée et où les échanges de produits frais sont simples, fluides, transparents et responsables. Pour cela, nous développons une technologie innovante et moderne qui permet de connecter les acteurs de la filière agroalimentaire entre eux afin d’améliorer le quotidien des opérateurs, de collecter et fiabiliser les données et consolider la traçabilité des produits.

Si vous êtes motivé(e) à l’idée de digitaliser toute une industrie et de construire son avenir, rejoignez-nous!

A propos du rôle

Nous recherchons un(e) développeur(se) back-end en CDI pour nous aider à construire la meilleure expérience utilisateur possible et permettre aux opérateurs de marché de faire levier sur les dernières technologies web pour gérer des milliers de transactions.

Vous rejoindrez une équipe dynamique de 4 développeurs back-end talentueux qui travaillent sur tous les aspects de notre application en coordination avec l’équipe front-end et produit. Vous êtes créatif(ve) et vous avez plein d’idées à partager ? Parfait ! Chaque ingénieur peut challenger et influencer la direction des fonctionnalités sur lesquelles il ou elle travaille.

Nous sommes basés majoritairement à Rennes, mais toutes nos équipes sont en télétravail.

Vos tâches au quotidien consistent à :

  • Développer des nouvelles fonctionnalités innovantes
  • Implémenter des concepts ou des maquettes
  • Garantir la qualité et la performance des applications

Nous offrons un environnement de travail basé sur la confiance et l’indépendance. Nous nous engageons à vous former sur notre solution et à accompagner votre développement en tant que développeur(se). Nous sommes toujours à la recherche d’approches innovantes et maintenons nos technologies à jour.

Votre évolution et votre rémunération seront à la mesure de votre investissement et de vos réussites. Vous serez éligible aux stock-options.

Vous réussirez chez nous si vous avez le profil suivant:

  • Une solide expérience dans le développement d’applications web complexes
  • Une connaissance approfondie des de Python / Django
  • L’habitude de travailler en test + intégration continue
  • Familier(e) avec les méthodologies agiles
  • Passionné(e) par l’expérience utilisateur
  • Un niveau d’anglais professionnel

Les technologies que nous utilisons :

  • Gitlab
  • Python 3.10 / Django 3.2 / Celery
  • PostgreSQL
  • Redis
  • Heroku / AWS / Sentry New Relic
  • Docker
  • React 16.X / Vitejs / React Query / React Hook Form / Styled Components / React Testing
  • Typescript

Apprendre à mieux nous connaître

ProcSea a été créé en 2016 et a développé sa propre marketplace B2B dédiée aux professionnels des produits de la mer. Avec des milliers d’utilisateurs et des centaines de milliers de transactions, nous avons démontré qu’il était possible de digitaliser une industrie et de changer ses habitudes. Depuis Janvier, nous nous concentrons exclusivement sur notre business SaaS en mettant à disposition des grands acteurs de la filière (Grossistes, Centrales d’Achats, Grande Distribution) nos solutions techniques.

Aujourd’hui plusieurs clients prestigieux nous font confiance ainsi que des investisseurs solides qui nous soutiennent depuis nos débuts.

Nos équipes sont composées de talents internationaux et divers basés partout en France. Le bien-être et la convivialité sont importants pour nous. C’est pourquoi, nous organisons régulièrement des événements pour tous nous réunir et partager des moments forts autour d’une activité.

Processus de recrutement

  1. Appel d’introduction avec le recruteur - 15’
  2. Visio avec le CTO - 60’
  3. Test technique - 60’
  4. Visio avec deux développeurs de notre équipe - 60’
  5. Offre

Comment postuler?

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Banque de l'association

by Herdawyn from AFPy discuss

Bonjour,

j’écoutais Guillaume Meurice cette semaine et au détour d’une chronique, on apprend qu’il est au crédit coopératif:

https://www.youtube.com/embed/LergkoEEMtc

Je me demande si ça ne voudrait pas le coup de transférer le compte de l’association chez eux si ce n’est pas le cas:

Herdawyn

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Financement des licenses PoEdit par l'AFPy

by deronnax from AFPy discuss

Hello.
Je fais parti de l’équipe de traduction de la documentation en français, menée par l’incroyable JulienPalard !
Pas mal d’entre-nous utilisent PoEdit, un logiciel d’édition de fichiers .po (le format de fichier des traductions), souvent en version gratuite. La version payante a une intégration poussée avec DeepL, qui génère en un clic des traductions extrêmement fidèles et correctes, qui permet de faire gagner énormément de temps… Jusque là je payais la license moi-même (40€/an). Je me demandais si l’AFPy pouvait financer la license aux plus gros traducteurs qui en font la demande (à priori, seulement moi pour l’instant).
L’équipe de traduction abat un gros travail, c’est extrêmement chronophage, et comme pourra vous le confirmer Julien, l’équipe de traduction en français est l’une des équipe les plus avancée dans la traduction de la documentation et la plus réactive.

Merci d’avance,
Pythoniquement votre.

6 messages - 4 participant(e)s

Lire le sujet en entier

Lire la suite…

Pour les parisiens - Proposition d'organiser un meetup en juin chez Alma - Appel à Orateur·trices

by Natim from AFPy discuss

Bonjour à toutes et à tous,

Meetup chez Alma

2022-06-29 19:00 (Europe/Paris) → 2022-06-29 22:00 (Europe/Paris)

L’entreprise dans laquelle je travaille, Alma, vient d’ouvrir ses nouveaux bureaux rue des petites écuries à Paris et se propose de proposer l’espace pour des meetup.

Est-ce que certaines et certains d’entres-vous serait intéressé par un Afpyro ? On pourrait également en profiter pour faire 1 ou 2 talk et parler des dernières nouveautés de Python.

En vrac je pense à des sujets tels que (httpx, FastAPI, Pydantic, Async SQLAlchemy, OpenAPI, HTTP/3, etc) mais ce n’est pas restrictif.

L’idée serait d’en faire un premier courant juin.

Merci de me contacter par mail si vous souhaitez proposer un talk.

Bonne journée,

Rémy

16 messages - 7 participant(e)s

Lire le sujet en entier

Lire la suite…

Développeuse / Développeur Python

by BenoitS from AFPy discuss

Au sein de la DINUM, beta.gouv, l’Incubateur de services numériques met en œuvre une politique de transformation de l’État par le truchement d’un programme d’intraprenariat. Ce programme permet à des agents publics de devenir intrapreneurs et d’être accompagnés par de petites équipes autonomes et agiles. Souvent nommées Startups d’État, ces équipes sont pilotées par l’impact et développent des produits numériques en cycles courts, en lien direct avec leurs usagers et les parties prenantes.

En parallèle de ce programme d’intraprenariat, la DINUM lance la Brigade d’Intervention Numérique, une équipe produit de 15 personnes (développeur, chargé(e)s de déploiement, coach produit, designer UX/UI) dont la mission est d’accompagner le gouvernement et l’administration dans la construction de services publics numériques à fort impact et à aider les différents ministères dans leur capacité à répondre aux commandes politiques.

Les missions de la Brigade

  • Proposer et mettre en oeuvre rapidement des solution dans une situation de crise ou d’urgence

    • Santé Psy Étudiant

    • Je veux aider

  • Renforcer l’impact de politiques prioritaires à travers le développement de services publics numériques

    • Plateformes de l’inclusion

    • Mission Apprentissage

  • Soutenir l’action du réseau d’incubateurs beta.gouv par la création de communs réutilisable par d’autres Startups d’États

    • Tchap

    • Audioconf

Vos missions

En tant que développeur, vous participerez au développement de services numérique à fort impact, au sein d’une équipe travaillant selon l’approche Startup d’État, grandement inspirée du lean startup et notamment :

  • Organiser, planifier et assurer le développement de produits numériques ;
  • Contribuer à l’amélioration continue du produit, des outils et de l’organisation de l’équipe pour gagner en efficacité ;
  • Livrer en continu un produit aux utilisateurs afin d’en tester l’usage et l’utilité en continu ;
  • S’assurer de la qualité du code grâce aux outils d’analyse automatisés et la mise en place les bonnes pratiques adéquates ;
  • Automatiser les procédures de déploiement et autres outils de productivité en utilisant des services PaaS ;
  • Participer aux événements de la communauté (OpenLabs, séminaires, ateliers, formations etc…).

Les thématiques peuvent être diverses (transports, emploi, aides sociales, handicap, insertion, santé, etc.) et les modalités d’interventions peuvent varier en fonction des contextes.

Votre profil

Vous avez entre 3 et 5 années d’expérience dans le développement de produits numériques. Vous avez envie de rejoindre un programme dédié à la construction de services numériques publics et vous souhaitez travailler au sein d’une culture produit.

  • Vous disposez de bonnes connaissances en développement logiciel (algorithmique, structuration de données, architecture, etc.)
  • Vous avez des connaissances en intégration et déploiement continu
  • Vous avez une bonne connaissance en méthodes agiles et/ou lean startup
  • Vous prenez au sérieux les questions de sécurité des systèmes d’information
  • Vous avez une compréhension des enjeux RGPD
  • Vous êtes pragmatique et vous vous préoccupez du coût à long terme de vos choix technologiques
  • Vous disposez d’une sensibilité pour l’expérience utilisateur et l’accessibilité
  • Vous avez des expériences avec des langages du web (NodeJS ou Python ou Ruby)
  • Vous avez un bon sens de l’écoute et un bon esprit d’équipe
  • Vous aimez vous engager avec fiabilité, rigueur et responsabilité pour livrer un produit.

Rejoindre la Brigade

Intégrer la Brigade, c’est obtenir :

  • Un CDD au sein de la Direction Interministérielle du Numérique jusqu’au 31 décembre 2023.
  • Une rémunération selon le profil et l’expérience.
  • L’accès à une communauté d’entrepreneurs publics d’environ 700 personnes présentes dans l’ensemble des Ministères et sur tout le territoire.
  • Le droit de télétravailler à raison de 2 jours par semaine et 3 jours dans nos bureaux de Lyon, Paris ou Rennes.

Comment candidater ?

Vous souhaitez postuler à la Brigade ? · demarches-simplifiees.fr

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Full Stack Ingénieur Logiciel (Energie / IoT)

by lpignol from AFPy discuss

FULL STACK SOFTWARE ENGINEER (ÉNERGIE / IoT )

INFORMATIONS SOCIETE

Vous souhaitez rejoindre une jeune entreprise française à taille humaine et en forte croissance, tournée vers l’innovation et l’international ?

Vous êtes soucieux(se) des défis énergétiques et environnementaux de notre époque, et vous voulez contribuer concrètement à la sobriété énergétique et à la réduction des émissions de CO2 ?

Alors rejoignez-nous !

Implantée à Lyon et à Singapour, et forte d’une expertise transdisciplinaire (IT, data-science, génie thermique), BeeBryte propose des services innovants de contrôle prédictif optimal distant 24/7 et de support à l’opération & maintenance pour aider nos clients industriels et tertiaires à augmenter l’efficacité énergétique et la performance de leurs systèmes de CVC-R (chauffage, ventilation, climatisation, réfrigération).

Pour cela nous mettons en œuvre une surcouche intelligente, portée par notre plateforme Industrial-IoT, qui exploite les informations profondes des systèmes existants et de leur contexte pour maximiser en permanence leur performance énergétique. En anticipant besoins et facteurs d’influence, nous permettons à nos clients de réduire efficacement leur empreinte carbone, de circonscrire leurs risques, et de réaliser jusqu’à 40% d’économies sur leurs factures énergétiques

INFORMATIONS POSTE

Missions :

  • Concevoir et réaliser des solutions logicielles innovantes et performantes répondant à des problématiques industrielles
  • Définir et mettre en œuvre des architectures extensibles, évolutives et scalables
  • Concevoir et développer des interfaces ergonomiques pour une meilleure expérience utilisateur
  • Industrialiser et automatiser les tests et le déploiement des applications
  • Maintenir les solutions BeeBryte à la pointe de la technologie pour l’amélioration énergétique

Compétences requises :

  • Programmation backend (Python, API REST, postgreSQL, DJANGO) et/ou frontend (JavaScript, ReactJS)
  • Génie logiciel (conception & développement logiciel, gestion de versions, tests automatisés, tests d’intégration et intégration et déploiement continus)
  • Principes de conception et architectures logicielles (Architecture 3-tiers / MVC / Micro Services)
  • Structures de données et algorithmique

Autres compétences appréciées :

  • Connaissances en DevOps / GitOps (Container, CI CD)
  • Connaissances en Data Science et Informatique industrielle (Protocoles MODBUS / BACNET) est un plus
  • Maîtrise de méthodes agiles (Scrum / Kanban)
  • Connaissance de Jira Software est un plus
  • Connaissance UML
  • Bonne maîtrise de l’anglais

Vous recherchez une certaine diversité dans votre activité et la possibilité d’intervenir sur différents projets.

Vous considérez que le développement d’une application serveur robuste et scalable et le design d’une interface ergonomique et intuitive constituent les deux faces d’une même pièce

Vous êtes autonome, rigoureux(se) et animé(e) d’un fort esprit d’équipe

PROCESSUS DE RECRUTEMENT

Poste cadre en CDI, à pourvoir à partir de Juillet 2022

Salaire : selon expérience et compétences

Envoyer CV + lettre de motivation à hiring.it@beebryte.com

2 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Dev* Python Web @ Strasbourg

by Jeffd from AFPy discuss

Hello

Alors je suis pas recruteur ou CEO de startup mais une place s’est liberée dans notre équipe de Strasbourg et vu que les ESN/SSII fournissent pas des profils au top, je lance cette annonce.

En résumé c’est un poste de développement Web python Django (et C++ si jamais tu connais, ça serait apprécié), sur du Linux (RHEL) avec beaucoup de tests en tout genre et des morceaux de DevOps et de la sécurité (des certificats, du CORS et pleins de choses chouettes). Si t’es interessé(e) pour parfois faire du painless (Elastic-Search) ou du Prométheus c’est un bon plus. Faut aussi connaitre l’anglais (lu, écrit).

Mais c’est un milieu assez contraignant avec des procédures, des règles parfois fastidieuses, et un besoin de réactivité au top et d’organisation en permanence (découper son travail en étapes, communiquer sur l’avancement etc) . Faut beaucoup de rigueur (vérifier, re-vérifier, re-re-vérifier), d’autonomie (OBSERVER et savoir chercher soit même), de capacité à communiquer (résumer, extraire l’essentiel, écrire/maintenir de la doc et parler a l’équipe mais sans la saturer de truc futiles) et faudra savoir remettre en cause plein de chose que tes études t’ont appris et qu’on ne fait pas dans la vraie vie.

Dans les bon côtés l’équipe (7 personnes) est sympa (sauf moi), on utilise des outils cool (Gitlab/Mattermost) et on prend le temps d’améliorer nos outils/process.

En cas d’interêt pour cette annonce il faut me contacter très vite par message privé/“Direct”, ou me contacter via LinkedIn pour qu’on échange.

3 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Dernières contributions à des logiciels libres par l'équipe Yaal Coop (début 2022)

by Éloi Rivard <eloi@yaal.coop> from Yaal

Ces derniers mois nous avons principalement contribué à canaille, le serveur d'identité que nous développons, ainsi que le menu d'autocomplétion simple-svelte-autocomplete et le greffon nextcloud-oidc-login qui permet à nextcloud de se connecter à des serveurs d'identité.

wtforms

Bibliothèque python de gestion de formulaires web

canaille

Serveur OpenID Connect simpliste, basé sur OpenLDAP

webtest

Bibliothèque de tests unitaires pour applications web

nextcloud

Logiciel de partage et de synchronisation de fichiers

nextcloud-oidc-login

Plugin OpenID Connect pour nextcloud

ansible

Outil d'automatisation des déploiements

simple-svelte-autocomplete

Composant svelte de suggestion d'éléments dans une liste déroulante

fhir-kindling

Brique de connexion à des serveurs de ressources FHIR

Debian

Lire la suite…

Last FOSS contributions from the Yaal Coop team (winter 2022)

by Éloi Rivard <eloi@yaal.coop> from Yaal

Those last months we mainly worked on canaille, our identity server, as well as the autocompletion menu simple-svelte-autocomplete and nextcloud-oidc-login that allows nextcloud to connect to identity servers.

wtforms

A flexible forms validation and rendering library for Python.

canaille

Simplistic OpenID Connect provider over OpenLDAP

webtest

Wraps any WSGI application and makes it easy to send test requests to that application, without starting up an HTTP server.

nextcloud

Nextcloud server, a safe home for all your data

nextcloud-oidc-login

Nextcloud login via a single OpenID Connect 1.0 provider

ansible

simple IT automation platform

simple-svelte-autocomplete

Simple Autocomplete / typeahead component for Svelte

fhir-kindling

FHIR resource and synthetic data set creation and management tool

Debian

Lire la suite…

Babelia ou comment j'apercoie un moteur de recherche

by amirouche from AFPy discuss

J’ai tapé du code et ça ressemble a un moteur de recherche.

Je vais faire un passage bref sur les algorithmes que j’utilise.

Pour le moment, babelia fallback sur une recherche sur duckduckgo quand c’est pas une commande connue, voila le code:

Dans raxes.py on peux lire:

async def search(query):
    # query
    url = 'https://lite.duckduckgo.com/lite/'

    async with httpx.AsyncClient() as http:
        response = await http.post(url, data=dict(q=query))

        if response.status_code != 200:
            raise StopIteration()
        content = response.content.decode('utf8')

    # extract
    html = string2html(content)

    hits = html.xpath('//a[@class="result-link"]/@href')

    for hit in hits:
        yield hit

Note: httpx.AsyncClient() peut-être recyclé / re-use dans l’application, alors que la cela crée un client pour chaque appel, ce qui est moins performant.

Dans frontend.py on peux trouver un langage qui permet d’embarqué du HTML dans du python, sans passer par un décodeur pour implémenter un truc a la jsx, a la place ca ressemble a h.div(Class="hero")["coucou"]. La fonction serialize fonctionne de concert avec preactjs. preactjs est un clone de reactjs, qui a l’avantage d’être livré avec un seul fichier .js ie. pas besoin d’installer nodejs et webpack. Le journal The Guardian utilise preactjs pour son frontend. Le serveur va transformer la représentation sous forme d’objet python en bon vieux JSON, un petit algorithme JavaScript va prendre la main pour traduire le JSON en appel dom / virtual dom kivonbien pour preactjs (indentation approximative):

function translate(json) {
    // create callbacks
    Object.keys(json[PROPERTIES]).forEach(function(key) {
	// If the key starts with on, it must be an event handler,
	// replace the value with a callback that sends the event
	// to the backend.
	if (key.startsWith('on')) {
	    json[PROPERTIES][key] = makeEventHandlerCallback(key, json[PROPERTIES][key]);
	}
    });

    let children = json[CHILDREN].map(function(child) {
	if (child instanceof Array) {
	    // recurse
	    return translate(child);
	} else { // it's a string or a number
	    return child;
	}
    });

    return preact.h(json[TAG], json[PROPERTIES], children);
}

Les events du DOM sont forward au backend a travers une websocket, voir makeEventHandlerCallback, remarque: c’est le strict minimum que j’ai implémenté, il est souhaitable d’étendre le support des évents du DOM pour sérialiser plus finement les évents et supporter plus de cas.

Ce bout de code ne se generalise pas c’est un cas spécifique a l’implémentation de la gui de babelia, mais le reste peut se généraliser en framework dans l’esprit de phoenix :bird: liveview.

Les parties indexation et recherche sont implémentées dans pstore.py a la racine du depot, c’est un fork du pstore.py de asyncio-foundationdb qui n’utilise pas de map-reduce.

Je vous présente l’ensemble de la fonction d’indexation:

async def index(tx, store, docuid, counter):
    # translate keys that are string tokens, into uuid4 bytes with
    # store.tokens
    tokens = dict()
    for string, count in counter.items():
        query = nstore.select(tx, store.tokens, string, nstore.var('uid'))
        try:
            uid = await query.__anext__()
        except StopAsyncIteration:
            uid = uuid4()
            nstore.add(tx, store.tokens, string, uid)
        else:
            uid = uid['uid']
        tokens[uid] = count

    # store tokens to use later during search for filtering
    found.set(
        tx,
        found.pack((store.prefix_counters, docuid)),
        zstd.compress(found.pack(tuple(tokens.items())))
    )

    # store tokens keys for candidate selection
    for token in tokens:
        found.set(tx, found.pack((store.prefix_index, token, docuid)), b'')

L’algo est en deux étapes:

  1. Première étape: enregistrer le document représenter par un sac de mot (bag-of-word) appelé counter, c’est l’index avant [forward] qui associe l’identifiant docuid a son contenu le simili dico counter;
  2. Deuxième étape: créer les liens arrières [backward] aussi appelées inversés [inverted] qui associent chaque mot / clef avec le docuid et donc le sac de mots counter par jointure.

Pour la recherche:

async def search(tx, store, keywords, limit=13):
    coroutines = (_keywords_to_token(tx, store.tokens, keyword) for keyword in keywords)
    keywords = await asyncio.gather(*coroutines)
    # If a keyword is not present in store.tokens, then there is no
    # document associated with it, hence there is no document that
    # match that keyword, hence no document that has all the requested
    # keywords. Return an empty counter.
    if any(keyword is None for keyword in keywords):
        return list()

    # Select seed token
    coroutines = (_token_to_size(tx, store.prefix_index, token) for token in keywords)
    sizes = await asyncio.gather(*coroutines)
    _, seed = min(zip(sizes, keywords), key=itemgetter(0))

    # Select candidates
    candidates = []
    key = found.pack((store.prefix_index, seed))
    query = found.query(tx, key, found.next_prefix(key))

    async for key, _ in query:
        _, _, uid = found.unpack(key)
        candidates.append(uid)

    # XXX: 500 was empirically discovered, to make it so that the
    #      search takes less than 1 second or so.
    if len(candidates) > 500:
        candidates = random.sample(candidates, 500)

    # score, filter and construct hits aka. massage
    hits = Counter()

    coroutines = (massage(tx, store, c, keywords, hits) for c in candidates)
    await asyncio.gather(*coroutines)

    out = hits.most_common(limit)

    return out

L’algorithme va sélectionner dans la requête de l’utilisateur représenté par keywords le mot le moins fréquent, ça élague en une short liste qu’y s’appelle candidates. J’ai hard code un sampling a 500 items que j’ai déterminé empiriquement mais qui idéalement ne devrait pas exister, ou au moins devrait se configurer au démarrage de l’application en faisant un benchmark. Les candidates sont ensuite masser, en fait il s’agit de calculer le score de tous les documents candidats issues de l’étape précédente:

async def massage(tx, store, candidate, keywords, hits):
    score = 0
    counter = await found.get(tx, found.pack((store.prefix_counters, candidate)))
    counter = dict(found.unpack(zstd.decompress(counter)))
    for keyword in keywords:
        try:
            count = counter[keyword]
        except KeyError:
            return None
        else:
            score += count
    hits[candidate] = score

Si vous changez le code pour ne pas utiliser gather c’est BEAUCOUP plus lent.

Vous trouverez aussi different programme pour aspirer wikipedia, hackernews, …:

https://git.sr.ht/~amirouche/python-babelia/tree

Bonne lecture !

ref: sudopython - moteur de recherche textuel
ref: Viabilite d'un moteur de recherche pour le (python) francophone

3 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Formations recommendées

by acortino from AFPy discuss

Hello,

Je suis lead tech dans une scale-up et je sens que mon niveau en Python stagne. Disons que j’arrive à m’en sortir avec ce que je sais et que j’ai du mal à passer le niveau au dessus pour profiter pleinement des avantages de Python

J’aimerais appronfondir mes connaissances (entre intermédiaire et avancées) et si possible obtenir une certification ou quelque chose qui pourrait justifier mon niveau.

Peu importe le coût (CPF bienvenue) et la durée de la formation. Je préfère simplement éviter les formations en ligne qui sont juste des suites de vidéos.

Est-ce que vous avez des recommendations à ce sujet?

Merci :slight_smile:

7 messages - 6 participant(e)s

Lire le sujet en entier

Lire la suite…

Ingenieur Python a Amsterdam

by Mulugruntz from AFPy discuss

Bonjour!

Nos recruteurs recherchent de bons ingenieurs Python pour rejoindre nos equipes. Personellement, je ne suis pas recruteur mais ingenieur.

Quand je vois le faible niveau des candidats qu’on a en interview, je me suis dit qu’il fallait faire un truc pour avoir de meilleurs talents dans notre team, sinon on allait jamais y arriver.

En gros:

  • il faut parler anglais
  • creation de bibliotheques, d’outils devops, de gros projets
  • c’est a Amsterdam
  • tout le monde est sympa (c’est mon point de vue)
  • bouffe a volonte
  • a part gros cracks, on evite les juniors
  • excellent salaire (pensez 2x salaire francais)
  • la mediane est en dessous de 30 ans.

Plus d’informations:

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

[Traduction] Comment faire une relecture d'un PR?

by ThierryP from AFPy discuss

Bonjour,
je viens d’essayer de comprendre comment relire et commenter une PR… J’ai peut-être manqué un truc.

Pour relire et commenter une PR, je n’ai pas trouvé d’autre moyen que de consulter le fichier diff des .po, ce qui me semble assez pénible. Quel est donc l’autre moyen (l’idéal étant de relire les HTML générés par la version PR sur ma machine mais je vois pas comment).

Une suggestion?
Merci
Thierry

15 messages - 4 participant(e)s

Lire le sujet en entier

Lire la suite…

Semaine de promotion de Python sur les réseaux sociaux

by Melcore from AFPy discuss

Salut les pythonistes,
vous avez peut-être remarqué le superbe tutoriel d’ @entwanne arriver sur Zeste de Savoir.

Pour l’occasion et pour célébrer les nombreux contenus concernant python sur la plateforme Zeste de Savoir, on compte promouvoir nos contenus sur Python durant une semaine. On vous en parle en avance si vous voulez participer à la mise en avant de contenu Python durant cette occasion (même si c’est pas du contenu ZdS). La date n’est pas encore fixée.

On serait ravi que vous vous appropriez le concept.

2 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Visite aux JDLL 2022

by Stéphane Blondon <stephane@yaal.coop> from Yaal

Les 2 et 3 avril 2022, plusieurs associé·es de Yaal Coop étaient présents aux 23ièmes Journées du Logiciel Libre qui se déroulaient à Lyon. C'était l'occasion d'approfondir des sujets qui nous intéressaient, de faire quelques découvertes ainsi que de rencontrer des acteur·ices du Libre en personne.

Comme nous construisons un service d'hébergement nommé nubla, assister aux présentations sur le collectif des CHATONS (Collectif des Hébergeurs Alternatifs, Transparents, Ouverts, Neutres et Solidaires) et sur zourit ont été un moyen pour nous de confirmer (ou d'infirmer) nos choix sur le fonctionnement du service. Découvrir cette communauté donne du coeur à l'ouvrage !

Cela fait aussi plaisir de constater l'intérêt pour le mouvement coopératif, comme ce fut le cas lors des discussions animées de la session d'échange "Gouvernance du libre/Gouvernance des coopératives : quels points communs ?". Tout un programme... Qui nous conforte dans notre choix de transformer Yaal en SCIC fin 2020. Un choix loin d'être unique comme l'a encore démontrée cette discussion organisée par d'autres coopératives du numérique : Hashbang, Tadaa et Probesys.

D'un point de vue moins politique (quoi que...) à Yaal Coop nous avons un usage quotidien de claviers plus ou moins originaux (TypeMatrix, Truly Ergonomic, ErgoDox) et, pour certains, de personnalisations de disposition de clavier bépo. De fait, la présentation sur la fabrication personnalisée de clavier et sur la disposition récente tentant d'avoir une disposition agréable pour écrire en français, en anglais et pour programmer - ergoL -, ont piqué notre curiosité.

Tellement de type de claviers dans la zone des associations !

Cette conférence était l'occasion de parler avec des passionnés mais aussi celle de recroiser et discuter avec des personnes déjà rencontrées lors d'autres conférences (en l'occurence DebConf et PyconFr).

Le village associatif en particulier a été pour nous un lieu d'échanges, notamment avec Framasoft sur les avantages et les différences des formats coopératifs et associatifs.

Du coup, encore merci à tous les organisateurs et présentatrices, et vivement la prochaine ?

Lire la suite…

Element vs Cwtch : de la confidentialité à l'anonymat

by from Bearstech

Element vs Cwtch : de la confidentialité à l'anonymat
Alors que le Web3 promet de mettre à l'honneur l'open source, la décentralisation, la confidentialité, l'interopérabilité et plein d'autres vertus qu'on trouvera en route, il est une promesse de messageries respectueuses de votre vie privée, toujours décentralisées, et pour certaines, susceptibles de vous proposer par défaut de l'anonymisation. Il s'agit d'ailleurs là de deux notions que l'on a souvent tendance à confondre. Nous avons choisit de poser notre dévolu sur deux de ces messageries (et une en bonus), toutes deux hautement recommandables, mais qui ne répondent pas forcément aux mêmes besoins, et donc aux mêmes usages. Elles sont ainsi parfaitement complémentaires.

La notion de confidentialité
Pour résumer et avec des mots simples, la confidentialité consiste à protéger vos communications et non votre identité. L'étape la plus évidente et la plus critique est la phase du transport des données. Ces données transitent sur le réseau et sont sujettes à l'interception par des tiers.
On parle alors de chiffrement de bout en bout pour protéger vos données, tant pendant leur transport que pendant leur stockage. Attention, lorsqu'on vous parle de chiffrement de bout en bout, on parle rarement de chiffrement au repos (lors du stockage), cette notion ne couvre que le transport des données et implique que le service utilisé propose un moyen d'assurer un chiffrement qu'il ne peut lui même casser / déchiffrer (à l'aide d'une clé unique)... et c'est souvent là que les gros acteurs des messageries vous promettent plein de belles choses, mais il ne faut surtout pas trop gratter.
On découvrirait par exemple que Zoom ne chiffrait pas de bout en bout (il a fini par se décider en octobre 2020), que Messenger peut tout à fait lire vos messages, mais que comme ça commence à se voir, on va quand même faire un truc mais pas par défaut... les exemples sont légion. On ajoutera pour les GAFAM que l'Europe, chargée de plein de bonnes intentions sous la bannière de l'interopérabilité, pourrait même casser (bien involontairement) le chiffrement de certaines applications comme WhatsApp et Signal... un comble.
Mais là encore, il y a peut-être un standard cryptographique interopérable pour les messageries et respectueux de la confidentialité qui pourrait naître de cette initiative, même si en l'état, on peut avoir des raisons de se méfier des effets de bords sur les services de ces géants de l'IM (en termes de nombre d'utilisateurs). Depuis que Google s'est dé-Jabberisé, on a vu éclore de gros acteurs, chacun y allant de son protocole maison et d'implémentations cryptographiques plus ou moins exotiques, faisant systématiquement peser de sérieux doutes sur cette notion même de confidentialité de nos échanges.
L'anonymat
L'anonymisation fait appel à des mécanismes plus avancés et des mesures simples et logiques pour protéger votre contexte. Ainsi vous pourrez trouver des solutions de messagerie apportant un niveau satisfaisant de confidentialité, mais trouver une application qui vous apporte un niveau satisfaisant d'anonymisation, c'est un non-sens. L'anonymat ne se fait pas à moitié, on est anonyme ou on ne l'est pas. Un niveau de confidentialité se mesurera par les algorithmes de chiffrement choisis, sur leur robustesse tant pendant le transport que dans le stockage, ainsi que dans l'architecture. Sur ce point tout le monde s'accorde à reconnaitre les bénéfices de la décentralisation, bien que ce ne soit pas ici un critère essentiel si l'on s'en tient à la stricte confidentialité et que le protocole demeure respecteux d'appliquer les meilleures pratiques de chiffrement. Une messagerie centralisée peut ainsi apporter un niveau satisfaisant de confidentialité, mais pour l'anonymat, c'est tout de suite bien plus discutable.
Lorsque l'on commence à dealer avec l'anonymat, c'est une autre paire de manches. Il n'est plus ici question de la protection des données seules. Certes, les applications sur lesquelles nous porterons notre choix devront au bas mot répondre aux critères de confidentialité, mais elles se doivent d'apporter des mécanismes de protection du contexte supplémentaires pour répondre à une problématique bien différente. Il ne s'agit plus de protéger la charge utile seule, il convient de protéger l'identité (que nous prendrons soin de définir un peu plus précisément) de l'émetteur et du récepteur.
Pour vous illustrer au mieux les différences entre ces deux notions, nous allons nous pencher sur deux systèmes de messagerie très respectables, c'est à dire : libres, décentralisés, chiffrés, dont un fait la promesse de protéger la confidentialité de vos échanges : Element, et l'autre, la promesse de protéger votre anonymat, il s'agit de Cwtch (à vos souhaits).
Element : libre, élégant, moderne et respectueux de votre confidentialité
Element (que l'on connaissait préalablement sous le nom de Riot et reposant sur le protocole Matrix) permet les discussions de groupes, elle remplacera avantageusement un Telegram, un Slack, ou tout simplement notre bon vieil IRC que l'on a souvent tendance à oublier.
Element est proposé en open source (vous pouvez héberger votre serveur de discussion et le code des clients est également disponible). Niveau fonctionnalités, Element propose l'échange de fichiers, les appels audio, la visioconférence de groupe en P2P, et des salons (via WebRTC). La plus grosse communauté se concentre sur le réseau de matrix.org et regroupe bon nombre de salons de projets open source. Oui; Element peut se permettre d'être aussi complet car il n'a pas pour promesse l'anonymisation.
Et puisque c'est de chiffrement dont il est question, la première étape pour pouvoir jouir d'Element convenablement sera d'aller faire un tour dans les paramètres de l'application afin de générer votre clé privée.


Pour encore plus de confidentialité et surtout vous assurer que vous parlez bien avec la bonne personne, vous pourrez activer l'option de vérification manuelle de chaque session.

Element a su montrer patte blanche au sein de nombre d'organisations dites sensibles, c'est par exemple lui que l'on retrouvera au sein de structures gouvernementales comme celle de l'État français, puisque Matrix peut agir comme une glue avec différents protocoles comme celui de Slack, Telegram, IRC ou encore Jitsi.
On trouvera parmi ses contributeurs actifs Protocol Labs à qui nous devons IPFS qui mériterait un article à lui seul, ou d'autres projets comme libp2p et Filecoin. Bref il y a du lourd derrière Element. A l'heure actuelle, Element serait le condidat parfait pour "remplacer" s'il en était besoin IRC, mais il s'agit là d'un autre débat et je vais donc me passer de donner mon avis sur ce point.
Cwtch : l'anonymat over Onion v3
On ne présente plus Tor et les services qu'il rend depuis des années, son écosystème, sorti du Torbrowser peu sembler plus obscur même si on voit des implementations de ce protocole dans des applications modernes. Tor c'est avant tout un protocole de routage dit en "Onion", que l'on peut faire tourner comme un service (par exemple lancé au démarrage de votre machine). Il écoute par défaut sur le port 9050 et vous pouvez, si votre application le permet, faire passer son trafic sur le réseau de Tor en la faisant écouter sur ce port, en mode proxy Socks).
Tor a récemment fait évoluer son protocole et la transition de Onion v2 à Onion v3 a été initiée au courant de l'été 2021 pour une dépréciation de Onion v2 en octobre 2021.
Pour une couche supplémentaire de protection de votre identité, vous pouvez par exemple entrer sur Tor via un VPN (VPN qui rappelons le, n'est en aucun cas garant de votre anonymat). Cependant, si vous utilisez Tor avec votre navigateur du quotidien ou avec d'autres applications, sachez que ces dernières ne sont par défaut pas configurées afin de restreindre au maximum la transmission de certaines métadonnées pouvant trahir des éléments de votre identité (les locales, les extensions, les thèmes, les versions de librairies tierces... sont autant de petits détails qui peuvent fuiter). C'est d'ailleurs dans cette optique que les développeurs de Tor proposent le TorBrowser et vous expliquent dans leur documentation les choses à éviter de faire pour une protection optimale.
Et c'est également avec ces préoccupations en tête que Cwtch se propose d'être une messagerie optimisant tout ces petits détails pouvant paraitre anodins mais qui constituent le plus important avec l'anonymisation : la protection de l'intégralité de votre contexte.

Cwtch (à prononcer "Keutch") est une messagerie multipartite décentralisée qui tire parti du protocole Onion V3, la colonne vertébrale protocolaire du réseau Tor (The onion router). Cependant vous ne trouverez pas, comme sur Element un réseau tel que celui proposé par matrix.org. Cwtch offre donc une solution de messagerie anonymisante, elle supporte les profils multiples (pour choisir vos identités en fonction des contextes).
Rappelons au passage la notion d'identité :

l'identité déclarative : qui je déclare être (on choisira le plus souvent un pseudonyme) ;
l'identité agissante : ce que je fais et ce que je dis sur un réseau ;
l'identité calculée : celle qui est "vue"/calculée/déduite par le système informatique sur lequel j'évolue en se basant en grande partie sur les métadonnées.



L'objectif de Cwtch est donc de vous laisser déclarer ce que vous voulez et agir comme bon vous semble mais de rendre impossible (ou bien plus compliquée) toute déduction/calcul par un SI de votre identité. Pour échanger avec une personne, vous n'avez besoin que de lui communiquer une clé publique, que cette dernière devra explicitement ajouter (cette notion de consentement explicite est au coeur de la logique de Cwtch).
Si vous nous avez suivis jusque-là, vous avez la démonstration de la différence entre pseudonymat et anonymat et vous aurez le droit de la replacer lors de vos conversations mondaines ou lorsque vous entendrez tonton Augustin s'indigner à propos du sempiternel poncif "Internet : ce repaire de lâches anonymes".
Cwtch est l'oeuvre d'une petite équipe de développeurs officiant pour une non profit d'origine canadienne, OpenPrivacy. Niveau fonctionnalités, c'est moins fournit qu'Element, vous pourrez transférer des fichiers mais vous ne pourrez pas passer des appels vocaux ou video par exemple. Chaque action dans Cwtch est soumise à consentement et les options disponibles inspirent confiance, on voit que c'est bien d'anonymat dont il est question.

En activant les "expériences", vous vous ouvrirez la porte à des fonctionnalités supplémentaires, mais attention, ces dernières ne garantiront pas à 100% l'anonymisation, vous serez susceptibles de faire fuiter certaines métadonnées.

Le serveur est disponible ici et vous trouverez des implémentations PC et mobiles, avec leur code.
Le gros avantage que Cwtch offre, c'est de pouvoir être contacté et de contacter de manière anonyme, et ce en toute simplicité. Il s'agit d'une fonctionnalité que l'on imagine tout de suite ultra pratique pour des journalistes qui souhaitent offrir des garanties d'anonymat à leurs sources. Ou pour offir la possibilité, à des sources, de transmettre des informations de manière sécurisée et anonyme, en passant outre un système de surveillance et de censure élaboré.
Et sur mobile ? Olvid !
C'est là que tout se corse lorsque l'on souhaite s'anonymiser. Si votre objectif se borne à la confidentialité, Element sera dans son rôle. Il semble qu'il est encore un peu tôt pour Cwtch d'être en mesure d'offrir ses fonctionnalités avec la même assurance d'anonymisation. Mais tout n'est pas perdu.
Nous allons donc vivement vous recommander de jeter un oeil à Olvid qui a fait un travail remarquable. Cette application de messagerie étant en outre d'origine française et auditée par l'ANSSI, on ne boudera pas notre plaisir à l'utiliser en lieu et place d'un Signal (et non, pas pour vos SMS, mais vous pourrez l'utiliser dans votre navigateur via le client web). Elle offre de l'authentification forte, du chiffrement de bout en bout avec confidentialité persistante (PFS) et elle offre même la promesse d'anonymisation en exposant aucune métadonnée... une véritable prouesse sur mobile. On souhaiterait qu'elle prenne en charge les SMS comme Signal le propose, attendu que là encore, si vous faites confiance à Google, vous vous faites gentiment pigeonner.
Enfin sur plateforme mobile, n'oubliez pas que la confidentialité et l'anonymat que vous obtiendrez ne pourra pas aller au-delà de la confiance que vous placez dans Apple ou Google si vous utilisez respectivement iOS et Android : ce n'est pas vous mais ces entreprises qui décident du code qui tourne sur votre téléphone et ont tout loisir d'intercepter s'ils le veulent vos messages avant même qu'ils soient chiffrés par les applications. N'oubliez pas qu'un logiciel de confiance, ça ne marche que sur un OS de confiance - comme par exemple LineageOS.

Lire la suite…

Ressources pour préparer une conférence technique

by Jeffd from AFPy discuss

Quelques personnes ici ont donné quelques conférences techniques et j’avais le souvenir d’articles qui avaient été partagés durant les meetup en-ligne.

Dans la mesure où (ne vous emballez pas) on commence à vivre avec la pandémie et que des présentations (meetup, conférences) reprennent, ça pourrait être sympa de lister quelques ressources (articles, conseils, thread twitter…) pour aider à préparer de futures présentations, des personnes novices qui aimeraient se lancer etc.

Il y a eu un sujet sur les outils techniques: présenter en markdown
Je pense qu’il serait utile d’avoir quelques articles sur “comment vulgariser un sujet technique”, “apprendre à résumer” “bien expliquer” etc etc.

J’aurais aimé initier le mouvement mais mes trois articles sont désormais en 404 :frowning:

5 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

badge Discourse pour les membres

by pilou from AFPy discuss

Il avait été évoqué la possibilité d’assigner un badge aux adhérents de l’association.

Pour faire cela il faudrait:

Qui peut créer la clef d’API helloasso ? Un compte admin de bot Discourse pourrait-il être créé ?

5 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Développeuse / Développeur backend Senior Python/Django

by r0ro from AFPy discuss

L’entreprise

Trax est une filiale du groupe Iliad (maison mère de l’opérateur Free), dédiée à la diffusion de contenu multimédia via l’application OQEE.

Fondée en 2019, Trax est une structure à taille humaine, organisée par pole de compétences: Produit, Graphisme, développement iOS, Android, Smart TV et Backend.

Le projet

L’objectif d’OQEE est de proposer une expérience TV moderne, à la fois sur les Freebox, mais également en dehors de l’écosystème des box.

Nous sommes aujourd’hui présents sur box Android TV, Apple TV, Smart TV Samsung, mobile iOS et Android, avec plus d’un million d’utilisateurs

Le poste

Compétences humaines & techniques :

  • Maîtrise de Python et Django,
  • Autonomie et force de propositions,
  • Connaissances de base en réseau (DNS, HTTPS, websocket, …),
  • Maîtrise des processus de développement (git, gitlab, CI, …).

Formation & Expériences :

  • Vous avez une formation d’ingénieur en informatique, et vous avez déjà réalisé plusieurs projets Django et avez une bonne expérience des APIs web,
  • Vous avez au moins :
    • 4 ans d’expérience en développement Python minimum
    • 2 ans d’expérience avec Django

Le cadre de travail

  • Poste situé a Paris 8ème (au siège de Free)
  • Télétravail possible jusqu’à 2j par semaine

Notre page Welcome to the Jungle: Trax (OQEE) : photos, vidéos, recrutement

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Scoop qui mérite la une : la communauté Python soutien l’Ukraine

by Elephant from Linuxfr.org

Bonsoir nal,

Je me baladais sur les Internets occupé à lire des actualités de ci de là et à flâner quand mes pas m’amenèrent sur l’excellent https://www.python.org

Et là, stupéfaction ! Le logo Python ainsi que le site web sont tout de jaune et de bleu parés.

Le logo de Python aux couleurs ukrainiennes

Bon, les couleurs sur le logo sont à l’envers, mais ne chipotons pas.

Et quelle humilité ! Pas un article pour mentionner ce discret mais pourtant réel soutien à la cause ukrainienne. C’est tout à leur honneur.

(et rappelons nous que VLC soutient les ouvriers du BTP depuis plus de 20 ans maintenant)

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Au revoir, et merci pour tout le poisson, setup.cfg !

by mdk from AFPy discuss

Il y a quelques heures deux évènements magiques se sont produits :

Ça signifie qu’on peut enfin configurer un projet avec un seul fichier (le pyproject.toml) !

Bon pour ceux qui ont encore un setup.py utilisez d’abord setup-py-upgrade pour le convertir en setup.cfg

Et il existe déjà un outil pour convertir un setup.cfg en pyproject.toml : ini2toml, ça s’utilise comme ça :

python -m pip install ini2toml[lite]
ini2toml setup.cfg >> pyproject.toml

(et puis relisez votre pyproject.toml qui aura typiquement la section [build-system] en double à fusionner à la main, et peut être quelques petites retouches stylistiques à faire.)

J’ai testé pour vous sur mon projet de test, oeis, voilà le commit :

Et … ça marche !!

4 messages - 2 participant(e)s

Lire le sujet en entier

Lire la suite…

Protéger simplement sa préprod avec Chevillette

by Bearstech from Bearstech

Préproduction
Une préprod doit être un environnement le plus similaire possible à la production (versions et services déployés), mais en plus petit, histoire de limiter les coûts.
Il ne faut pas oublier les proxys applicatifs, les CDN, les services tiers, tout, absolument tout doit être similaire à la production.
Les préprods sont tellement pratique, que maintenant, on peut en avoir une par branche de développement, pour peu que l'on utilise des conteneurs.
L'anglicisme pour désigner ça est app review.
Les préprods sont utiles et pratiques, mais on ne souhaite pas forcément que n'importe qui puisse y jeter un oeil (pour faire des tweets moqueurs ou casser le suspens), et surtout qu'elles soient indexées par un moteur de recherche.
Robots
Pour les moteurs de recherche, il existe le célèbre robots.txt et le un peu moins célèbre header X-Robots-Tag reconnu au moins par Google et Yahoo. Ces outils ne sont qu'indicatifs, mais bon, un peu d'hygiène ne fait jamais de mal.
Mot de passe
Il est techniquement facile de coller un mot de passe en basic-auth sur n'importe quel serveur web, mais ça va stresser les personnes qui devraient y avoir accès mais qui ne connaissent pas le mot de passe, et à la fin, le mot de passe est connu de la Terre entière.
La bonne approche est de passer par de l'OAuth2, comme le permet l'incontournable OAuth2-Proxy dont on vous a déjà parlé, vu qu'il y a des pull requests à nous dedans.
Ces deux approches sont parfaites (la seconde est même encore plus parfaite) pour un site qui sera public, mais empiler les authentifications est une très mauvaise idée.
Si votre site a des utilisateurs authentifiés, il va falloir trouver autre chose pour protéger la préprod.
VPN
Un VPN (Wireguard, what else?™) va garantir un accès exclusif à votre application, mais va poser des problèmes avec https.
Ou alors, vous fournissez un certificat racine à vos utilisateurs, et donc la possibilité de forger n'importe quel certificat, et là c'est assez flippant.
Les certificats modernes peuvent s'engager à ne signer qu'une liste de domaines bien spécifiés, mais ce n'est pas encore géré par tout le monde.
Letsencrypt a besoin d'accéder au site en HTTP pour aller chercher une preuve, avec le challenge HTTP, ce qui ne fonctionnera pas derrière un VPN.
Il faut passer à un challenge DNS, et donc avoir une API pour modifier automatiquement votre DNS (ce que propose la plupart des DNS, la liste est large).
Le soucis va être de déployer le VPN de partout, sur toutes les machines.
Bon courage si vous bossez dans l'IOT, l'Internet Des Machins qui se connectent alors qu'on ne leur avait rien demandé.
Filtrage par IP
Finalement, la protection un peu naïve, est de filtrer par IP, soit vous êtes dans la liste, soit rien du tout, le serveur, ou le firewall, bloque les autres IPs.
Pour les entreprises c'est assez facile de connaitre les IPs.
Pour les connections personnelles (xDSL, Fibre, cable), ça va dépendre du fournisseur. Certains vicelards s'amusent même à déco/reco au milieu de la nuit pour assigner une nouvelle IP, et on ne va même pas évoquer ceux qui attribuent la même IP publique à l'intégralité de leurs abonnés en leur fournissant un gros LAN, merci le CGNAT.
Pour les connections itinérantes ([1-5]G) ça va aussi être le bazar.
Pour les gens dans un café/gare/coworking ça va être la foire.
Filtrage par IP dynamique
Pour avoir une solution de filtrage par IP simple et souple à mettre en place, il est possible d'utiliser un service authentifié (votre cher Gitlab, par exemple), qui va utiliser votre user agent (massivement tweaké pour des raisons de tracking publicitaire) et votre IP, pour les mettre dans la bonne liste pour votre préprod.
N'utilisez pas ce système dans un salon, un coworking space et autre wifi nébuleux.
Lire les logs
Spoiler : la paire IP/User agent se trouve dans les logs du serveur HTTP.
Vous n'avez pas envie de patcher votre application pour qu'elle fournisse la liste des invités, il est tellement plus sage de se brancher depuis l'exterieur, de la manière la moins intrusive possible.
Coup de chance, l'arrivée des micro services, qui tournent "quelque part" sur le cluster a obligé à normaliser les flux de logs.
J'exclu Syslog avec son routage trop petit, ses messages trop courts et son UDP trop YOLO. Mais oui, techniquement, c'est faisable.

Logstash est bien gentil, mais les cycles de debug avec un reboot de 2 minutes, non merci.
Le protocole pour faire transiter ses logs, lumberjack, est décrit et il existe même une lib officielle pour golang.
Filebeat a lui aussi sa place dans la galaxie ELK, mais sans l'exotisme de Jruby utilisé par son meilleur ennemi, Logstash. Lumberjack est une solution crédible.
Le lobby des conteneurs, aka CNCF a désigné Fluentd comme solution de gestion de logs.
Le protocole est documenté, docker le cause en natif, et le client officiel, fluentbit s'installe facilement sans dépendance pénible.
Grafana conforte sa position de hub universel, en ajoutant à sa pile un serveur de logs : Loki.
Plein de gens parlent le Loki : Fluentbit, Vector, Docker, via un plugin de chez Grafana et bien sur Promtail le client fournit avec Loki.
Avec les premiers protocoles cités, vous allez devoir créer un serveur ad hoc pour récupérer le flot de logs. Avec Loki, c'est dans l'autre sens : vous allez demander à Loki de vous abonner à un flot de logs.
Loki va apporter une indirection, mais aussi un buffer (1h par défaut) et donc la possibilité de bidouiller vos analyses de logs sans perdre de message, ou même d'aller explorer le passé.
Il faut visualiser Loki comme un data lake suffisamment rangé pour pouvoir router simplement les différents flots de log, en batch, et en temps réel.
Autre arme secrète, Loki propose une nouvelle syntaxe pour parser les logs bien systématique, sans recourir aux expressions régulières (et au terrible Grok). Ça s'appelle pattern et il faut chercher dans la documentation pour en avoir une description.
Chevillette
Chevillette est un projet en Go, sous licence AGPL-3.0.
Il va lire des logs d'un serveur web, filtrer sur des chemins avec des status 200, par exemple le chemin d'un projet Gitlab, il va garder dans sa liste la paire IP/user agent pendant quelques temps.

Pour l'instant, Chevillette sait écouter du fluentd (il se comporte comme un serveur, avec les différentes authentifications implémentées).
L'abonnement à un serveur Loki est en cours.
Si il y a de la demande, la bibliothèque officielle est disponible, avoir un server Lumberjack sera pas trop compliqué à mettre en place.
De l'autre coté, Chevillette implémente le auth_request de Nginx (que Traefik sait aussi utiliser).
Auth_request permet de déléguer le filtrage de requêtes à un service HTTP, en se mettant à coté, et non devant comme le ferait un proxy HTTP.
HAproxy, pour sa part, utilise un protocole spécifique, SPOE pour déléguer la qualification des requêtes à un service tiers. La lib golang est disponible, et le sujet est passionnant, il est donc possible que son implémentation arrive rapidement.
Les logs sont un flot d'événements plus ou moins qualifiés, ce n'est pas juste le truc qui explique pourquoi le service est vautré.
Il y a clairement des choses à faire avec, et Loki est manifestement un bon point de départ (avec son ami Grafana) pour explorer et déclencher des actions.

Lire la suite…

Développeur-euse Python (H/F) confirmé-e à Paris ou Lyon

by sriguet from AFPy discuss

Annalect est l’agence Data Expertise au sein d’Omnicom Media Group France (OMG), la division française d’Omnicom Group Inc, un des leaders mondiaux de la publicité, du marketing et de la communication d’entreprise. Nos principales missions sont l’aide au pilotage stratégique et opérationnel des investissements média au service du business ainsi que l’optimisation de l’achat média via l’usage de la data science et de l’IA.

Descriptif du poste

Au sein de l’équipe de développement et sous la responsabilité du Director of Engineering, vous intégrerez Annalect en tant que développeur·euse Python Back-end et Data.

Le rôle de notre squad est de collecter / enrichir / optimiser la donnée issue de sources différentes afin de les rendre accessible dans une solution de visualisation de données.

Vos missions :

  • Vous développez de nouveaux connecteurs data
  • Vous assurez la maintenance des connecteurs existants
  • Vous contribuez à l’élaboration de nouveaux outils de scraping / datamining
  • Vous développez des interfaces orientées web pour l’enrichissement de la data ou la gestion d’aspect métier
  • Avec le reste de l’équipe, vous trouvez des solutions simples et rapides à des problématiques complexes
  • Vous créez et optimisez des pipelines data complexes
  • Vous monitorez la plateforme d’exécution des jobs data
  • Vous faites des code review des autres membres de l’équipe

Notre stack actuelle :

  • Majorité du code en Python
  • pySpark et Pandas pour la manipulation de données
  • Django pour les webapplications
  • Plotly / PowerBI pour la dataviz
  • Airflow pour la gestion des workflows
  • Ansible pour le déploiement automatique
  • GitLab pour le versionning et la partie CI/CD
  • JIRA pour la gestion des tâches et l’organisation
  • Produits déployés sur AWS et sur des serveurs internes

Profil recherché

Vous êtes passionné·e par le développement. Vous êtes familier·ère avec les API REST, le développement dirigé par les tests et la documentation (dans le code ou à destination d’utilisateurs techniques).

Vous avez plus de 2 ans d’expérience en tant que Développeur Python et vous êtes idéalement diplômé·e d’un master en computer science, d’une école d’ingénieur / université (BAC+5).

Code :

  • Vous avez de l’expérience sur des projets de traitement de données complexes
  • Vous codez couramment Python; la connaissance de Django est un plus
  • Vous connaissez les notions de DataLake, DataWarehouse ainsi que le CI/CD
  • Vous écrivez des tests (unitaires ou fonctionnels) et vous connaissez le TDD
  • Vous avez des notions de développement orienté Web
  • Vous maîtrisez GIT et GIT flow et vous n’oubliez jamais le CHANGELOG dans vos PR J

Attitude :

  • Vous connaissez les méthodes agiles et vous aimez être intégré·e dans les phases d’estimation et de planification des tâches
  • Vous comprenez l’intérêt de la documentation
  • Vous aimez réfléchir en équipe aux questions d’architecture d’un produit ou d’un projet
  • Vous êtes débrouillard·e et curieux·euse, vous n’attendez pas qu’on vous donne la solution aux problèmes.

Vos avantages chez Annalect :

  • Vous travaillerez avec des grands comptes et aussi en collaboration avec des équipes internationales
  • De la formation, des certifications et la possibilité d’évoluer au sein du Groupe
  • Remote hybride : 2 jours de télétravail possible par semaine
  • RTT mensuel
  • Des avantages avec le CSE (chèques cadeaux, subventions culture…)
  • Etc.

Vous pouvez postuler ici : Annonce sur Linkedin (candidature simplifiée) ou par email sebastien.riguet@annalect.com

Omnicom Media Group s’engage pour la diversité et l’inclusion. Toutes nos offres d’emploi sont ouvertes aux travailleurs en situation de handicap.

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Offpunk 1.0 : un navigateur déconnecté pour le smolnet

by ploum,Ysabeau,ted,Benoît Sibaud from Linuxfr.org

Alors que sort la version audiolivre de mon roman cyberpunk Printeurs, dont il a été question sur ce site, j’ai le plaisir de vous annoncer une autre sortie très punk, la version 1.0 du logiciel Offpunk, un navigateur optimisé pour la navigation déconnectée sur le « smolnet », incluant les protocoles https, gemini, gopher et spartan.

Offpunk est un logiciel écrit en Python et utilisable entièrement en ligne de commande : il s’affiche dans un terminal et n’utilise ni souris ni raccourci clavier. Chaque action nécessite une commande. Le rendu des pages et des images se fait dans l’afficheur « less » (en utilisant chafa pour les images).

Sommaire

Smolnet, Gemini, Gopher, Spartan, kezako ?

Il n’a échappé à aucune personne intéressée par l’informatique que le web prend de l’ampleur, au point d’être souvent confondu avec Internet. Ce qui n’était au départ qu’un protocole parmi d’autres tend à devenir le réseau sur lequel il s’appuie. Ce monopole du web s’accompagne d’une surcharge des contenus. Charger une simple page web représente aujourd’hui des dizaines voire parfois des centaines de connexions et, le plus souvent, plusieurs mégaoctets de téléchargement. Beaucoup de ces données et connexions sont au détriment de l’utilisateur : les requêtes servent à le pister et l’espionner, les données téléchargées cherchent à lui afficher des publicités ou à le renvoyer vers des réseaux sociaux monopolistiques. Le tout en ralentissant sa connexion et le forçant à mettre à jour régulièrement son matériel pour faire tourner des navigateurs de plus en plus gourmands.

Face à ce constat, de plus en plus d’utilisateurs se tournent vers un minimalisme matériel, un minimalisme d’usage voire un minimalisme dans le design de leur propre site. D’autres réinvestissent le vénérable protocole Gopher, inventé un peu avant le web et qui permet d’afficher du texte brut à travers des listes de liens (les « GopherMaps »).

En 2019, le dévelopeur Solderpunk, utilisateur du réseau Gopher, s’est décidé de l’améliorer et a créé les spécifications d’un nouveau protocole : Gemini. Le nom est une référence au programme spatial Gemini qui était à peine plus compliqué que le programme Mercury (référence à Gopher) et beaucoup plus simple que le programme Apollo (symbolisant le web). Le réseau Gemini s’appuie sur un format de texte, le « Gemtext », bien plus simple que la syntaxe des menus Gopher (le Gemtext est un markdown très simplifié et optimisé pour être facile à interpréter). Gemini impose également une connexion chiffrée par SSL entre le client et le serveur. Le but de Gemini était de créer un protocole simple, sécurisé, utilisable et ne pouvant pas être étendu pour afficher des publicités ou pister les utilisateurs.

Le site officiel du protocole Gemini
Ma découverte du protocole Gemini

Accéder au réseau Gemini demande l’installation d’un client, comme Offpunk. Un client graphique populaire est Lagrange. Ceux ne pouvant installer u