MakeMake The Dwarf Planet is a feed agregator.

Développeur.se python fullstack (Nantes)

by f.oliveau from AFPy discuss

Nous recherchons un·e développeur·se avec déjà une première expérience professionnelle significative en Python pour poursuivre le développement de nos services. Avoir également de l’expérience avec Vue, Typescript, Docker ou Ansible est un plus.

Type d’emploi : CDI ou CDD, temps plein ou 4/5, poste sur Nantes (présentiel mini 2/3 jours par semaine)
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
Nous recherchons pour ce poste un collaborateur habitant à proximité de Nantes.

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/présentiel

  • Statut cadre en fonction du diplôme/l’expérience (Syntec)

Processus de recrutement :

Les candidatures “one clic” ne sont pas regardées. Si vous prenez le temps de faire une candidature personnalisée, nous l’étudierons; sinon ne perdez pas votre temps, envoyez votre candidature à une ESN car on a pas de baby foot.

  • 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

  • Entretien dans nos bureaux à Nantes

  • Offre (salaire en fonction de l’expérience/niveau)

SVP pas de démarchage pour de l’outsouring ou cabinet RH, merci

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Construire un C&C basique en python/FORTH au dessus de MQTT

by Jul from Linuxfr.org

Sommaire

Introduction

Qui n'a pas rêvé de faire sa console de pirates qui contrôle ses agents au doigt et à l'œil traditionnellement sur IRC ?

C'est le principe d'un Control & Command parfois appelé C&C pour les botnets. Mais ici, on en fait un éducationnel.

Il s'agit de piloter des agents à distance en leur envoyant des commandes sur un BUS qui résulte dans des actions prédéfinies comme :
- arrêtes toi,
- reprends,
- dis si tu es présent et en vie …

Ci-suit un petit exemple en python de l'implémentation d'une telle logique en moins de 100 lignes de codes

Ingrédients

Cette recette nécessite : python, et en dépendances : paho-mqtt, confined, ainsi qu'un serveur MQTT (mosquitto avec ses utilitaires en ligne de commande) correctement configurés.

La pièce de résistance

Pour tout process que l'on veut piloter on va écrire du code python comme :

import paho.mqtt.client as mqtt
from time import time, sleep
from confined import parse, Value, pop
from subprocess import Popen,PIPE
import pathlib
import os
import socket

stack = []
client_id = socket.gethostname()
show_must_go = False

def on_connect(client, userdata, flags, reason_code, properties):
    print(f"Connected with result code {reason_code}")
    client.subscribe(f"BUS/{client_id}")
    client.subscribe(f"BUS")

def on_lun(*a, **kw):
    kw["ctx"]["state"]="RAZ"

def on_set_time_slice(*a, **kw):
    kw["ctx"]["time_slice"]=stack.pop().float


def on_ping(*a, **kw):
    global client_id
    client = kw["ctx"]["client"]
    client.publish("RES", f"'{client_id}':PONG")


def on_sel(stack, **kw):
    global client_id, show_must_go
    if stack.pop().str == client_id:
        show_must_go = True

def on_unsel(stack, **kw):
    global client_id, show_must_go
    if stack.pop().str == client_id:
        show_must_go = False

def on_test(stack, **kw):
    print("Yo")


ctx = dict(
    cap=["www", "forth" ],
    time_slice=10,
    dispatch=dict(
        lun=on_lun,
        ping=on_ping,
        sel=on_sel,
        unsel=on_unsel,
        tsset=on_set_time_slice,
        _TEST=on_test,
    ),
)

def on_message(client, userdata, msg):
    global stack, ctx
    ctx["client"] = client
    client.publish(
        "RES", 
        str(parse(
           ctx,
           msg.payload.decode(),
           data=stack, 
           )
        )
    )


mqttc = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=client_id)
mqttc.on_connect = on_connect
mqttc.on_message = on_message

