« Je veux ma maquette de satellite » : analyse du format G3DB d’objets 3D en vue de leur impression

Magazine
Marque
GNU/Linux Magazine
Numéro
250
Mois de parution
juillet 2021
Spécialité(s)


Résumé

Nous explorons le format G3DB exploité dans nombre de jeux programmés en Java sous Android s’appuyant sur la bibliothèque LibGDX. Cette étude sera l’occasion de découvrir le format universel binaire JSON, conçu pour sa compacité tout en conservant une facilité d’analyse bien connue de ce format de données. Nous aboutirons ainsi à un modèle 3D exploitable dans tout logiciel de conception assistée par ordinateur et conclurons par l’impression des divers éléments de la maquette et son assemblage.


Body

Étant en train d’étudier les signaux émis par le RADAR spatioporté Sentinel-1 [1], nous désirions obtenir un modèle 3D du satellite pour illustrer son fonctionnement. L’ESA nous informe que le seul modèle à leur disposition n’est pas diffusable au public, mais est un modèle exact d’ingénierie qui contient des éléments de conception secrets qui imposent de signer un accord de confidentialité. La boîte Lego de ce satellite fait partie d’une collection produite en petite série et revendue à un prix déraisonnable. La société qui a été contractée par l’ESA pour développer l’application Sentinel pour Android (figure 1) nous informe ne pas pouvoir diffuser le modèle 3D qui est inclus dans l’application. Parmi les options qui restent, nous pouvons nous rouler par terre en criant très fort jusqu’à ce qu’un des interlocuteurs craque, une solution qui a fait ses preuves par le passé, mais qui devient moins crédible à presque 50 ans (quoi que...), nous pouvons sélectionner la solution capitaliste de dépenser une somme déraisonnable d’argent qui ne nous apprendra rien, ou nous pouvons tenter de décoder le format des modèles 3D inclus dans l’application Android afin de générer un modèle exploitable, par exemple pour une impression 3D. C’est naturellement la troisième solution que nous allons aborder ici.

v-f1 1

Fig. 1 : Modèle 3D de Sentinel-1 dans l’application Android Copernicus commandée par l’ESA.

1. Le format G3DB des modèles 3D dans les jeux Android

Le ficher APK (Android Package) de l’application Sentinel pour Android se télécharge sur n’importe quel site web approprié, par exemple https://m.apkpure.com/copernicus-sentinel/esa.sentinel (112 Mo pour la version 4.19) dont le risque de cheval de Troie dans le code Java importe peu puisque nous ne l’exécuterons pas, et se décompresse/désarchive au moyen de unzip une première fois, puis une seconde fois pour esa.sentinel.apk. L’emplacement des modèles 3D des satellites de la série Sentinel se trouve dans assets/model et pour la version qui nous intéresse assets/model/sentinel1int qui ne contient pas toutes les annotations de assets/model/sentinel1, qui ne nous intéressent pas ici. Ce répertoire contient un certain nombre de textures au format JPEG qui ne seront pas utiles, et des modèles 3D des diverses parties du satellite au format G3DB. C’est donc ce format de fichiers qu’il nous faut apprendre à analyser.

