Vous souhaitez discuter avec nous à propos de votre projet de formation ?
Vous voulez plus d'information sur une formation ou notre fonctionnement ?
Rappel Email
Nous pouvons organiser des sessions à d'autres dates ou dans d'autres villes (Bordeaux, Lille, Lyon, Marseille, Montpellier, Nantes, Nice, Paris, Strasbourg, Toulouse...)
Simple, performant, minimaliste, axé sur la productivité... Le langage de programmation Go (aussi surnommé Golang) ne manque pas d'atouts. Depuis son apparition en 2009, Go est devenu un langage incontournable tant pour l'implémentation d'outils tels que Docker et Kubernetes que pour le développement backend d'applications Web.
Cette formation Go (récemment mise à jour pour Go 1.23) s'adresse à des développeur·euse·s ayant déjà de l'expérience en développement backend Web souhaitant se lancer dans le développement en Go.
Durant cet apprentissage, vous comprendrez comment utiliser Go pour développer une application permettant la vérification de la validité et disponibilité d'un nom sur plusieurs réseaux sociaux.
Vous repartirez avec le code source du projet développé lors de ces trois jours, ainsi que la solution du formateur (sur GitHub), et l'envie —on l'espère— d'utiliser Go dans vos projets actuels et futurs !
Le dernier tiers de cette formation, dédié à la programmation concurrente en Go, est également disponible à part sous la forme de la formation Programmation concurrente en Go, également animée par Julien Cretel.
Jetez un œil à la formation Go Avancé animée par Julien Cretel.
Vous y verrez comment bien tester vos applications en Go, améliorer les performances de vos applications et bien les sécuriser.
Toutes nos formations étant limitées à 6 participant·e·s par session, vous aurez un contact privilégié avec votre formateur, Julien Cretel, Gopher passionné et pédagogue, enthousiaste de partager ses expériences professionnelles lors des moments informels de cette formation.
Mises en pratique :
- Initialisation du projet fil-rouge au sein de VS Code
- Compilation et transcompilation d'un programme Hello World
var
et déclaration courteMise en pratique :
-Validation d'un nom d'utilisateur·rice GitHub
new
Mise en pratique :
-Extraction de la logique de validation dans une fonction
error
nil
error
Mise en pratique :
-Gestion judicieuse des erreurs au sein de la fonction responsable de la validation d'un nom d'utilisateur·rice GitHub
Mise en pratique :
-Création d'un paquet dédié à GitHub
Mise en pratique :
-Écriture et exécution de tests unitaires
Mise en pratique :
-Vérification de la disponibilité d'un nom d'utilisateur·rice sur GitHub
break
et continue
make
append
Mises en pratique :
- Récupération du nom d'utilisateur·rice à tester via un argument de ligne de commande
- Réusinage des tests en table de tests afin d'éliminer la duplication de code
make
Mises en pratique :
- Conception d'un type structure représentant un arbre binaire
- Déclaration de types structures dédiés à chaque plateforme supportée
Mise en pratique :
-Transformation de fonctions en méthodes sur les types structures déclarés précédemment
fmt.Stringer
io.Reader
et io.Writer
error
nil
n'est pas nil
Mises en pratique :
- Déclaration judicieuse de types interfaces
- Simplification du code existant grâce aux interfaces
- Création d'un stub pour le client HTTP
select
Mise en pratique :
-Identification, dans le programme namecheck
, de traitements séquentiels qui bénéficieraient d'une ré-écriture traitements concurrents
go
main
n'attend pas la fin des autres goroutines.-race
)Mise en pratique :
-Vérification concurrente de la validité et disponibilité d'un nom sur de multiples réseaux sociaux
make
for-range
Mises en pratique :
- Analyse et résolution d'un d'interblocage
- Analyse et résolution d'une fuite de goroutines
- Communication de résultats entre goroutines à l'aide d'un canal dans le but d'agréger ces résultats
Mise en pratique :
-Transformation de l'outil de ligne de commande de départ en une API HTTP
go.mod
et go.sum
Mise en pratique :
-Configuration CORS de l'API HTTP à l'aide d'une bibliothèque tierce
select
: syntaxe et sémantiqueselect
au sein d'une bouclecontext
Mises en pratique :
- Utilisation d'une instruction select et de deux canaux distincts, l'un dédié aux résultats et l'autre aux erreurs
- Analyse et résolution d'une fuite de goroutines
sync.Mutex
Mise en pratique :
-Utilisation d'une exclusion mutuelle pour la mise à jour d'une variable globale d'état
Julien est à la fois développeur, chercheur en sécurité Web et formateur.
Son langage de prédilection est le Go, sujet sur lequel il a formé des centaines de professionnel·le·s depuis 2019. Il lui arrive aussi d'intervenir sur Go à l'occasion de conférences spécialisées, telles que GopherCon 2023 Europe.
Julien est actif dans le domaine de la sécurité Web. En marge des tests de sécurité (tests d'intrusion, évaluation de vulnérabilité, audit de codes, etc.) que ses clients lui confient et de ses activités de recherche indépendante, Julien forme régulièrement des professionnel·le·s sur la sécurité Web. Il s'adonne aussi, de temps à autre, à la chasse au bogues de sécurité (bug bounty hunting).
Julien partage ses réflexions et sa recherche sur son blog, qui est, sans surprises, principalement dédié au langage Go et à la sécurité Web.
Human Coders c'est un centre de formation pour développeurs avec :
Après avoir appris Go en autodidacte, j'avais besoin de revoir les bases et de mieux comprendre le fonctionnement des outils que j'utilisais. ...
Après avoir appris Go en autodidacte, j'avais besoin de revoir les bases et de mieux comprendre le fonctionnement des outils que j'utilisais. Cette formation a parfaitement répondu à mes attentes. Le formateur est très sympathique, à l'écoute et compétent, offrant de précieux conseils. Je suis très satisfait d'avoir suivi cette formation.
Voir plusTrès agréable formation avec un formateur passionné par le langage. J'ai beaucoup apprécié le temps qu'il a pris pour répondre aux questions l...
Très agréable formation avec un formateur passionné par le langage. J'ai beaucoup apprécié le temps qu'il a pris pour répondre aux questions lors de la formation et même pendant les pauses.
Voir plusAyant déjà utilisé Go, j'avais des attentes bien précises sur les concepts qui me manquaient, la formation a parfaitement répondu a mes attent...
Ayant déjà utilisé Go, j'avais des attentes bien précises sur les concepts qui me manquaient, la formation a parfaitement répondu a mes attentes, et le fonctionnement en petit commité permets des échanges nombreux et interressants avec le formateur.
Voir plusFormation très complète. Julien prend le temps de répondre à toutes nos interrogations.
Formation très complète. Julien prend le temps de répondre à toutes nos interrogations.
Bonne atmosphère et bon rythme, personne n'est laissé de côté. Les exos sont intéressants et bien expliqués. Les difficultés sont bien abor...
Bonne atmosphère et bon rythme, personne n'est laissé de côté. Les exos sont intéressants et bien expliqués. Les difficultés sont bien abordées et la compréhension en est aisée. Il y a beaucoup de doc, ce qui va me permettre de les revoir plus tard.
Voir plusJ'ai bien apprécié la pédagogie de Julien et le fait qu'il y avait un projet sur lequel nous étions focalisé tout au long de la formation. L...
J'ai bien apprécié la pédagogie de Julien et le fait qu'il y avait un projet sur lequel nous étions focalisé tout au long de la formation. Le mix entre théorie et pratique aide beaucoup à concrétiser directement les concepts du langage. Merci à Julien pour ces 3 jours
Voir plusExcellente maîtrise du programme, ouvert aux questions, bonne ambiance.
Excellente maîtrise du programme, ouvert aux questions, bonne ambiance.
Très bonne formation, bien complète. Le formateur est clair et précis
Très bonne formation, bien complète. Le formateur est clair et précis
Formation très intéressante pour mettre le pied à l'étrier, je recommande tout de même d'avoir un peu joué avec Go avant cette formation pour ...
Formation très intéressante pour mettre le pied à l'étrier, je recommande tout de même d'avoir un peu joué avec Go avant cette formation pour éviter de perdre trop de temps.
Voir plusFormateur et formation très agréables. Précieux conseilles distillés tout le long de la formation
Formateur et formation très agréables. Précieux conseilles distillés tout le long de la formation
Super formation pour débuter en Go.
Super formation pour débuter en Go.
Très bonne formation, formateur à l'écoute, prêt à interrompre son programme pour nous aider à résoudre nos problématiques, super top !
Très bonne formation, formateur à l'écoute, prêt à interrompre son programme pour nous aider à résoudre nos problématiques, super top !
Très pro. Format en petit comité très sympa et efficace ainsi que le fait de mettre en pratique immédiatement les notions.
Très pro. Format en petit comité très sympa et efficace ainsi que le fait de mettre en pratique immédiatement les notions.
Très bonne formation pour débuter en go
Très bonne formation pour débuter en go
Une expérience en Go permet de mieux comprendre les choses complexes
Une expérience en Go permet de mieux comprendre les choses complexes
Très bonne formation Go et de bon niveau malgré son niveau "beginners"
Très bonne formation Go et de bon niveau malgré son niveau "beginners"
Julien est un très bon formation. La progression de l'apprentissage se reflète bien dans l'exemple pratique à coder.
Julien est un très bon formation. La progression de l'apprentissage se reflète bien dans l'exemple pratique à coder.
Les concepts fondamentaux du Go ont été abordés et c'est exactement ce que je recherchais. Et comme le Go est un langage avec des semantiques...
Les concepts fondamentaux du Go ont été abordés et c'est exactement ce que je recherchais. Et comme le Go est un langage avec des semantiques puissantes et parfois contre-intuitives, je suis d'accord qu'il faut une (parfaite ?) maitrise d'un langage comme C++ ou Java pour en apprécier la beauté.
Voir plusSuper formateur go, Julien est très pédagogue et nous transmet très bien sa passion du langage Go
Super formateur go, Julien est très pédagogue et nous transmet très bien sa passion du langage Go
Une formation au langage Go très utile par son côté interactif avec le formateur, qui permet de compléter efficacement ce qui peut être appris...
Une formation au langage Go très utile par son côté interactif avec le formateur, qui permet de compléter efficacement ce qui peut être appris en lisant des documentations.
Voir plusMerci au formateur pour sa bonne humeur et don savoir faire, pendant ces 3 jours qui ont permis d'appréhender le langage et d'en apercevoir le...
Merci au formateur pour sa bonne humeur et don savoir faire, pendant ces 3 jours qui ont permis d'appréhender le langage et d'en apercevoir les possibilités. Maintenant il faut se mettre au travail pour que la formation soit utile
Voir plusExcellent formateur. Pédagogue et patient. Contenu parfaitement adapté. Doc simples et lisibles.
Excellent formateur. Pédagogue et patient. Contenu parfaitement adapté. Doc simples et lisibles.
Formateur pédagogue très gentil.
Formateur pédagogue très gentil.
Très bonne formation qui pose les bases de Go. Avoir parcouru le gotour avant est un plus mais non nécessaire. Le formateur est très pédagog...
Très bonne formation qui pose les bases de Go. Avoir parcouru le gotour avant est un plus mais non nécessaire. Le formateur est très pédagogue et prend bien le temps de répondre aux questions. A la fin de la formation vous n’aurez qu'une envie en savoir plus au sujet du Go :)
Voir plusTrès bonne formation en petit comité, cela change des concurrents.
Très bonne formation en petit comité, cela change des concurrents.
Une formation en petit comité qui favorise les échanges. A la fois technique et théorique. Avec une théorie appliquée techniquement. Un format...
Une formation en petit comité qui favorise les échanges. A la fois technique et théorique. Avec une théorie appliquée techniquement. Un formateur (Julien) qui connaît son sujet et bon pédagogue.
Voir plusJulien est passionné par ce qu'il fait. Il est toujours plus agréable d'avoir un professionnel ayant une forte expérience pour nous accompagne...
Julien est passionné par ce qu'il fait. Il est toujours plus agréable d'avoir un professionnel ayant une forte expérience pour nous accompagner dans nos débuts d'un langage. Très bon contact humain.
Voir plusTrès bonne formation avec un bon formateur, le rythme est bon et les exercices concrets
Très bonne formation avec un bon formateur, le rythme est bon et les exercices concrets
Bien qu'éloigné du développement depuis très longtemps, j'ai trouvé cette formation très bien faite et très intéressante.
Bien qu'éloigné du développement depuis très longtemps, j'ai trouvé cette formation très bien faite et très intéressante.
Super formation en petit comité, ça permet d'avoir du temps pour des questions et avancer à son rythme
Super formation en petit comité, ça permet d'avoir du temps pour des questions et avancer à son rythme
Simple, performant, minimaliste, axé sur la productivité... Le langage de programmation Go (aussi surnommé Golang) ne manque pas d'atouts. Depuis son apparition en 2009, Go est devenu un langage incontournable tant pour l'implémentation d'outils tels que Docker et Kubernetes que pour le développement backend d'applications Web.
Cette formation Go (récemment mise à jour pour Go 1.23) s'adresse à des développeur·euse·s ayant déjà de l'expérience en développement backend Web souhaitant se lancer dans le développement en Go.
Durant cet apprentissage, vous comprendrez comment utiliser Go pour développer une application permettant la vérification de la validité et disponibilité d'un nom sur plusieurs réseaux sociaux.
Vous repartirez avec le code source du projet développé lors de ces trois jours, ainsi que la solution du formateur (sur GitHub), et l'envie —on l'espère— d'utiliser Go dans vos projets actuels et futurs !
Le dernier tiers de cette formation, dédié à la programmation concurrente en Go, est également disponible à part sous la forme de la formation Programmation concurrente en Go, également animée par Julien Cretel.
Jetez un œil à la formation Go Avancé animée par Julien Cretel.
Vous y verrez comment bien tester vos applications en Go, améliorer les performances de vos applications et bien les sécuriser.
Toutes nos formations étant limitées à 6 participant·e·s par session, vous aurez un contact privilégié avec votre formateur, Julien Cretel, Gopher passionné et pédagogue, enthousiaste de partager ses expériences professionnelles lors des moments informels de cette formation.
Mises en pratique :
- Initialisation du projet fil-rouge au sein de VS Code
- Compilation et transcompilation d'un programme Hello World
var
et déclaration courteMise en pratique :
-Validation d'un nom d'utilisateur·rice GitHub
new
Mise en pratique :
-Extraction de la logique de validation dans une fonction
error
nil
error
Mise en pratique :
-Gestion judicieuse des erreurs au sein de la fonction responsable de la validation d'un nom d'utilisateur·rice GitHub
Mise en pratique :
-Création d'un paquet dédié à GitHub
Mise en pratique :
-Écriture et exécution de tests unitaires
Mise en pratique :
-Vérification de la disponibilité d'un nom d'utilisateur·rice sur GitHub
break
et continue
make
append
Mises en pratique :
- Récupération du nom d'utilisateur·rice à tester via un argument de ligne de commande
- Réusinage des tests en table de tests afin d'éliminer la duplication de code
make
Mises en pratique :
- Conception d'un type structure représentant un arbre binaire
- Déclaration de types structures dédiés à chaque plateforme supportée
Mise en pratique :
-Transformation de fonctions en méthodes sur les types structures déclarés précédemment
fmt.Stringer
io.Reader
et io.Writer
error
nil
n'est pas nil
Mises en pratique :
- Déclaration judicieuse de types interfaces
- Simplification du code existant grâce aux interfaces
- Création d'un stub pour le client HTTP
select
Mise en pratique :
-Identification, dans le programme namecheck
, de traitements séquentiels qui bénéficieraient d'une ré-écriture traitements concurrents
go
main
n'attend pas la fin des autres goroutines.-race
)Mise en pratique :
-Vérification concurrente de la validité et disponibilité d'un nom sur de multiples réseaux sociaux
make
for-range
Mises en pratique :
- Analyse et résolution d'un d'interblocage
- Analyse et résolution d'une fuite de goroutines
- Communication de résultats entre goroutines à l'aide d'un canal dans le but d'agréger ces résultats
Mise en pratique :
-Transformation de l'outil de ligne de commande de départ en une API HTTP
go.mod
et go.sum
Mise en pratique :
-Configuration CORS de l'API HTTP à l'aide d'une bibliothèque tierce
select
: syntaxe et sémantiqueselect
au sein d'une bouclecontext
Mises en pratique :
- Utilisation d'une instruction select et de deux canaux distincts, l'un dédié aux résultats et l'autre aux erreurs
- Analyse et résolution d'une fuite de goroutines
sync.Mutex
Mise en pratique :
-Utilisation d'une exclusion mutuelle pour la mise à jour d'une variable globale d'état
Julien est à la fois développeur, chercheur en sécurité Web et formateur.
Son langage de prédilection est le Go, sujet sur lequel il a formé des centaines de professionnel·le·s depuis 2019. Il lui arrive aussi d'intervenir sur Go à l'occasion de conférences spécialisées, telles que GopherCon 2023 Europe.
Julien est actif dans le domaine de la sécurité Web. En marge des tests de sécurité (tests d'intrusion, évaluation de vulnérabilité, audit de codes, etc.) que ses clients lui confient et de ses activités de recherche indépendante, Julien forme régulièrement des professionnel·le·s sur la sécurité Web. Il s'adonne aussi, de temps à autre, à la chasse au bogues de sécurité (bug bounty hunting).
Julien partage ses réflexions et sa recherche sur son blog, qui est, sans surprises, principalement dédié au langage Go et à la sécurité Web.
Human Coders c'est un centre de formation pour développeurs avec :
Après avoir appris Go en autodidacte, j'avais besoin de revoir les bases et de mieux comprendre le fonctionnement des outils que j'utilisais. ...
Après avoir appris Go en autodidacte, j'avais besoin de revoir les bases et de mieux comprendre le fonctionnement des outils que j'utilisais. Cette formation a parfaitement répondu à mes attentes. Le formateur est très sympathique, à l'écoute et compétent, offrant de précieux conseils. Je suis très satisfait d'avoir suivi cette formation.
Voir plusTrès agréable formation avec un formateur passionné par le langage. J'ai beaucoup apprécié le temps qu'il a pris pour répondre aux questions l...
Très agréable formation avec un formateur passionné par le langage. J'ai beaucoup apprécié le temps qu'il a pris pour répondre aux questions lors de la formation et même pendant les pauses.
Voir plusAyant déjà utilisé Go, j'avais des attentes bien précises sur les concepts qui me manquaient, la formation a parfaitement répondu a mes attent...
Ayant déjà utilisé Go, j'avais des attentes bien précises sur les concepts qui me manquaient, la formation a parfaitement répondu a mes attentes, et le fonctionnement en petit commité permets des échanges nombreux et interressants avec le formateur.
Voir plusFormation très complète. Julien prend le temps de répondre à toutes nos interrogations.
Formation très complète. Julien prend le temps de répondre à toutes nos interrogations.
Bonne atmosphère et bon rythme, personne n'est laissé de côté. Les exos sont intéressants et bien expliqués. Les difficultés sont bien abor...
Bonne atmosphère et bon rythme, personne n'est laissé de côté. Les exos sont intéressants et bien expliqués. Les difficultés sont bien abordées et la compréhension en est aisée. Il y a beaucoup de doc, ce qui va me permettre de les revoir plus tard.
Voir plusJ'ai bien apprécié la pédagogie de Julien et le fait qu'il y avait un projet sur lequel nous étions focalisé tout au long de la formation. L...
J'ai bien apprécié la pédagogie de Julien et le fait qu'il y avait un projet sur lequel nous étions focalisé tout au long de la formation. Le mix entre théorie et pratique aide beaucoup à concrétiser directement les concepts du langage. Merci à Julien pour ces 3 jours
Voir plusExcellente maîtrise du programme, ouvert aux questions, bonne ambiance.
Excellente maîtrise du programme, ouvert aux questions, bonne ambiance.
Très bonne formation, bien complète. Le formateur est clair et précis
Très bonne formation, bien complète. Le formateur est clair et précis
Formation très intéressante pour mettre le pied à l'étrier, je recommande tout de même d'avoir un peu joué avec Go avant cette formation pour ...
Formation très intéressante pour mettre le pied à l'étrier, je recommande tout de même d'avoir un peu joué avec Go avant cette formation pour éviter de perdre trop de temps.
Voir plusFormateur et formation très agréables. Précieux conseilles distillés tout le long de la formation
Formateur et formation très agréables. Précieux conseilles distillés tout le long de la formation
Super formation pour débuter en Go.
Super formation pour débuter en Go.
Très bonne formation, formateur à l'écoute, prêt à interrompre son programme pour nous aider à résoudre nos problématiques, super top !
Très bonne formation, formateur à l'écoute, prêt à interrompre son programme pour nous aider à résoudre nos problématiques, super top !
Très pro. Format en petit comité très sympa et efficace ainsi que le fait de mettre en pratique immédiatement les notions.
Très pro. Format en petit comité très sympa et efficace ainsi que le fait de mettre en pratique immédiatement les notions.
Très bonne formation pour débuter en go
Très bonne formation pour débuter en go
Une expérience en Go permet de mieux comprendre les choses complexes
Une expérience en Go permet de mieux comprendre les choses complexes
Très bonne formation Go et de bon niveau malgré son niveau "beginners"
Très bonne formation Go et de bon niveau malgré son niveau "beginners"
Julien est un très bon formation. La progression de l'apprentissage se reflète bien dans l'exemple pratique à coder.
Julien est un très bon formation. La progression de l'apprentissage se reflète bien dans l'exemple pratique à coder.
Les concepts fondamentaux du Go ont été abordés et c'est exactement ce que je recherchais. Et comme le Go est un langage avec des semantiques...
Les concepts fondamentaux du Go ont été abordés et c'est exactement ce que je recherchais. Et comme le Go est un langage avec des semantiques puissantes et parfois contre-intuitives, je suis d'accord qu'il faut une (parfaite ?) maitrise d'un langage comme C++ ou Java pour en apprécier la beauté.
Voir plusSuper formateur go, Julien est très pédagogue et nous transmet très bien sa passion du langage Go
Super formateur go, Julien est très pédagogue et nous transmet très bien sa passion du langage Go
Une formation au langage Go très utile par son côté interactif avec le formateur, qui permet de compléter efficacement ce qui peut être appris...
Une formation au langage Go très utile par son côté interactif avec le formateur, qui permet de compléter efficacement ce qui peut être appris en lisant des documentations.
Voir plusMerci au formateur pour sa bonne humeur et don savoir faire, pendant ces 3 jours qui ont permis d'appréhender le langage et d'en apercevoir le...
Merci au formateur pour sa bonne humeur et don savoir faire, pendant ces 3 jours qui ont permis d'appréhender le langage et d'en apercevoir les possibilités. Maintenant il faut se mettre au travail pour que la formation soit utile
Voir plusExcellent formateur. Pédagogue et patient. Contenu parfaitement adapté. Doc simples et lisibles.
Excellent formateur. Pédagogue et patient. Contenu parfaitement adapté. Doc simples et lisibles.
Formateur pédagogue très gentil.
Formateur pédagogue très gentil.
Très bonne formation qui pose les bases de Go. Avoir parcouru le gotour avant est un plus mais non nécessaire. Le formateur est très pédagog...
Très bonne formation qui pose les bases de Go. Avoir parcouru le gotour avant est un plus mais non nécessaire. Le formateur est très pédagogue et prend bien le temps de répondre aux questions. A la fin de la formation vous n’aurez qu'une envie en savoir plus au sujet du Go :)
Voir plusTrès bonne formation en petit comité, cela change des concurrents.
Très bonne formation en petit comité, cela change des concurrents.
Une formation en petit comité qui favorise les échanges. A la fois technique et théorique. Avec une théorie appliquée techniquement. Un format...
Une formation en petit comité qui favorise les échanges. A la fois technique et théorique. Avec une théorie appliquée techniquement. Un formateur (Julien) qui connaît son sujet et bon pédagogue.
Voir plusJulien est passionné par ce qu'il fait. Il est toujours plus agréable d'avoir un professionnel ayant une forte expérience pour nous accompagne...
Julien est passionné par ce qu'il fait. Il est toujours plus agréable d'avoir un professionnel ayant une forte expérience pour nous accompagner dans nos débuts d'un langage. Très bon contact humain.
Voir plusTrès bonne formation avec un bon formateur, le rythme est bon et les exercices concrets
Très bonne formation avec un bon formateur, le rythme est bon et les exercices concrets
Bien qu'éloigné du développement depuis très longtemps, j'ai trouvé cette formation très bien faite et très intéressante.
Bien qu'éloigné du développement depuis très longtemps, j'ai trouvé cette formation très bien faite et très intéressante.
Super formation en petit comité, ça permet d'avoir du temps pour des questions et avancer à son rythme
Super formation en petit comité, ça permet d'avoir du temps pour des questions et avancer à son rythme
* Nombre de personnes ayant répondu au questionnaire de satisfaction sur cette formation depuis 2012