mqttc.username = "pub"
mqttc.password= "pub"
mqttc.tls_set(
    keyfile="./cfg/pub.key",
    certfile="./cfg/pub.crt",
    ca_certs="./cfg/RootCA.crt",
    tls_version=2
)
mqttc.connect("badass.home", 8883, 60)
mqttc.loop_start()
os.chdir(os.path.dirname(__file__))

plugins = pathlib.Path("../plugin")

while True:
    start = time()
    if show_must_go:
        for p in plugins.glob("*_enabled"):
            with Popen([ p,  ], stdout=PIPE, stdin=PIPE, stderr=PIPE, bufsize=0,) as writer:
                while res := writer.stdout.read():
                    writer.stdout.flush()
                    for msg in res.split():
                        mqttc.publish(f"DATA/{client_id}", msg.decode())
        mqttc.publish("DATA/", f"{client_id}:core.processing_time:{time()-start}:GAUGE")
        if time() -start < ctx["time_slice"]:
            sleep(ctx["time_slice"] - (time() - start))

Le client est en mode parano : TLS activé avec login/pass enforcé coté serveur par MQTT.

On va définir 2 commandes :

pub.sh

#!/usr/bin/env bash
HERE=$( dirname $0 )
pushd $HERE

mosquitto_pub --cert ../cfg/4711.crt --key ../cfg/4711.key --cafile ../cfg/RootCA.crt -h badass.home -t BUS -u 4711 -P 4711 -m "$1"
popd

qui publie en MQTT sur un canal BUS

et
listen.sh

#!/usr/bin/env bash

HERE=$( dirname $0 )
pushd $HERE
mosquitto_sub -h badass.home -t RES/# &
mosquitto_sub -h badass.home -t DATA/# &
popd

La recette

Pour pinger votre agent il vous suffit de faire

pub.sh PING

ce qui répond

'badass':PONG

Pour tester la fonction de test locale :

pub.sh _TEST

Normalement sur sortie standard du process python vous pouvez lire : 'Yo'.

pub.sh "'badass': SEL"

La sortie de LISTEN devrait montrer des lignes comme suit:

badass:cpu.load:1.39:GAUGE
badass:stat.procs_running:1:GAUGE
badass:stat.procs_blocked:1:GAUGE
badass:stat.intr:235643164:DERIVE
badass:stat.ctxt:474453646:DERIVE
badass:stat.processes:237036:DERIVE
badass:ps.processes:320:GAUGE
badass:ps.uninterruptible:1:GAUGE
badass:ps.runnable:1:GAUGE
badass:ps.sleeping:256:GAUGE
badass:ps.idle:62:GAUGE
badass:ps.stopped:0:GAUGE
badass:ps.paging:0:GAUGE
badass:ps.dead:0:GAUGE
badass:ps.zombie:0:GAUGE
badass:files.opened:17184:GAUGE
badass:core.processing_time:0.039983272552490234:GAUGE

Qui sont le résultat de l'enclenchement de la mesure qui se fait toutes les 10 secondes par défaut

pub.sh "20: TSSET"

Passe les mesures à 20 secondes d'écart.

pub.sh "'badass': UNSEL"

Arrête les mesures.

Diverses Questions Réponses

Un forth dans la boucle était il nécessaire ?

Non.

Mais il se trouve que j'en ai un en stock et que je rêvais de l'utiliser pour faire des tâches innocentes (principalement du templating).

Il est pas utilisé, mais disons que si vous faisiez :

pub.sh "2: 2: ADD"

en sortie vous auriez autant de 4: qu'il y a d'agents connectés sur le BUS.

Vous avez de base une calculette 4 opérations distribuées en prime.

Un vrai command & control préférerait un protocole plus passe partout comme https pour être moins visible

Ça tombe bien paho-mqtt et mosquito permettent de passer en websocket :)

Et si je voulais sécuriser ?

MQTT le permet avec des ACL par sujets.

Où est l'arborescente complète du projet il manque les plugins de mesure ?

Les plugins sont ici

Mais c'est bête en fait…

C'est pas faux, c'est pour ça que je sais pas quoi faire avec ce « projet »

Trop petit pour être un projet, ultra dur à tester, mais assez rigolo pour être utile

Des idées de futurs ?

Un projet « Bus Of Things » (BOT) qui standardiserait les commandes envoyées et leurs API pour faire comme une sorte d'ansible.

Une logique d'IPC/messaging générique pour des systèmes distribués (inclurais la gestion de process & co).

Un FORTH qui verrait toute fonction/agent comme reliée à un BUS MQTT et pour lequel les messages serait du FORTH qui agirait sur la fonction que s'appelerio objective FORTH. (Ça implique de sacrément développé la partie langage).

Pleins d'idées, trop d'idées …

Les sorties actuellement ressemblent au format d'entrée … C'est suspect non ?

Oui, j'ai envie de tester de laisser l'orchestrateur accepter des injections de code depuis les agents. Ex légitime, quand une sonde de mesure est en OVERRUN (trop de temps passé à mesurer comparé à une cadence attendue) qu'elle puisse changer la « clock » avec TSSET de l'orchestrateur.

J'ai envie d'expérimenter des systèmes scheduler less où chaque agent peut devenir le contrôleur et prendre la main et/ou modifier l'orchestrateur qui envoie les commandes.

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Profileur mémoire MALT 1.6.0 et support de Python

by Sébastien Valat,Benoît Sibaud,Pierre Jarillon from Linuxfr.org

MALT c'est quoi ?

L'optimisation est une activité connue de bien des développeurs, fouiller, chercher dans son code, pour, peut être, gagner un peu de performance (beaucoup, parfois). Dans cette tâche ardue, face à des codes grandissants, massifs, utilisant de nombreuses bibliothèques externes, un outil central dans ce travail de fourmi : le profileur.

Le profileur fait partie des outils importants pour le développeur qui se soucie des ressources qu'il utilise. Il lui permet de chercher les points chauds dans son code, comprendre le cout de chaque fonction, chaque ligne implémentée. Bien des outils s'intéressent à une chose : bien utiliser votre processeur.

Mais que se passe-t-il si vous rencontrez des difficultés avec l'utilisation de votre mémoire ? Si vous pensez mal utiliser la fonction malloc() du C ou l'opérateur new du C++ ? Si vous avez oublié qu'une de vos variables globales occupe 10 Go (surtout en Fortran) ?

Publié il y a quelques années MALT (licence CeCILL-C) permet de répondre à la question en cherchant toutes les allocations mémoires faites par votre code. Cet outil avait fait l'objet d'un article sur LinuxFR en 2018 lors de sa mise en open source : Profileurs mémoire MALT et NUMAPROF.

Versions 1.6.0

Avancées

Depuis, cet outil fait son chemin avec l'ajout du support de Rust ainsi que nombreuses corrections et ajouts tels que la possibilité de dumper le profile mémoire juste avant que le système ne soit plein.

malt -o dump:on-sys-full-at=80% -o watch-dog=true ./mon_programme

# également :
#  -o dump:on-app-using-rss=10G
#  -o dump:on-app-using-virt=80%
#  -o dump:on-app-using-req=500M

La possibilité de suivre les appels à mmap, mremap, munmap si vous les appelez directement dans votre code au lieu de laisser malloc faire son travail.

Support de python

MALT a initialement été développé dans le contexte du calcul à haute performance — HPC (High Performance Computing) donc surtout pour le C / C++ / Fortran / Rust.

Dans la communauté scientifique, nous voyons dans les laboratoires de plus en plus fleurir l'usage d'un langage à priori bien éloigné de nos prérogatives de performances : Python.

Dans un cadre de calcul scientifique, il est souvent utilisé plutôt comme un wrapper permettant d'appeler et d'orchestrer des bibliothèques en C /C++ / Fortran, elles, performantes. Quoi que l'usage amène aussi à l'écrire de certaines parties du code en Python grâce à Numpy ou Numba pour accéléré la partie calcule sur des tableaux ou autres frameworks d'exploitation des GPU.

La version 1.6.0 de MALT vient d'ajouter le support (encore quelque peu expérimental) natif de Python permettant d'analyser un code pur python ou mix Python / C / C++…. Il s'agit pour l'instant de la première version avec ce support, il reste donc du travail.

Sont supportés les versions Python supérieures à 3.11 ainsi que les environnements Conda / Anaconda / Venv. À l'heure de rédaction de cet article, cela comprend les versions 3.11 à 3.14.

MALT étant orienté C / C++, il ne supporte que Linux comme système d'exploitation. (NdM: la causalité évoquée ici devrait faire réagir des développeurs d'autres systèmes libres notamment :))

Utilisation sur Python

Si la commande malt fonctionne parfaitement, il est recommandé d'utiliser le wrapper malt-python qui adapte quelques configurations spécifiques à Python non encore automatiques.

malt-python ./script.py

# équivalent à 
malt --profile python-default ./script.py

# liste des profiles
malt --profile help

# Afficher le profile
malt-webview ./malt-script-py-6889.json

Profilage rapide

Notons que l'overhead de MALT est important en Python du fait du large nombre d'allocations générées par ce langage et de la méthode de résolution des piles d'appels pour retrouver les lignes dans votre code. Ces détails d'analyse peuvent être désactivés via :

# Désactivé complète de l'analyse des piles
malt-python -p python-no-stack ./my_script.py

# Analyse des piles par "sampling"
malt-python -p python-sampling ./my_script.py

Nouvelle interface

La version 1.6.0 arrive également avec une nouvelle interface graphique avec un code remis à jour
par rapport à sa version originale vieillissante.

Capture annotation python

Profil statique

Pour ceux qui voudraient échanger les profils avec d'autres sur d'autres OS, il est possible depuis la 1.6.0 de générer une version statique des pages de l'interface (hors annotation des sources et arbre d'appel navigable) via :

# Toues les pages possible en statique
malt-webview -static ./report malt-progr-123456.json

# Seulement la page de résumé.
malt-webview -static-summary ./report malt-progr-123456.json

Installation

MALT n'est pas encore disponible dans les distributions classiques, vous devez donc le compiler et l'installer à la main. Le nombre réduit de dépendances obligatoires en fait un outil relativement facile à installer.

On trouvera la procédure dans la documentation du projet.

Documentation

La documentation a été complètement ré-écrite et disponible sur le site officiel : documentation.

Outils similaires pour Python

Découvrir un outil est aussi l'occasion d'en découvrir d'autres. Restons dans le monde du Python, si MALT ne vous convient pas vous trouverez peut-être votre bonheur avec les outils suivants et complémentaires à MALT et eux totalement dédiés au Python toujours pour la mémoire :

  • Memray (Apache Public License 2)
  • Scalene (Apache Public License 2)

MALT se positionne par rapport aux deux présentés en apportant une analyse fine en annotant tout le source code de l'application. Il offre également une analyse des variables globales et TLS coté C/C++/Fortran/Rust.

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Développeur Full Stack - OTERIA

by mdk from AFPy discuss

(Full disclosure : je travaille à Oteria en tant que prof de Python et de C, je relaie ici une offre d’emploi émise par l’école. )

Développeur Full Stack - OTERIA

CDI – Gennevilliers (92) - Métro Gabriel Peri - Ligne 13 - Début: ASAP - autour de 40k€ brut annuels selon profil et expérience

À propos d’OTERIA

OTERIA est une école d’excellence dédiée aux métiers de la cybersécurité.
Elle forme des profils solides techniquement, engagés, capables d’avoir un impact réel et durable dans l’écosystème cyber.

Dans un contexte de marché du travail tendu, de révolution de l’IA et de transformation profonde de l’enseignement supérieur, nous sommes convaincus que les écoles ont une responsabilité :
former des jeunes talents capables de maîtriser des technologies de pointe, leur sécurité et l’IA, grâce à une pédagogie exigeante, ancrée dans le réel et fondée sur l’émulation humaine.

OTERIA n’est pas uniquement un programme de formation. C’est une communauté, une culture, et une vision exigeante de l’éducation, tournée vers l’action, la transmission et le réel.

L’école accueille aujourd’hui 300 étudiants, de Bac+1 à Bac+5, et s’appuie sur une équipe de 8 personnes, engagées au quotidien dans le projet éducatif et le développement de l’école. Nous faisons le choix de rester une structure à taille humaine, afin de préserver l’agilité, la proximité et la capacité d’adaptation qui font la force d’OTERIA, tant dans sa pédagogie que dans son fonctionnement, tout en capitalisant pleinement sur l’IA pour gagner en efficacité et en impact.

Nous lançons le développement d’une nouvelle plateforme pédagogique interne ambitieuse, pensée comme un environnement d’apprentissage intelligent, augmentant le présentiel grâce au numérique et à l’IA.

Cette plateforme n’est ni un LMS classique, ni un MOOC. C’est un outil pédagogique vivant, conçu pour :

  • aider les professeurs à améliorer continuellement leurs cours,
  • offrir aux étudiants des expériences d’apprentissage motivantes,
  • capitaliser sur ce qui se passe réellement en cours,
  • et créer une communauté technique autour de la plateforme.

C’est dans ce contexte que nous recrutons un développeur full stack.

LES MISSIONS

Au sein de l’équipe, vous prendrez en charge le développement de l’écosystème numérique de l’école. Votre rôle central consistera à concevoir et développer la première version du KERNEL, l’environnement pédagogique propriétaire d’OTERIA.

Pour ce projet, vous bâtirez une architecture backend modulaire en FastAPI couplée à une base SQL. Vous devrez traduire techniquement le concept d’« Expériences Pédagogiques » et développer une structure API-First intégrant des services d’IA internes pour la génération de contenu et l’analyse de données. Vous assurerez également la mise en place d’une interface unifiée et « mobile-friendly » pour les professeurs et les étudiants.

En parallèle de ce projet structurant, vous interviendrez sur l’ensemble des chantiers techniques de l’école. Vous participerez notamment au développement d’outils internes destinés à soutenir les différentes équipes (comme le marketing ou les opérations).

Vous contribuerez à l’automatisation des processus métiers (via des outils comme n8n ou du scripting) et assurerez la maintenance évolutive des applications existantes. Votre mission inclura également une veille technique pour garantir la robustesse et la sécurité de l’infrastructure, en cohérence avec les exigences d’une école spécialisée en cybersécurité.

Enfin, vous interviendrez en tant que référent pédagogique sur les enseignements liés au développement, et aurez l’opportunité de concevoir, animer et faire évoluer les cours de développement, ainsi que de produire des contenus pédagogiques structurants, notamment sous forme de projets applicatifs destinés aux étudiants.

Le KERNEL a vocation à devenir un actif central de l’école : un socle technologique structurant, au cœur des usages pédagogiques, techniques et communautaires d’OTERIA — une forme d’« OS » de l’école.

À mesure que la plateforme montera en charge (usages, utilisateurs, contributions étudiantes, intégrations IA), le rôle pourra naturellement évoluer vers des responsabilités élargies : structuration de la vision technique long terme, pilotage de la scalabilité et de la robustesse de la plateforme, encadrement de contributeurs (internes, étudiants, prestataires), prise de rôle de Lead Developer / référent architecture du produit.

Compétences

Techniques

  • Développement Backend : Maîtrise approfondie de Python et du framework FastAPI pour construire une architecture performante et modulaire.
  • Base de données : Expertise en SQL et en modélisation de données.
  • Architecture API-First : Capacité à concevoir une API documentée et sécurisée, destinée à alimenter l’interface web et, à terme, une application mobile native.
  • Intégration IA : Expérience technique dans l’intégration d’APIs d’Intelligence Artificielle local pour des fonctionnalités de génération de contenu et d’analyse de données.
  • Frontend & Mobile : Compétence en développement d’interfaces web responsives (Mobile-friendly), respectant la contrainte d’une interface unique pour les vues “Professeur” et “Étudiant”.

Professionnelles & Méthodologie

  • Gestion de projet technique : Capacité à respecter le périmètre d’un MVP (Minimum Viable Product) en se concentrant sur les fonctionnalités critiques (création, diffusion, évaluation) et en écartant les développements hors-scope.
  • Exigence qualité : Rigueur dans l’écriture du code et la documentation (usage de Gitlab Interne pour mise à disposition Open Source aux étudiants), en cohérence avec le positionnement d’excellence d’OTERIA dans le domaine de la cybersécurité.
  • Collaboration : Aptitude à travailler au sein d’une équipe opérationnelle de 8 personnes et à dialoguer avec des profils non-techniques (équipe pédagogique) pour ajuster les fonctionnalités.

Atouts appréciés

  • Expérience avec les outils d’automatisation de workflow (type n8n / make).
  • Appétence pour la pédagogie et le contexte d’une école.

L’environnement de travail

  • Présence sur le campus de l’école:
    • c’est là que se passent les échanges clés,
    • c’est là que vivent les usages réels,
    • c’est là que le projet prend du sens.
  • Télétravail occasionnel
  • Contact direct avec :
    • Le responsable technique de l’école
    • le directeur général,
    • les professeurs,
    • les étudiants.

:backhand_index_pointing_right: La plateforme n’est pas un projet “en chambre”, elle se construit sur le terrain.

Ce que nous recherchons avant tout

Nous recherchons une personne engagée, curieuse et motivée, désireuse de s’investir dans un environnement où le projet technique a un sens pédagogique fort.

Le candidat devra :

  • manifester un intérêt réel pour le monde de l’enseignement, et plus largement pour les enjeux de transmission des savoirs ;
  • être sensible aux questions de pédagogie, d’impact et d’amélioration continue, au-delà de la seule dimension technique ;
  • apprécier le fait de travailler sur un produit utilisé en conditions réelles, dont le code est appelé à être lu, compris, challengé et enrichi par d’autres — notamment par des étudiants ;
  • faire preuve d’un esprit d’ouverture, tant dans ses choix techniques que dans sa manière de collaborer, documenter et partager.

Nous attachons plus d’importance à la qualité du raisonnement, à la capacité à apprendre et à s’adapter, qu’à un empilement de technologies ou à un profil strictement senior.

Rémunération

Rémunération selon profil et expérience (autour de 40k€ brut annuel) en cohérence avec le stade actuel du projet et la taille de la structure. Le poste est conçu comme une trajectoire d’évolution : la montée en compétences, l’élargissement des responsabilités et la prise de rôle structurants sur la plateforme ont vocation à s’accompagner d’une revalorisation progressive.

Ressources et moyens à disposition

Ressources techniques

  • Infrastructures de l’école (serveurs, capacités GPU, réseau) adaptées aux besoins du projet et aux usages liés à l’IA.
  • Mise à disposition des outils de développement nécessaires, incluant notamment des licences professionnelles (Cursor ou équivalent).
  • Possibilité de s’appuyer ponctuellement sur une agence spécialisée en UI/UX pour la conception et le développement des interfaces front-end, afin de garantir une expérience utilisateur de qualité.

Ressources humaines

  • Les étudiants: Les étudiants d’Oteria, utilisateurs directs de la plateforme, constituent une ressource centrale à la fois pour recueillir des retours d’usage concrets et pour contribuer activement à l’amélioration continue de la plateforme, notamment au travers d’analyses techniques et d’audits de sécurité encadrés.
  • Les professeurs:Le corps professoral d’Oteria est composé de plus de 80 experts professionnels couvrant l’ensemble des champs de l’informatique et de la cybersécurité offrant un cadre privilégié au développeur pour l’échange de bonnes pratiques, le conseil technique et la montée en compétence continue

Pourquoi rejoindre OTERIA

  • Participer à un projet central pour une école de référence
  • Une forte liberté d’initiative et de construction pour construire une école d’avenir
  • Un environnement pédagogique pour monter en compétences aux côtés d’experts
  • Un projet éducatif aligné avec les enjeux technologiques et sociétaux actuels
  • Une communauté d’étudiants engagés, passionnés et moteurs
  • En vidéo ça donne ça: cérémonie de remise des diplômes

Pour candidater:

Envoyez votre CV, quelques lignes expliquant votre motivation, ainsi qu’un lien vers vos projets (GitHub / GitLab) à : contact@oteria.fr

Merci d’indiquer en objet du mail : « Candidature offre développeur », et de préciser votre point de contact avec OTERIA (étudiant, alumni, recommandation, candidature externe, etc.).

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

CDI Dev Senior FullStack Back/Front/Ops - Nouvelle Aquitaine

by flovea from AFPy discuss

Flovea recherche une personne pour un rôle de Developpeur fullstack senior

Contexte

Flovea, société leader dans les solutions de plomberie préfabriquée et connectée, recherche une personne pour un rôle de “développeur sénior” pour prendre en charge la maintenance et l’évolution de sa solution Predictive Flowbox, solution de gestion de réseaux d’eau dans le but d’économiser de l’eau, de l’argent et de protéger les bâtiments contre les fuites et les dégâts des eaux. Flovea est basé à Saint Paul Lès Dax (Landes, à proximité de Dax).

La personne sera en charge du développement, du déploiement et de la gestion de l’infrastructure sous-jacente de la plateforme Predictive Flowbox. Cela inclus également le
support de nos clients lors des phases d’appairage ou lors d’incident ou de dysfonctionnement de la plateforme ou de la flowbox en tant que telle.

La solution Predictive Flowbox est composée de deux ensembles :

  • La Predictive Flowbox : périphérique installé sur le réseau d’eau privatif de nos clients - il est composé d’une vanne, d’un débitmètre, d’une sonde de température et d’une carte
    permettant la connexion à notre plateforme, la remontée des métriques et les envois
    d’ordre d’ouverture/fermeture de vannes.
  • La Plateforme Predictive Flowbox : elle est composée d’une API, d’une WebApp et d’un
    broker MQTT, de bases de données relationnelles et orientée séries temporelles et d’un
    module de machine learning pour les consommations anormales. Cette plateforme
    assure l’ingestion, le stockage, l’analyse et la restitution des données ainsi que la gestion
    des alertes.

Missions & Attributions

La personne avec pour role de développeur sénior :

  • Conçoit tous les aspects techniques et fonctionnels du front-end et back-end d’un site
    web ou d’une application (architecture, stockage des données, interface utilisateur,
    sécurité, traitements et processus, …).
  • Veille au respect des normes et standards en vigueur.
  • Rédige la documentation technique et forme les utilisateurs.
  • Effectue la maintenance corrective et évolutive du produit après développement.
  • Résout les problèmes techniques.
  • Configure et maintient en bon état de fonctionnement les serveurs d’hébergement et les
    différents composants
  • Améliore/Optimise de manière continue l’expérience utilisateur.Effectue une veille technologique régulière afin de rester à jour sur les dernières
  • innovations et identifier les éléments opportuns pour Flovea
  • Assure le support de nos clients lors des phases d’appairage, de prise en main et
    d’utilisation de la plateforme.

Technologies

  • Backend & API : Python 3.13/FastAPI, MQTT, Warp 10 (series temporelles), Postgresql
    14+
  • WebApp: VueJS (Vue 3), TailwindCSS, Vite
  • Machine Learning: Python 3.12, Scikit-learn, Darts, KMeans
  • Ops: Traefik, Ansible, Docker, Docker Compose
  • Code: Gitlab, Gitlab-CI,
  • Tests : Pytest, Cypress, Vitest
  • Lint: Ruff, Eslint
  • Package Manager : Poetry, Pnpm
  • Hébergement : OVHCloud (Serveurs dédiés & VMs)

La personne va travailler dans un premier temps sur les sujets backend/frontend/ops ; la partie datascience/machine learning se fera dans un second temps ou via l’arrivée d’un profil complémentaire.

Localisation

La personne doit pouvoir se rendre facilement à Saint Paul Lès Dax pour travailler avec
l’équipe Flowbox sur site. Elle est idéalement localisée en Nouvelle Aquitaine.

Des voyages au Moyen Orient sont possibles (Dubai, Egypte, Jordanie, etc) pour travailler
avec nos partenaires et clients.

Compétences

La personne doit avoir les compétences suivantes :

  • Concevoir et modéliser des solutions à un besoin exprimé
  • Savoir travailler en autonomie tout en collaborant avec les salariés / partenaires de
    l’entreprise
  • Maitrise des méthodologies « agile » (Kanban, revue de code, pair programming, etc)
  • Capacité à apprendre de nouvelles technologies et de développer de nouveaux usages
  • Maitrise et mise en œuvre d’architecture applicative et système (Architecture 3 tiers, API,
    etc)
  • Maitrise de plusieurs langages de programmation frontend et backend et des principes
    de programmation associés
  • Mise en œuvre des outils et méthodes nécessaires au bon déroulement d’un projet
    (gestion des sources, tests (unitaires, intégration, etc), intégration continue (CI),déploiement continu (CD), etc)
  • Stockage, traitement et analyse de données (base de données / stockage fichiers,
    traitement batch/streaming, datascience / statistique)
  • Administration système (Linux) et connaissances réseaux
  • Connaissance des principes de scalabilité (horizontale et verticale) et être en mesure de
    les déployer
  • Cybersécurité (notions de base)

En plus de ces compétences techniques :

  • La maitrise de l’anglais, tant à l’oral et à l’écrit, doit être courante pour être en mesure de
    travailler avec nos partenaires et clients. La gestion du code se fait en anglais également
    (issues, code, etc)
  • La personne doit être capable de communiquer avec des personnes non expertes dans
    les domaines IT (simplification, vulgrarisation)

Expérience et Salaires

La personne doit disposer d’une expérience solide pour prendre en main le projet et
travailler en autonomie et en relation direct avec des profils fonctionnels / non techniques.

La personne sera hiérarchiquement rattachée au fondateur de Flovea.

Le salaire est entre 45K€ et 60K€ brut, selon le profil.

Le poste est à pouvoir immédiatement.

Processus de recrutement

Il se fera en deux entretiens :

  • Entretien technique et présentation du projet avec le DSI/CTO de Flovea
  • Entretien global avec le fondateur de Flovea

En savoir plus

Flovea : https://www.flovea.fr/

Predictive Flowbox :

Contact

Nicolas Steinmetz - ns@flovea.fr - 0762381324

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Comment nous avons rendu la bibliothèque packaging de Python 3× plus rapide

by Camille Roux from Human coders

Découvrez comment les mainteneur·se·s de pip et packaging ont optimisé la bibliothèque packaging de Python, utilisée par presque tous les outils de gestion de paquets. Grâce au nouveau profiler statistique de Python 3.15 et aux métadonnées de tous les packages PyPI, iels ont amélioré les performances de lecture des versions et des spécificateurs. Les résultats sont impressionnants : jusqu’à 2x plus rapide pour les Versions, 3x pour les SpecifierSets, et même 5x dans certains cas, tout en gardant le code lisible et simple.


Commentaires
L'article Comment nous avons rendu la bibliothèque packaging de Python 3× plus rapide a été posté dans la catégorie Python de Human Coders News

Lire la suite…