mong - J'ai essayé de porter le code qui génère de manière aléatoire le nom du conteneur Docker vers Python -

goofy_grothendieck, ecstatic_lederberg, quizzical_wu, ... Vous voulez lui donner un nom aléatoire mais facile à lire, comme un conteneur Docker, non? moby / moby à [Go Language Code](https://github.com/moby/moby/blob/master/pkg/namesgenerator/names-generator. J'ai trouvé go), alors je l'ai porté sur Python et en ai fait une bibliothèque appelée mong.

22/12/2019 postscript: suite J'ai écrit

Comment utiliser

Nous avons confirmé l'opération avec Python 3.6 et 3.8. Je pense que cela fonctionnera avec Python3.5 ou version ultérieure, mais Python2 ne fonctionnera pas en raison de l'indication de type, etc.

Puisque nous n'utilisons que les bibliothèques standard, l'installation devrait se terminer bientôt.

$ pip install git+https://github.com/toshihikoyanase/mong.git

Générons un nom au hasard.

(Correction du 22/12/2019: Changement de la méthode d'instanciation à l'appel de fonction)

import mong
mong.get_random_name()  # 'goofy_robinson'
mong.get_random_name()  # 'stoic_feynman'

Jupyter Notebook est disponible sur Google Colab. Vous pouvez l'essayer immédiatement depuis: Open In Colab

Politique de mise en œuvre

En regardant le code original, le dictionnaire des mots qui sont à l'origine du nom en montre l'essentiel. .. J'ai choisi la méthode d'extraction à partir du code d'origine car la maintenance semble difficile si le dictionnaire est écrit dans le code de la destination de portage.

Plus précisément, c'est comme suit. --mong / create_dict.py extrait le dictionnaire des mots qui sont la source du nom du code d'origine.

Implémentation originale (moby)

Code de génération de nom Docker Est situé dans moby / moby et est écrit en langue Go. Moby semble être une collection d'outils pour les systèmes de conteneurs. Il est brièvement résumé dans cette diapositive.

Le nom se compose de deux mots, d'un adjectif et des noms de scientifiques et de hackers célèbres. Ils sont connectés par «_».

Exemple

#En colère (avocat)_Turing (nom personnel)
angry_turing

Les adjectifs sont gérés dans la liste «gauche» et les noms de personne sont gérés dans la liste «droite».

	left = [...]string{
		"admiring",
		"adoring",
		"affectionate",
		"agitated",
	right = [...]string{
		// Muhammad ibn Jābir al-Ḥarrānī al-Battānī was a founding father of astronomy. https://en.wikipedia.org/wiki/Mu%E1%B8%A5ammad_ibn_J%C4%81bir_al-%E1%B8%A4arr%C4%81n%C4%AB_al-Batt%C4%81n%C4%AB
		"albattani",

		// Frances E. Allen, became the first female IBM Fellow in 1989. In 2006, she became the first female recipient of the ACM's Turing Award. https://en.wikipedia.org/wiki/Frances_E._Allen
		"allen",

Le processus de génération de nom est essentiellement une sélection et une connexion aléatoires.

// GetRandomName generates a random name from the list of adjectives and surnames in this package
// formatted as "adjective_surname". For example 'focused_turing'. If retry is non-zero, a random
// integer between 0 and 10 will be added to the end of the name, e.g `focused_turing3`
func GetRandomName(retry int) string {
begin:
	name := fmt.Sprintf("%s_%s", left[rand.Intn(len(left))], right[rand.Intn(len(right))])
	if name == "boring_wozniak" /* Steve Wozniak is not boring */ {
		goto begin
	}

	if retry > 0 {
		name = fmt.Sprintf("%s%d", name, rand.Intn(10))
	}
	return name
}

Comme vous pouvez le voir dans Cet article Qiita, boring_wozniak n'est pas généré. (Quand il sortira, il sera refait à nouveau.)

Au 21 décembre 2019, il y avait 108 mots pour «gauche» et 235 mots pour «droite», donc un total de 25379 types de noms peuvent être générés. Je pense qu'il y en a étonnamment peu.

Je ne sais pas grand-chose sur l'argument retry, et même si je regarde le processus, cela ne ressemble pas à retry. Si «retry> 0», les entiers au-dessus de «0» et en dessous de «9» sont sélectionnés au hasard et ajoutés à la fin du nom. Vous ne le savez peut-être pas sans lire le code de l'utilisateur. Est-ce simplement pour augmenter le nombre de types à un chiffre?

Résumé et futurs numéros

J'ai créé une bibliothèque appelée mong qui peut générer des noms aléatoires de type conteneur Docker avec Python.

Pour le moment, j'ai écrit jusqu'au point où cela fonctionne, mais il y a place à l'amélioration de diverses manières, telles que la faible couverture des tests, l'omission de la gestion des erreurs et l'absence de CI. De plus, comme il n'est pas enregistré dans pypi, l'installation est un peu gênante.

S'il y a un besoin (y compris moi-même), je pense que je vais l'arranger un peu plus.

Les références

Recommended Posts

mong - J'ai essayé de porter le code qui génère de manière aléatoire le nom du conteneur Docker vers Python -
J'ai senti que j'avais porté le code Python en C ++ 98.
J'ai essayé de porter le code écrit pour TensorFlow sur Theano
J'ai essayé de créer un générateur qui génère une classe conteneur C # à partir de CSV avec Python
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai essayé d'utiliser la bibliothèque Python "pykakasi" qui peut convertir des kanji en romaji.
J'ai essayé de refactoriser le code de Python débutant (lycéen)
J'ai essayé de représenter graphiquement les packages installés en Python
J'ai essayé de résoudre Soma Cube avec python
[Python] J'ai essayé de représenter graphiquement le top 10 des ombres à paupières
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé de simuler la propagation de l'infection avec Python
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
Notes diverses sur l'utilisation de python pour les projets
J'ai essayé d'énumérer les différences entre java et python
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10
J'ai essayé de remodeler le code de Python débutant (lycéen) en crunchy orienté objet
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
J'ai essayé d'exécuter le référentiel de packages Python (entrepôt) qui prend en charge PyPI
J'ai essayé de toucher Python (installation)
J'ai essayé le mouvement Python3 qui change la direction dans le système de coordonnées
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai écrit le code pour écrire le code Brainf * ck en python
J'ai essayé d'afficher le temps de lecture de la vidéo (OpenCV: version Python)
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
J'ai essayé de refactoriser le code du modèle publié dans "Obtenir des images de l'API Flickr avec Python" (Partie 2)
J'ai créé un conteneur Docker pour utiliser JUMAN ++, KNP, python (pour pyKNP).
[Python] J'ai essayé de visualiser la nuit du chemin de fer de la galaxie avec WordCloud!
[Python] J'ai essayé de résumer le type collectif (ensemble) d'une manière facile à comprendre.
Lorsque j'ai essayé d'exécuter Python, j'ai été ignoré dans le Microsoft Store
Python -J'ai essayé de restaurer la notation complète du dictionnaire dans sa forme d'origine-
[Python] J'ai écrit un code simple qui génère automatiquement AA (Ascii Art)
[Python] J'ai essayé d'analyser le lanceur qui n'a réussi aucun coup, aucune course
J'ai essayé de développer un formateur qui génère des journaux Python en JSON
(Python) J'ai essayé d'analyser 1 million de mains ~ J'ai essayé d'estimer le nombre d'AA ~
J'ai essayé avec les 100 meilleurs packages PyPI> J'ai essayé de représenter graphiquement les packages installés sur Python
J'ai essayé de vérifier et d'analyser l'accélération de Python par Cython
J'ai essayé de comprendre l'arbre de décision (CART) pour classer soigneusement
J'ai essayé de rationaliser le rôle standard des nouveaux employés avec Python
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé d'analyser la carte du Nouvel An par moi-même en utilisant python
J'ai essayé de résumer la gestion des exceptions Python
J'ai essayé d'implémenter PLSA en Python
J'ai essayé de résumer la commande umask
J'ai essayé d'implémenter la permutation en Python
J'ai essayé de reconnaître le mot de réveil
Entrée standard Python3 que j'ai essayé de résumer
J'ai essayé de résumer la modélisation graphique.
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai essayé de toucher l'API COTOHA
J'ai essayé d'implémenter PPO en Python