Nous découvrons en parcourant le Web qu’il s’agit d’un format utilisé par les jeux développés pour Android s’appuyant sur une bibliothèque LibGDX (https://libgdx.com/) en Java. Un outil de conversion est disponible pour produire ces fichiers sur https://github.com/libgdx/fbx-conv, mais uniquement pour générer ces fichiers, pas pour les lire. N’étant pas familier avec le développement sous Android et encore moins en Java, l’utilisation de cette bibliothèque pour rédiger un convertisseur vers un format exploitable – lisible dans FreeCAD, Blender, MeshLab ou CloudCompare, puis Cura pour impression – semble vouée à l’échec. Néanmoins, un outil multiplateforme sur https://github.com/ASneakyFox/libgdx-fbxconv-gui permet au moins de visualiser les modèles sous GNU/Linux et de valider leur contenu, toujours sans permettre d’exporter vers un format exploitable, puisque s’appuyant sur fbx-conv mentionné auparavant pour les conversions. Heureusement, https://github.com/libgdx/fbx-conv/wiki nous en dit un peu plus sur le format de stockage : il s’agit de JSON au format binaire contenant divers champs décrivant la pièce, mais aussi un certain nombre de séparateurs pour définir des blocs de données (de la forme {} ou []) qui semblent empêcher l’utilisation d’outils de lecture de fichiers JSON binaires tels que fournis par Python (bibliothèque py-ubjson). Si tout échoue, nous allons finir par rédiger notre propre décodeur de fichiers.

2. Le format JSON binaire

Les formats binaires ne sont jamais très sympathiques puisque souffrant du problème d’endianness, à savoir l’ordre des octets dans un mot de plus de 8 bits. Java étant conçu pour échanger des informations au travers d’Internet (on tend à oublier que le langage a été développé par Sun Microsystems), il est naturel de représenter les données au format de son transport sur un réseau compatible Internet, donc en big endian tel que le confirme https://universal-binary-json.readthedocs.io/en/latest/spec.html. Pour rappel, big endian signifie que l’octet de poids le plus fort est à l’adresse la plus faible, donc le format le plus simple à lire pour un Occidental qui lit de gauche à droite. Ainsi, une observation du fichier binaire sera de la forme :

$ xxd s1_platform.g3db | head
00000000: 7b73 0776 6572 7369 6f6e 6169 0200 0000 {s.versionai....
00000010: 0173 0269 6473 0073 066d 6573 6865 735b .s.ids.s.meshes[
00000020: 7b73 0a61 7474 7269 6275 7465 735b 7308 {s.attributes[s.
00000030: 504f 5349 5449 4f4e 7306 4e4f 524d 414c POSITIONs.NORMAL
00000040: 5d73 0876 6572 7469 6365 7341 6400 01a3 ]s.verticesAd...
00000050: f4c0 fa6a ce41 05dc 0941 66b4 cabb 03e7 ...j.A...Af.....
00000060: 143e 328d 9d3f 7c13 e2c0 f77a 5241 05b2 .>2..?|....zRA..

Ceci nous montre une alternance de codes lisibles en ASCII (version ou POSITION), des séparateurs de blocs sous forme d’accolades et de crochets, et des valeurs en binaire. La description du format Universal Binary JSON mentionnée ci-dessus nous permet de comprendre que s indique une chaîne de caractères dont l’argument suivant est le nombre d’éléments dans la chaîne (un octet pour s ou quatre octets pour la taille de S) tandis que A indique le début d’un tableau. Cette documentation n’est pas claire sur le fait que l’argument qui suit A est la nature du contenu du tableau, ici un d qui signifie « nombre à virgule flottante » codé sur 4 octets. Ainsi donc à l’adresse 0x4B, Ad.... représentant 41640001a3f4 signifie un tableau (A) de 107508 (0x001a3f4) nombres à virgule flottante (d). Par ailleurs, juste au-dessus, aux adresses 0x30 à 0x3F, nous avions appris que ces sommets (vertices à l’adresse 0x43) sont décrits par deux paramètres que sont sa position (POSITION) et son orientation (NORMAL) donc 2× 3 coordonnées telles que le décrit https://github.com/libgdx/fbx-conv/wiki/Version-0.1-%28libgdx-0.9.9%29 dans sa section « Attributes ». Heureusement, 107508 est bien multiple de 6, donc le tableau représente les attributs de 107508/6=17918 points.

Plus loin dans le fichier toujours analysé avec hexedit ou xxd, nous verrons que ces sommets sont regroupés en facettes triangulaires :

00069020: 6173 0570 6172 7473 5b7b 7302 6964 730c as.parts[{s.ids.
00069030: 7368 6170 6531 5f70 6172 7432 7304 7479 shape1_part2s.ty
00069040: 7065 7309 5452 4941 4e47 4c45 5373 0769 pes.TRIANGLESs.i
00069050: 6e64 6963 6573 4169 0000 4e78 0000 0001 ndicesAi..Nx....
00069060: 0002 0003 0004 0005 0006 0007 0008 0009 ................

Ceci en commençant par la description d’une pièce (parts) d’identifiant fournie comme chaîne de caractères (s), ici nommée shape1_part2, formée d’assemblages de triangles (types.TRIANGLES qui sont tous deux des chaînes de caractères s) et finalement, un tableau A d’entiers i codés sur 16 bits. Nous constatons ensuite que les indices codés sur 16 bits commencent à 0 et s’incrémentent, laissant supposer une cohérence entre l’ordre des sommets et leur utilisation en facettes.

Fort de ces connaissances, nous pourrons générer pour chaque objet un fichier au format STL (STereoLithography, compris par tous les outils de gestion de pièces décrites dans l’espace) qui justement assemble des facettes triangulaires tel que nous avions appris à le faire pour tracer les diagrammes de rayonnement d’antennes [2]. Cette procédure est automatisée dans le programme proposé sur https://github.com/jmfriedt/g3db2stl/. On notera que chaque fichier STL créé pour chaque pièce est nommé du nom de cette pièce, unique dans chaque fichier G3DB, mais commun à divers fichiers. Il est donc judicieux d’analyser chaque fichier G3DB dans un sous-répertoire, pour éviter d’écraser les fichiers STL générés lors des analyses des fichiers précédents. Nous constatons à l’issue de ce traitement que les fichiers 3D exploitables sont conformes aux attentes du modèle 3D visible dans l’application Android, par exemple en chargeant chaque fichier STL dans MeshLab (figure 2).

v-f2 1

Fig. 2 : Le modèle complet du satellite, avec toutes les pièces en place, ici inclus dans MeshLab pour visualisation. Nous nous sommes efforcés d’identifier les divers éléments du côté opposé au soleil (gauche) et face au soleil (droite) en consultant https://earth.esa.int/web/eoportal/satellite-missions/c-missions/copernicus-sentinel-1. La nature de l’antenne dirigée vers la Terre à côté de la parabole reste inconnue.

3. Assemblage de pièces

Il reste un point de détail : un satellite est formé de nombreuses pièces, et chaque pièce a une position, orientation et taille dans l’espace. Ces informations sont issues de l’analyse des fichiers G3DB dans les champs :

00266da0: 7d7b 7302 6964 7306 656e 6769 6e65 7308 }{s.ids.engines.
00266db0: 726f 7461 7469 6f6e 6164 04bf 3504 f380 rotationad..5...
00266dc0: 0000 0000 0000 003f 3504 f373 0573 6361 .......?5..s.sca
00266dd0: 6c65 6164 0340 c740 c540 c740 c540 c740 lead.@.@.@.@.@.@
00266de0: c573 0b74 7261 6e73 6c61 7469 6f6e 6164 .s.translationad
00266df0: 03be 1e16 0042 0376 7cc0 76d5 e073 0570 .....B.v|.v..s.p

à savoir ici rotation, scale et translation qui prennent comme arguments des nombres représentés en virgules flottantes d, quatre pour une rotation représentée sous forme de quaternion (axe de rotation et angle) ou trois pour homothétie et translation. Ce résultat est à peine plus simple à lire en sortie de notre outil de décodage sous la forme :

string: platform_metal
string: rotation
array: float4: -0.707107 -0.000000 0.000000 0.707107
string: scale
array: float3: 6.226656 6.226656 6.226656
string: translation
array: float3: -0.154381 32.865707 -3.856804

Fort des connaissances acquises sur la programmation de FreeCAD au moyen de scripts Python [3], il nous reste à importer les pièces au format STL dans FreeCAD et à les orienter/positionner en scriptant dans la console Python de FreeCAD. En effet, il ne semble pas possible de fournir les paramètres de rotation dans les menus de FreeCAD sous forme de quaternion, alors que cette représentation est celle utilisée en interne comme par tout logiciel de gestion de structures 3D pour s’appuyer sur l’algèbre associée telle que décrite par Hamilton (le mathématicien mort en 1865, pas le conducteur de voitures). Ayant chargé les pièces, nous les positionnons dans l’espace par un script de la forme :

import FreeCAD,Mesh
 
# Translation vector
tr=FreeCAD.Vector(-0.154381,32.865707,-3.856804)
# Rotation quaternion
q1=(-0.707107,-0.000000,0.000000,0.707107)
# https://forum.freecadweb.org/viewtopic.php?t=16949
 
# get the object from FreeCAD (see the list on the upper-left menu) cm1=FreeCAD.ActiveDocument.getObject("shape1_part1_ai")
# r=FreeCAD.Rotation(*q1)
# r.Axis
# r.Angle
cm1.Placement=FreeCAD.Placement(cm1.Placement.Base,FreeCAD.Rotation(*q1))
cm1.Placement.Base=tr
mat1=FreeCAD.Matrix()
mat1.scale(6.226656,6.226656,6.226656 )
mesh1=cm1.Mesh.copy() #Cube is name of the Obj in the Doc
mesh1.transform(mat1) #add the result to the document
Mesh.show(mesh1)

ce que nous répétons pour chaque objet formant le satellite. En commentaire, nous avons laissé l’interprétation des données du quaternion q1 sous forme de vecteur directeur r.Axis et d’angle de rotation r.Angle pour valider la bonne compréhension de ces paramètres. À l’issue de ces traitements, nous obtenons un modèle complet (figure 2) avec des pièces aux positions relatives correctes et que nous espérons exploitables pour une impression 3D, par exemple en exportant un fichier STL combinant tous les éléments pour être importé dans Cura (figure 3), l’outil proposé pour commander les imprimantes 3D Ultimaker, dans notre cas une Ultimaker 2+.

v-f3 0

Fig. 3 : Gauche : le modèle inclus dans Cura permet une impression 3D, mais les structures séparées du corps du satellite comme indiqué par les flèches rouges laissent présager des problèmes. Droite : par ailleurs, une analyse détaillée du modèle indique dans FreeCAD que des pièces sont discontinues, ici la jonction entre les éléments d’un panneau solaire.

L’impression n’est pas aussi triviale qu’il pourrait sembler, puisque des structures lévitent dans le vide et ne seront pas imprimables en l’état (figure 3, gauche) et le modèle graphique est discontinu, puisque par exemple les cellules photovoltaïques des panneaux solaires ne sont pas reliées entre elles (figure 3, droite). Un peu de manipulation du modèle sera donc nécessaire avant son impression.

4. Impression de la maquette

L’impression 3D directe s’avère décevante, avec un volume excessif de supports pour les éléments suspendus et des panneaux solaires trop fins et séparés en cellules photovoltaïques individuelles. Il faut donc éditer le modèle 3D et le rendre imprimable. Étant incapables de comprendre comment éditer les mailles (mesh) dans FreeCAD, nous nous tournons vers Blender qui va nous permettre d’une part de modifier le modèle, quitte à perdre un peu en réalisme, pour le rendre imprimable d’une part, et d’autre part de couper les parties suspendues dans le vide qui ont nécessité tant de support inextricable de la structure principale après impression.

v-f4 0

Fig. 4 : Extraction des divers éléments du modèle 3D dans Blender en vue de leur impression en les englobant dans un cube qui évite trop de parties suspendues autour du corps du satellite, et sélection comme intersection entre le cube et le corps du satellite. Chaque pièce – en haut à gauche les antennes paraboliques et monopôles qui ne seraient pas imprimables en même temps que le corps du satellite – est extraite par filtre booléen d’intersection (haut droite) et sauvée dans un fichier séparé pour insertion dans Cura et impression. Nous vérifions la validité du morceau extrait (bas gauche) dans MeshLab (bas droite), bien que cet exemple d’extraction d’une façade soit voué à l’échec, compte tenu de la forme creuse du corps du satellite qui doit absolument rester un maillage fermé pour être convenablement compris comme une forme pleine par Cura.

Nous amenons des modifications structurelles telles que supporter les panneaux solaires par un parallélépipède rectangle pour soutenir les éléments individuels, épaissir les bras de maintien des panneaux solaires (extrusion en mode édition de Blender – touche <Tab>) et leur ajouter un point d’attache (Add > Mesh > Cube), et coupons les éléments du satellite qui seraient suspendus dans le vide lors de l’impression en les incluant dans un cube et par opération booléenne d’intersection suivant la séquence Add Modifier sur l’icône en forme de clé anglaise en ayant sélectionné le corps du satellite, Boolean et Intersect avec le cube qui englobe la partie qui nous intéresse (figure 4). La sauvegarde du STL résultant s’obtient par File > Export > STL en cochant l’option Selection Only (figure 4). Nous nous retrouvons donc avec un fichier STL des panneaux solaires, un pour le corps, et un contenant les divers éléments additionnels que sont les antennes et autres éléments dépassant du corps. Ces divers fichiers STL sont chargés dans Cura 4.9.0 pour génération du G-code en vue de l’impression. Le premier résultat d’impression est à nouveau décevant, car l’antenne du RADAR n’est pas plane et la jupe ne retient la structure que sur une surface insuffisante, la buse emportant la pièce au premier défaut de positionnement. Pour pallier ce problème, Olivier Testault propose d’abaisser la structure de quelques dixièmes de millimètres sous le plateau d’impression pour garantir une jupe qui maintienne correctement la pièce en place. Fort de ce conseil, l’impression des diverses pièces s’avère excellente, au crédit de Cura qui a réussi à interpréter des fichiers STL qui n’étaient nullement prévus pour une impression (figure 5).

v-f5

Fig. 5 : Gauche : le corps et les panneaux tout juste imprimés. Droite : l’ensemble des pièces composant la maquette du satellite. L’impression de l’élément le plus haut à droite a dû être interrompue pour cause de buse bouchée, mais illustre le remplissage du corps du satellite pour lui garantir la robustesse nécessaire à sa manipulation. Les petits éléments additionnels – antennes, systèmes de suivi du soleil ou des étoiles – ont été imprimés séparément et seront assemblés au corps du satellite manuellement.

Les diverses pièces sont finalement assemblées par collage à la colle cyanoacrylate parfaitement compatible avec l’acide polylactique (PLA) qui sert à l’impression 3D. À notre grande surprise – la publicité de Super Glue-3 de https://www.dailymotion.com/video/x8ili9 n’était peut-être pas complètement mensongère – aucun renfort n’est nécessaire pour maintenir les panneaux solaires en place, malgré la surface de collage de seulement quelques millimètres carrés. Bien entendu, on ne déposera jamais la colle du tube sur la surface à encoller, mais nous déposerons quelques gouttes sur un support sacrifié en vue d’étaler le volume nécessaire sur la surface à encoller avec un cure-dent (figure 6, gauche).

Conclusion

Partant d’une archive d’application Android contenant des modèles 3D de satellites, nous avons exploré le format de stockage G3DB, découvert le format binaire universel JSON, plus compact que son homologue textuel ASCII, et fini par obtenir un modèle cohérent de satellite dans un format exploitable dans un outil de conception par ordinateur de pièces mécaniques tel que FreeCAD. Néanmoins, la manipulation des mailles (mesh) représentant le satellite en vue de les rendre compatibles avec une fabrication par imprimante 3D et les découper en éléments individuels s’est avérée plus aisée avec Blender, qui nous a permis d’atteindre l’objectif de réaliser une maquette de l’objet convoité (figure 6).

v-f6 0

Fig. 6 : Gauche : deux maquettes assemblées, les divers composants du satellite étant maintenus par de la colle cyanoacrylate (« Super Glue »), pour une longueur totale le long des panneaux solaires d’environ 30 cm et une hauteur de 5,4 cm. Droite : Sentinel-1 a rejoint la collection des satellites dont nous avons reçu les signaux avec un récepteur de radio logicielle, à savoir GPS, ISS et Galileo (pour ne citer qu’eux, n’ayant pas recherché ou trouvé Meteor-M2, NOAA, ou Iridium).

Le lecteur intéressé par les autres Sentinel – 2 à 5 actuellement bien que seuls les modèles de 2, 3 et 5P ne soient disponibles dans l’application Android à la date de cette rédaction – est encouragé à reproduire la démarche pour démontrer la compréhension de la procédure suivie. Le modèle de Sentinel-6 directement lisible par Blender est disponible sur le site de la NASA sur https://nasa3d.arc.nasa.gov/detail/Sentinel-6.

L’ensemble des développements, partant du programme de conversion de G3DB vers STL jusqu’au modèle imprimable de Sentinel-1 en passant par le script FreeCAD pour aligner et orienter les pièces, est accessible sur https://github.com/jmfriedt/g3db2stl/.

Remerciements

É. Carry (FEMTO-ST/Temps-Fréquence, Besançon) a fourni l’infrastructure pour l’impression 3D des maquettes. O. Testault (Fablab Des Fabriques, Besançon) a fourni les solutions à nos problèmes d’impression 3D et en particulier d’adhésion de l’antenne du RADAR au plateau de l’imprimante. C. Plantard (ESA/ESTEC, Noordwijk, Hollande) a transmis nos questions concernant l’architecture de Sentinel-1 et la disponibilité d’un modèle librement exploitable. On pourra argumenter qu’un enseignant-chercheur de l’université a vraiment beaucoup trop de temps libre pour se permettre ce type d’activité : nous rétorquerons que cette démarche d’analyse pour atteindre un objectif concret est au cœur de nos enseignements et une source de motivation pour aiguiser la curiosité des étudiants. Jusqu’à preuve du contraire...

Références

[1] J.-M Friedt, « Analyse des données brutes des RADAR spatioportés Sentinel-1 : traitement des signaux radiofréquences », Hackable (à paraître).

[2] J.-M Friedt, É. Carry, O. Testault, « Petites antennes réalisées par impression additive : de la conception à la visualisation des diagrammes de rayonnement (en vrai et en virtuel) », Hackable n°31, p.80–96 (oct.-nov. 2019) https://connect.ed-diamond.com/Hackable/HK-031/Petites-antennes-realisees-par-impression-additive-de-la-conception-a-la-visualisation-des-diagrammes-de-rayonnement-en-vrai-et-en-virtuel

[3] J.-M Friedt, O. Testault, É. Carry, « Dessiner des carrés avec des ronds : simulation d’un ordinateur mécanique en scriptant sous FreeCAD », Hackable n°35 (oct.-déc. 2020) https://connect.ed-diamond.com/Hackable/HK-035/Simulation-d-un-ordinateur-mecanique-en-scriptant-sous-FreeCAD



Article rédigé par

Par le(s) même(s) auteur(s)

Conférence European GNU Radio Days 2024 : annonce de GNU Radio 4.0 et tutoriel sur les blocs de traitement Python

Magazine
Marque
Hackable
Numéro
57
Mois de parution
novembre 2024
Spécialité(s)
Résumé

Quelques retours sur la conférence européenne dédiée au logiciel libre de traitement de signaux radiofréquences échantillonnés en temps discret GNU Radio, et le développement de blocs Python dédiés au traitement du signal en flux tendu.

Algèbre linéaire rapide : BLAS, GSL, FFTW3, CUDA et autre bestiaire de manipulation de matrices dans le traitement de signaux de radio logicielle

Magazine
Marque
Hackable
Numéro
56
Mois de parution
septembre 2024
Spécialité(s)
Résumé

L’algèbre linéaire est habituellement introduite comme un formalisme abstrait d’opérations matricielles. Nous proposons quelques applications concrètes de cette algèbre dans le cas du traitement de signaux radiofréquences, ainsi que des mises en œuvre sur processeur généraliste (CPU) et graphique (GPU) en vue de passer d’un post-traitement de signaux enregistrés à un traitement en temps réel. Nous survolerons ainsi quelques fonctions des principales bibliothèques de calcul linéaire pour proposer des implémentations de corrélation ou d’optimisation aux moindres carrés.

Trente ans d’open source... pour en arriver là

Magazine
Marque
GNU/Linux Magazine
Numéro
270
Mois de parution
juillet 2024
Spécialité(s)
Résumé

Été 2024... Exactement 30 ans après la première installation de GNU/Linux sur un 80486 cadencé à 100 MHz, 80 disquettes copiées depuis un CD (distribution Slackware) dont je ne possédais pas le lecteur, avec évidemment la 79e disquette défectueuse pour achever l’installation de X11 (alias XFree86, avant sa reprise en X.Org en 1999). Peu importe, l’interface graphique ne sert à rien d’autre que consommer des ressources inutilement [1]. J’ai oublié la version du noyau (kernel), l’historique indique 1.1, mais je ne développais pas à ce niveau à cette époque. J’ai eu la chance de transiter de MS-DOS à GNU/Linux sans passer par l’étape MS Windows, l’École Normale Supérieure de Lyon à laquelle j’accède en septembre 1994 étant exclusivement munie de stations Sun Microsystems sous Solaris.

Les derniers articles Premiums

Les derniers articles Premium

La place de l’Intelligence Artificielle dans les entreprises

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

L’intelligence artificielle est en train de redéfinir le paysage professionnel. De l’automatisation des tâches répétitives à la cybersécurité, en passant par l’analyse des données, l’IA s’immisce dans tous les aspects de l’entreprise moderne. Toutefois, cette révolution technologique soulève des questions éthiques et sociétales, notamment sur l’avenir des emplois. Cet article se penche sur l’évolution de l’IA, ses applications variées, et les enjeux qu’elle engendre dans le monde du travail.

Petit guide d’outils open source pour le télétravail

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Ah le Covid ! Si en cette période de nombreux cas resurgissent, ce n’est rien comparé aux vagues que nous avons connues en 2020 et 2021. Ce fléau a contraint une large partie de la population à faire ce que tout le monde connaît sous le nom de télétravail. Nous avons dû changer nos habitudes et avons dû apprendre à utiliser de nombreux outils collaboratifs, de visioconférence, etc., dont tout le monde n’était pas habitué. Dans cet article, nous passons en revue quelques outils open source utiles pour le travail à la maison. En effet, pour les adeptes du costume en haut et du pyjama en bas, la communauté open source s’est démenée pour proposer des alternatives aux outils propriétaires et payants.

Sécurisez vos applications web : comment Symfony vous protège des menaces courantes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les frameworks tels que Symfony ont bouleversé le développement web en apportant une structure solide et des outils performants. Malgré ces qualités, nous pouvons découvrir d’innombrables vulnérabilités. Cet article met le doigt sur les failles de sécurité les plus fréquentes qui affectent même les environnements les plus robustes. De l’injection de requêtes à distance à l’exécution de scripts malveillants, découvrez comment ces failles peuvent mettre en péril vos applications et, surtout, comment vous en prémunir.

Bash des temps modernes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les scripts Shell, et Bash spécifiquement, demeurent un standard, de facto, de notre industrie. Ils forment un composant primordial de toute distribution Linux, mais c’est aussi un outil de prédilection pour implémenter de nombreuses tâches d’automatisation, en particulier dans le « Cloud », par eux-mêmes ou conjointement à des solutions telles que Ansible. Pour toutes ces raisons et bien d’autres encore, savoir les concevoir de manière robuste et idempotente est crucial.

Les listes de lecture

9 article(s) - ajoutée le 01/07/2020
Vous désirez apprendre le langage Python, mais ne savez pas trop par où commencer ? Cette liste de lecture vous permettra de faire vos premiers pas en découvrant l'écosystème de Python et en écrivant de petits scripts.
11 article(s) - ajoutée le 01/07/2020
La base de tout programme effectuant une tâche un tant soit peu complexe est un algorithme, une méthode permettant de manipuler des données pour obtenir un résultat attendu. Dans cette liste, vous pourrez découvrir quelques spécimens d'algorithmes.
10 article(s) - ajoutée le 01/07/2020
À quoi bon se targuer de posséder des pétaoctets de données si l'on est incapable d'analyser ces dernières ? Cette liste vous aidera à "faire parler" vos données.
Voir les 65 listes de lecture

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous