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 )
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 :
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)
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.
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
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!
Hopla
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?
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
Programme
La contribution du meetup Python Rennes est : Doc-tracing : outiller les discussions d’architecture avec des diagrammes d’exécution des tests fonctionnels.
Je parcours pas mal les sujets féministes, on en a d’ailleurs parlé lors du dernier CD. Et je viens d’avoir le plaisir de trouver un lien vers notre code de conduite pour la PyConFR depuis le site de la place des grenouilles (asso anti-sexiste) : Outils de diversité et inclusion – La Place des Grenouilles
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, …).
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.
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
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)
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.
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.
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 :
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€]
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
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 mais aussi Europython et FOSDEM:belgium:
On aime beaucoup l’open-source dans la société, quelques projet pour lesquels on a contribué de manière importante:
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).
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 :
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.
dans le premier cas python, python3python3.11 sont ceux de votre distrib’, utilisez le gestionnaire de paquets de votre distrib pour leur installer des paquets.
dans le second cas python, python3python3.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 !
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 :
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
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
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 ?
Regarde bien dans les yeux le bout de code suivant
deffoo():x=1classbar:x=x+1returnbarfoo()
exécute le mentalement. Rien d'exceptionnel ?
Et pourtant si,
NameError: name 'x' is not defined
Maintenant essayons avec :
deffoo():x=1classbar:y=x+1returnbarfoo()
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 ?
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).
Ne connaissant pas la nature des échanges entre l’afpy et raffut.media, je pose ça là
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ù ?) …
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é .
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.
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
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.
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.
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é :
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 :
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.
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" :
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.
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.
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 .
pour me contacter : louis.perrier at deleev.com , avec un CV idealement
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.
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
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 :
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.).
Salle Charles Darwin : « GEMSEO : une bibliothèque pour l’optimisation multi-disciplinaire » présenté par Jean-Christophe Giret, Antoine Dechaume, c'est maintenant !
Salle Thomas Edison : « The power of AWS Chalice for quick serverless API development in Python » présenté par @NamrataKankaria@twitter.com, c'est maintenant !
Salle Henri Poincaré : « Transformez vos algorithmes de données/IA en applications web complètes en un rien de temps avec Taipy » présenté par @Taipy_io@twitter.com, c'est maintenant !
Salle Rosalind Franklin : « Apport du langage Python dans un service de recherche hospitalière pour mener des analyses de deep learning » présenté par Clément Benoist, c'est maintenant !
Salle Henri Poincaré : « REX analyse antivirus des fichiers de la plateforme emplois de l’inclusion » présenté par François Freitag, c'est maintenant !
Salle Charles Darwin : « Traitement de données géographiques avec Rasterio, NumPy, Fiona et Shapely » présenté par @ArnaudMorvan@twitter.com, c'est maintenant !
Salle Henri Poincaré : « Une bonne quantité de Python peut-elle rendre Firefox moins vulnérable aux supply chain attacks ? » présenté par @mozilla_france@twitter.com, c'est maintenant !
Salle Charles Darwin : « Monorepo Python avec environnements de développement reproductibles et CI scalable » présenté par @smelc3@twitter.com, c'est maintenant !
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…
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…
Salle Rosalind Franklin : « CoWorks, a compositionnal microservices framework using Flask/AWS Lamba and Airflow » présenté par Guillaume Doumenc, c'est maintenant !
Salle Charles Darwin : « OCR : apprenez à extraire la substantifique moelle de vos documents scannés » présenté par Bérengère Mathieu, c'est maintenant !
Salle Rosalind Franklin : « Un membre très discret de la famille Jupyter mais pourtant si utile ! » présenté par Pierre-Loic Bayart, c'est maintenant !
Salle Henri Poincaré : « NucliaDB, une base de données pour le machine learning et les données non-structurées » présenté par @ebrehault, c'est maintenant !
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
Dans 4 jours exactement, salle Henri Poincaré : « Une bonne quantité de Python peut-elle rendre Firefox moins vulnérable aux supply chain attacks ? » présenté par @mozilla_france@twitter.com
Dans 4 jours exactement, salle Charles Darwin : « Monorepo Python avec environnements de développement reproductibles et CI scalable » présenté par @smelc3@twitter.com
Dans 4 jours exactement, salle Rosalind Franklin : « Supercharging Jupyter notebooks for effective storytelling » présenté par @matlabulous@twitter.com
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.
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.
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:
Dans 7 jours exactement, salle Charles Darwin : « GEMSEO : une bibliothèque pour l’optimisation multi-disciplinaire » présenté par Jean-Christophe Giret, Antoine Dechaume
Dans 7 jours exactement, salle Rosalind Franklin : « Interactive web pages with Django or Flask, without writing JavaScript » présenté par Coen de Groot
Dans 7 jours exactement, salle Thomas Edison : « The power of AWS Chalice for quick serverless API development in Python » présenté par @NamrataKankaria@twitter.com
Dans 7 jours exactement, salle Rosalind Franklin : « Save Sheldon: Sarcasm Detection for the Uninitiated! » présenté par @festusdrakon@twitter.com, Ananya
Dans 7 jours exactement, salle Henri Poincaré : « Nua, un PaaS open source en Python pour l'auto-hébergement de vos applications » présenté par @sfermigier
Dans 7 jours exactement, salle Henri Poincaré : « Transformez vos algorithmes de données/IA en applications web complètes en un rien de temps avec Taipy » présenté par @Taipy_io@twitter.com
Dans 7 jours exactement, salle Workshop / Atelier 2 : « Le réseau de neurones qui écrivait des romans » présenté par Bérengère Mathieu, Cécile Hannotte
Dans 7 jours exactement, salle Rosalind Franklin : « Apport du langage Python dans un service de recherche hospitalière pour mener des analyses de deep learning » présenté par Clément Benoist
Dans 7 jours exactement, salle Thomas Edison : « « Fixed bugs » n’est peut-être pas le meilleur message de commit » présenté par @alphare33@twitter.com
Dans 7 jours exactement, salle Workshop / Atelier 1 : « Initiation à Django à travers la création d'un blog » présenté par Mauranne Lagneau, @charletpierre@twitter.com
Dans 7 jours exactement, salle Henri Poincaré : « REX analyse antivirus des fichiers de la plateforme emplois de l’inclusion » présenté par François Freitag
Dans 7 jours exactement, salle Charles Darwin : « Traitement de données géographiques avec Rasterio, NumPy, Fiona et Shapely » présenté par Arnaud Morvan
Dans 7 jours exactement, salle Rosalind Franklin : « Accessibilité numérique : faire sa part quand on est développeur·euse backend » présenté par @AmauryPi
Dans 7 jours exactement, salle Workshop / Atelier 1 : « Mettre le web en page(s) : générer un document PDF avec HTML et CSS » présenté par @grewn0uille@twitter.com
Dans 7 jours exactement, salle Rosalind Franklin : « CoWorks, a compositionnal microservices framework using Flask/AWS Lamba and Airflow » présenté par Guillaume Doumenc
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
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
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
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
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
Vous l'aurez peut-être compris, mais pendant 2 jours on va tooter les conférences pile 7 jours avant leurs commencement à la #PyConFR. Et ce dans le but de toutes vous les présenter.
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.
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 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.
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).
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.
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.
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
importwave# Texte d'entréestring_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.wavnew_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.
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.
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 .)
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
Pour le Meetup Python du mois de février à Grenoble, ce sera un atelier sur les données en Python avec l’association Data for Good pour collaborer sur des données ouvertes.
Hopla
Je suis en train d’essayer de m’organiser pour faire le déplacement. Si dans celles et ceux qui ont plus anticipé que mois il vous reste une place, contactez moi
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
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.
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
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.
Le CFP est fermé, mais les portes seront ouverte et l’entrée gratuite
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
#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.
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.
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).
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!
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 !
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 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 !
“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.
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.
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])
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
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…
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
Simulation du comportement dynamique d’un AGV calqué sur nos robots
Émulation du logiciel embarqué
Génération d’erreurs selon un profil statistique (perte en navigation, déviation de trajectoire, perte de connexion, dérapage, etc…)
Connexion avec le superviseur
• Traitement et analyse de données statistiques
Mise à disposition des données statistiques des résultats des scénarios de simulation
Analyse au regard des KPIs demandées
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.
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.
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…
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 !
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
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 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).
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. 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.
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)
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.
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.
Auriez-vous des conseils sur l’utilisation de Travis via github, ou bien une autre solution, afin de tester des projets Python sous Windows avant “livraison” ?
Si vous avez besoin de produire des fichiers via des templates, ou patrons, j’ai fabriqué un projet permettant de faciliter l’emploi de jinja2 (qui fait le gros du boulot).
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.
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
Site de partage de photos
Site de cocktails (cf ci-dessus)
e-rated : site d’appréciations (selon des sujets, à définir)
Ask-a-question : site où l’on pose des questions sur des sujets divers, et des gens répondent
Write-a-book-together : site où l’on se connecte et où on peut écrire un livre à plusieurs
Wedding-couple-site : site où l’on uploade + partage des photos de mariage + livre de commandes
Playing-cards-collection : site où on scanne + échange des cartes (Magic the gathering)
Polls-and-surveys : site de création de sondages (= QCM, exemple très beau ici : quipoquiz)
Poems-generator : faire un cadavre exquis qui génère des poèmes + possibilité pour les utilisateurs de les noter / d’ajouter des mots
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
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)
Le-bon-recoin : refaire le bon coin en plus simple
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
Tv-fans : site de présentations + notes d’émissions télé
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.
Turn-by-turn : faire un jeu multijoueurs en tour par tour (jeu de cartes, de poker, ou de plateau etc)
Chat-with-someone : site de chat/discussion
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é.
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.
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
Site de partage de photos
Site de cocktails (cf ci-dessus)
e-rated : site d’appréciations (selon des sujets, à définir)
Ask-a-question : site où l’on pose des questions sur des sujets divers, et des gens répondent
Write-a-book-together : site où l’on se connecte et où on peut écrire un livre à plusieurs
Wedding-couple-site : site où l’on uploade + partage des photos de mariage + livre de commandes
Playing-cards-collection : site où on scanne + échange des cartes (Magic the gathering)
Polls-and-surveys : site de création de sondages (= QCM, exemple très beau ici : quipoquiz)
Poems-generator : faire un cadavre exquis qui génère des poèmes + possibilité pour les utilisateurs de les noter / d’ajouter des mots
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
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)
Le-bon-recoin : refaire le bon coin en plus simple
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
Tv-fans : site de présentations + notes d’émissions télé
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.
Turn-by-turn : faire un jeu multijoueurs en tour par tour (jeu de cartes, de poker, ou de plateau etc)
Chat-with-someone : site de chat/discussion
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é.
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.
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 :
Créer et améliorer les approches permettant de traiter les données de façon efficiente
Participer à la construction de la plateforme de traitement de données et à son
déploiement opérationnel
Établir et promouvoir les bonnes pratiques de traitement de données en étroite
collaboration avec nos data scientistes,
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”.
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
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 !
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
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".
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 :
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 :
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).
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
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 ?
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 ?
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!
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 :
Regrouper les fichiers dans des archives pour que le nombre de fichiers sur la baie reste faible.
Garder un accès aux données via une API de filesystem posix.
Pas de délai pour démarrer une expérience.
Mise en cache transparente pour l'utilisateur.
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 :
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.
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)
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.
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 :
Moissonnage du Web :
Beautiful Soup Extraction de données provenant de fichier HTML ou XML
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?
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).
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).
Salut,
j’ai créé un micro-module pour récupérer les données écowatt.
C’est disponible ici Thierry Pellé / pycowatt · GitLab,
probablement très sale (je suis encore un oeuf dans le monde du serpent et de git),
mais ça fonctionne a minima.
Tout conseil/critique est bienvenue si vous avez des idées de Grands Serpents
Pour clôturer cette année 2022, le meetup de décembre a lieu le jeudi 15 décembre à Hiptown (à la Part-Dieu). Au programme : la programmation tchou-tchou !
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
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"; }
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/) }) })
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:
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.
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.
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é?
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.
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
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.
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.
Exposition organisé·e par l’Afpy l’Université Bordeaux-Talence
Conférence annuelle des pythonistes francophones 🐍 🇫🇷
https://pycon.fr/2023/
Du jeudi 16 février au dimanche 19 février 2023
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é.
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.
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.
Bonjour et félicitation pour ce boulot!
Je n’ai malheureusement pas trop de temps à consacrer à la traduction ces derniers temps
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) ?
Les inscriptions pour la PyConFr23 sont maintenant ouvertes !
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 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 .
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 , 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.
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()
Lancement de l'appel à participation pour la #PyConFR23 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 https://cfp-2023.pycon.fr
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()
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 :
Animer une conférence ou un atelier ? Tenir un stand dans le village associatif ? Proposez votre intervention via l’appel à participation.
Soutenir l’événement financièrement ? Consultez la page sponsor. Une campagne HelloAsso sera également mise en ligne bientôt (avec de chouettes goodies, évidemment).
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é).
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 ), 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.
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.
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
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) :
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 !
#[no_mangle]pubunsafeextern"C"fntest_string(ptr_source: *mutc_char)-> *constc_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) letv=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 lets=CString::new(v).unwrap();letp=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_presultat=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_presultat=malib.test_string(message.encode())# par défaut, ".encode()" est en UTF-8print("[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)]pubstructMonObjet{puba: c_int}#[no_mangle]pubunsafeextern"C"fntest_structure(mutmonobj: 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]pubunsafeextern"C"fntest_structure_ref(ptr_monobj: *mutMonObjet){// 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)letmonobj=&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 classMyStruct(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,
#[repr(C)]#[derive(Debug)]pubstructValeurRetour{puba: c_int,pubcontenu: Vec<c_int>}#[no_mangle]#[allow(improper_ctypes_definitions)]pubunsafeextern"C"fntest_array(nbre: c_int,ptr_tab: *mut[c_int]){lettab=&mut*ptr_tab;println!("[RUST] -(5)-> {:?}",nbre);foriin0..(nbreasusize){println!("[RUST] -(6)-> [{:?}] {:?}",i,tab[i]);}}#[no_mangle]#[allow(improper_ctypes_definitions)]pubunsafeextern"C"fntest_array_retour_simple(nbre: c_int,ptr_tab: *mut[c_int])-> *mutc_int{lettab=&mut*ptr_tab;println!("[RUST] -(7)-> {:?}",nbre);letnbre=nbreasusize;// une version courte (mais sale) du casting : attention aux valeurs max admissibles par le système pour 'usize' dans un tel cas foriin0..nbre{println!("[RUST] -(8)-> [{:?}] {:?}",i,tab[i]);tab[i]+=1;println!("[RUST] -(8')-> [{:?}] {:?}",i,tab[i]);}letmutnouveau_vecteur: Vec<c_int>=vec![42;nbre+1];// pas propre mais fonctionnel letp=nouveau_vecteur.as_mut_ptr();std::mem::forget(nouveau_vecteur);p}#[no_mangle]pubunsafeextern"C"fntest_array_retour_complexe(nbre: c_int)-> *mutValeurRetour{// 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);letnbre_c_int: c_int=(nbre+1).try_into().unwrap();letnbre_usize: usize=(nbre+1).try_into().unwrap();letvecteur_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 :
… 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 292022, 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 292022, 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]foriinrange(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]foriinrange(0,len(tableau)+1)])print("--- partie 3.2 - création d'un objet de retour de taille indéterminée à l'appel")classValeurRetour(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.av=r3.contents.contenuprint("[PYTHON] ===>",a,[v[i]foriinrange(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…
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.
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.
Un ancien (lead) développeur web reconverti depuis 3 ans dans la Data précise quelles sont les compétences minimales de Python nécessaires pour démarrer en Data Science
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.
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.
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
Vous êtes intéressés par les opportunités de carrière à l’étranger et plus particulièrement au Canada / au Québec ?
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.
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.
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
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!
A remote-friendly environment up to 3 days / week for people in “Ile de France” and full-remote policy for people living outside
An attractive package that includes stock-options
The latest setup equipment including cool apps, tools and technologies
Working to develop a meaningful product → we already helped more than 200k developers!
Lots of team-building activities
Many opportunities for career development in the long term
A strong engineering culture
Pet-friendly offices → every Guardian gets to bring their dogs to the office and we love it!
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
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 Dockerco-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 theGitHub 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!
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.
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).
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.
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 :
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.
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.
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.
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é
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 :
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).
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
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
Pour le prochain meetup Python, on se retrouve à 19h dans les locaux de l’IPI Lyon le mercredi 19 octobre.
Benjamin viendra nous parler du métier de développeur à 50 ans !
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.
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…
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
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.
Bonjour,
J’ai compilé python3.10 via make altinstall (/ubuntu 20.04). J’ai bien maintenant python3.10 disponible sur mon PC, cependant pas tkinter.
Comment puis-je avoir tkinter pour ce python3.10 compilé?
Merci.
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
Présentation de l’entreprise (2 min) en conférence plénière (samedi)
-
-
Stand dans le hall
-
-
-
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.
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.
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 !
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.
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
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.
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
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.
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.
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.
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.
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).
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) !
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.
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.
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.
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.
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.
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é. ;-)
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()
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.
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.
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 ?
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 ?
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 !
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.
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.
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 !
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 :
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 ?
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 …
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 !
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.
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.
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é.
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 ?
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 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.
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 :
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 )
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é)) :
É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 ?
Les fonctions intégrées sont souvent intéressantes, mais elles ne font pas tout
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
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.
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.
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.
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+ ):
Nouveau meetup sur Lyon le jeudi 16 juin !
Nous serons accueilli par IT Solutions Factory (vers Charpennes) et @HS-157 nous parlera d’adminstration système avec Python.
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).
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
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.
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)
Si oui je vous laisse faire un signe, sinon vous pouvez toujours relayer cette information (sur le discord par exemple)
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.
Librem5 - L'interface n'est pas traduite : Au premier lancement la langue préférée de l'utilisateur est demandée, mais l'interface reste affichée en anglais par la suite. C'est assez simple à corriger à la main, mais c'est assez surprenant.
Clavier virtuel - Indicateurs d'interaction : Lorsqu'une lettre est pressée, on devrait avoir un indicateur visuel pour indiquer de quelle lettre il s'agissait.
Librem5 - Lumière nocturne : GNOME a une fonctionnalité de lumière nocturne qui rougit l'écran automatiquement en fonction de l'heure. Il semblerait qu'il y a des choses à faire dans le noyau pour utiliser cette fonctionnalité avec le Librem5.
Appels - Barre latérale de navigation alphabétique : L'application manque d'un outil pour rapidement sauter à une lettre donnée de l'alphabet, ce qui est très utile lorsqu'on a des centaines de contacts.
Contacts - Barre latérale de navigation alphabétique : L'application manque d'un outil pour rapidement sauter à une lettre donnée de l'alphabet, ce qui est très utile lorsqu'on a des centaines de contacts.
Tâches - Interface mobile : L'interface n'est pas adaptée aux mobiles, donc l'application est inutilisable pour le moment.
Fractal - Chiffrement de bout en bout : À Yaal Coop nous chiffrons tous nos salons, donc le chiffrement de bout en bout est nécessaire pour que nous puissions utiliser Fractal.
Cartes - Navigation : L'application peut calculer des itinéraires, mais ne fournit rien pour les suivre. On ne peut donc pas encore l'utiliser dans une voiture.
Cartes - Appui long pour ouvrir le menu contextuel : Certaines actions sont cachées derrière le menu contextuel sur bureau, qui s'ouvre avec un clic droit. Sur mobile on ne peut donc pas ouvrir ce menu. Un appui long devrait permettre d'ouvrir le menu.
Logiciels - L'interface n'est pas réactive : Lorsque les dépôts Flatpak sont actifs, chaque action prend une éternité à s'exécuter, au point qu'il faille de temps en temps redémarrer l'application.
Phosh - Glisser pour ouvrir et fermer le menu : Pour le moment les menus du haut et du bas ne s'ouvrent qu'en tapant, or glisser est plus naturel sur mobile. Le correctif est développé mais pas encore déployé.
Librem5 - Choix de la phrase de chiffrement au premier démarrage : Au premier démarrage, une phrase de chiffrement par défaut est demandée à l'utilisateur, en anglais, avec un clavier qwerty. Il nous semblerait plus accessible de demander à l'utilisateur de choisir sa phrase de déchiffrement au premier démarrage, une fois qu'il a choisi sa langue et son clavier.
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.
Agenda - Indicateur visuel de sélection : Lorsque l'on sélectionne une période, on n'a aucun indicateur visuel de ce qui est sélectionné avant d'avoir terminé la sélection.
Agenda - Interface mobile : Agenda ne s'affiche pas trop mal sur mobile, mais certains détails manquent. Par exemple, les infobulles peuvent être plus larges que l'écran.
Horloges - Widget de montre analogique : Taper à multiple reprises pour changer les minutes ou les heures n'est pas pratique. Afficher un cadran d'horloge analogique permettrait de faire la même chose en tapant seulement deux fois sur l'écran.
Disques - Interface mobile : Le menu de chiffrement n'est pas adapté aux mobiles, mais l'application reste utilisable.
Evince - Passer automatiquement en mode nocturne : Evince permet de manuellement inverser les couleurs. Il serait pratique que le système fasse ça automatiquement en fonction du mode nocturne.
Cartes - Taper deux fois pour zoomer : Sur bureau un double clic permet de zoomer. Taper deux fois sur la carte devrait le permettre aussi.
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.
Squeekboard - Alternate characters popovers: We Europeans use a lot of diacritics, the keyboard should offer us a way easily write any common accentuated character.
Librem5 - Translation have to be forced: At first launch, the welcome panel asks the user for their language, but this action is uneffective and the system is displayed in English after that. This is easy to fix with a command-line, but surprising for a first-launch.
Clocks - Alarms should wake the system up: If an alarm has been set, it should ring on time, no matter what. Alarms should wake the system up if needed.
Squeekboard - Input indicator: When a key is tapped, users should have a visual indication of which key is actually pressed.
Librem5 - Night light support: GNOME provide a night light feature that reddish the screen automatically depending on the hour. It seems there are some kernel thing to do to enable this. Without this, watching to the screen at night just kill your eyes.
Calls - Alphabet side bar: The application lacks an alphabet side bar to quickly jump to some letters in the contact list. With thousands of contacts this would become more than useful.
Contacts - Alphabet side bar: The application lacks an alphabet side bar to quickly jump to some letters in the contact list. With thousands of contacts this would become more than useful.
To-Do - Adaptive UI: The UI is not adaptive at the moment, so To-Do is not usable.
Fractal - End-to-end encryption: At Yaal Coop we encrypt our conversations, so E2EE in Fractal is a blocker to us.
Maps - Adaptive UI: The side-menu is not usable on a Librem 5 at this point.
Maps - Navigation view: The application can calculate itineraries, but do not provide anything to follow the itineraries. Is is not usable in a car yet.
Maps - Long-press to open the contextual menu: Some actions are only accessible via right click on desktop, so on mobile they just cannot be done. A long press on the map should have the same effect as a right click.
In this category we put the issues that would improve our comfort.
This mainly concern mobile UX improvements.
Phosh - Automatic light and dark theme switch: Along with the screen warmness adaptation, switching from a light to a dark theme when the night comes is a bliss for the eyes. This is achievable with GNOME Shell with the Night Theme Switcher extension for instance.
Phosh - Swipe to open and close the menu: As of today, the application menu and the top menu can only be opened by tapping. However swiping to open the menu feels more natural on mobile. This have been implemented but not yet deployed.
Phosh - Automatically unlock the keyring: When opening a new session with a PIN, it is then asked a second time to unlock the GNOME keyring. This feels redundant.
Librem5 - Ask the encryption passphrase at first boot: At first boot, a (default) passphrase is asked to decrypt the disk, in English, with a qwerty keyboard. It would be friendlier to not ask it a the first boot and let the user choose it.
Librem5 - Disk decryption screen l10n: The disk decryption screen is in English, with a qwerty keyboard, so it is not adapted to other languages.
Phosh - Keep the time displayed when the top menu is opened: The time is hidden when the top menu is opened. Time is still an interesting information to display when the menu is opened, and without this the top bar appears strangely empty. This seems to be fixed but not yet deployed.
In this category we put everything else that we met during our test, from nice-to-have features to slight mobile UX improvements:
Chatty - Swipe to return to the message list: When a message is displayed, there is an arrow button that allows to go back to the message list, but the more natural action on mobile would be to swipe left.
Geary - Swipe to return to the message list: When a message is displayed, there is an arrow button that allows to go back to the message list, but the more natural action on mobile would be to swipe left.
Calendar - Adaptive UI: Calendar displays good enough on mobile, but some details are missing. For instance, the tooltips can be larger than the screen.
Clocks - Analog watch widget: Tapping multiple times on the screen to select hours and minutes is cumbersome. An analog watch widget could achieve the action in on two taps.
Disks - Adaptive UI: The encryption menu is not adaptive, but this is still usable.
Evince - Automatically switch to night mode: Evince allows to manually invert the background color at night. This should be done automatically depending on the system dark mode.
Maps - Double-tap to zoom: On desktop double-clicking zooms, as should do double-tapping on touchscreen.
Squeekboard - Bépo support: This one does only concerns a few nerds, but bépo (a French dvorak layout) support would be awesome.
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 !
(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 ?
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
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
Appel d’introduction avec le recruteur - 15’
Visio avec le CTO - 60’
Test technique - 60’
Visio avec deux développeurs de notre équipe - 60’
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.
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.
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.
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
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
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.
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é.
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 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'')
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;
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.
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:
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?
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
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).
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.
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é.
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 ?
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.
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
assigner le badge aux membres (prérequis: l’email helloasso est associé au compte de l’adhérent): automatiquement via l’API ou manuellement via l’interface ?
Qui peut créer la clef d’API helloasso ? Un compte admin de bot Discourse pourrait-il être créé ?
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
(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.)
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.
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…)
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).
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.