mong - Ich habe versucht, den Code, der zufällig den Containernamen von Docker generiert, nach Python zu portieren. -

goofy_grothendieck, ecstatic_lederberg, quizzical_wu, ... Sie möchten ihm einen zufälligen, aber leicht lesbaren Namen geben, wie einen Docker-Container, oder? moby / moby bis Go Language Code. Ich fand go), portierte es also nach Python und machte daraus eine Bibliothek namens mong.

Nachtrag 2019/12/22: Follow-up Ich schrieb

Wie benutzt man

Wir haben den Vorgang mit Python 3.6 und 3.8 bestätigt. Ich denke, es wird mit Python3.5 oder höher funktionieren, aber Python2 wird aufgrund von Typhinweisen usw. nicht funktionieren.

Da wir nur die Standardbibliotheken verwenden, sollte die Installation bald abgeschlossen sein.

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

Lassen Sie uns zufällig einen Namen generieren.

(Behoben 22/12/2019: Geändert von Instanziierungsmethode zu Funktionsaufruf)

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

Jupyter Notebook ist auf Google Colab verfügbar. Sie können es sofort versuchen von: Open In Colab

Implementierungsrichtlinie

Mit Blick auf den Originalcode zeigt das Wörterbuch der Wörter, aus denen der Name stammt, das meiste davon. .. Ich habe die Methode zum Extrahieren aus dem Originalcode gewählt, da die Wartung schwierig zu sein scheint, wenn das Wörterbuch in den Code des Portierungsziels geschrieben ist.

Insbesondere ist es wie folgt. --mong / create_dict.py extrahiert das Wörterbuch der Wörter, aus denen der Name stammt, aus dem Originalcode.

Ursprüngliche (Moby) Implementierung

Code zur Generierung von Docker-Namen Ist in moby / moby und in Go-Sprache geschrieben. Moby scheint eine Sammlung von Werkzeugen für Containersysteme zu sein. Es wird kurz in [dieser Folie] zusammengefasst (https://www.slideshare.net/zembutsu/5-minuts-docker-2017/31-31MobyDockerMoby_Project).

Der Name besteht aus zwei Wörtern, einem Adjektiv und den Namen berühmter Wissenschaftler und Hacker. Sie sind durch "_" verbunden.

Beispiel

#Wütend (Anwalt)_Turing (persönlicher Name)
angry_turing

Die Adjektive werden in der Liste "links" verwaltet, und der Name der Person wird in der Liste "rechts" verwaltet.

	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",

Der Prozess der Namensgenerierung ist im Grunde nur eine zufällige Auswahl und Verbindung.

// 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
}

Wie Sie in Dieser Qiita-Artikel sehen können, wird "langweilig_wozniak" nicht generiert. (Wenn es herauskommt, wird es wieder neu gemacht.)

Zum 21. Dezember 2019 gab es 108 Wörter für "links" und 235 Wörter für "rechts", sodass insgesamt 25.379 Arten von Namen generiert werden können. Ich habe das Gefühl, dass es überraschend wenige gibt.

Ich bin mir über das Argument "Wiederholen" nicht sicher, und selbst wenn ich mir den Prozess anschaue, sieht es nicht so aus, als wäre es "Wiederholen". Wenn "retry> 0", werden Ganzzahlen über "0" und unter "9" zufällig ausgewählt und am Ende des Namens hinzugefügt. Möglicherweise wissen Sie dies nicht, ohne den Code des Benutzers gelesen zu haben. Ist es einfach, die Anzahl der einstelligen Typen zu erhöhen?

Zusammenfassung und zukünftige Ausgaben

Ich habe eine Bibliothek namens mong erstellt, die mit Python Docker-Container-ähnliche Zufallsnamen generieren kann.

Vorläufig habe ich bis zu dem Punkt geschrieben, an dem es funktioniert, aber es gibt Raum für Verbesserungen auf verschiedene Weise, wie z. B. geringe Testabdeckung, Weglassen der Fehlerbehandlung und kein CI. Da es nicht in pypi registriert ist, ist die Installation etwas mühsam.

Wenn es einen Bedarf gibt (einschließlich meiner selbst), denke ich, werde ich es ein bisschen mehr arrangieren.

Verweise

Recommended Posts

mong - Ich habe versucht, den Code, der zufällig den Containernamen von Docker generiert, nach Python zu portieren. -
Ich hatte das Gefühl, dass ich den Python-Code nach C ++ 98 portiert habe.
Ich habe versucht, den für TensorFlow geschriebenen Code nach Theano zu portieren
Ich habe versucht, einen Generator zu erstellen, der mit Python eine C # -Containerklasse aus CSV generiert
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, die Python-Bibliothek "pykakasi" zu verwenden, die Kanji in Romaji konvertieren kann.
Ich habe versucht, den Code des Python-Anfängers (Schüler der Mittelstufe) zu überarbeiten.
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich habe versucht, Soma Cube mit Python zu lösen
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
Verschiedene Hinweise zur Verwendung von Python für Projekte
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich habe versucht, den Code des Python-Anfängers (Schüler der Mittelstufe) in objektorientiertes Knuspriges umzuwandeln
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
Ich habe versucht, das Python Package Repository (Warehouse) auszuführen, das PyPI unterstützt
Ich habe versucht, Python zu berühren (Installation)
Ich habe die Bewegung Python3 ausprobiert, die die Richtung im Koordinatensystem ändert
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
Ich habe versucht, die Videowiedergabezeit anzuzeigen (OpenCV: Python-Version)
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, den unter "Abrufen von Bildern von der Flickr-API mit Python" (Teil 2) veröffentlichten Vorlagencode zu überarbeiten.
Ich habe einen Docker-Container erstellt, um JUMAN ++, KNP, Python (für pyKNP) zu verwenden.
[Python] Ich habe versucht, die Nacht der Galaxienbahn mit WordCloud zu visualisieren!
[Python] Ich habe versucht, den kollektiven Typ (Satz) auf leicht verständliche Weise zusammenzufassen.
Als ich versuchte, Python auszuführen, wurde ich zum Microsoft Store übersprungen
Python - Ich habe versucht, die umfassende Notation des Wörterbuchs in ihrer ursprünglichen Form wiederherzustellen.
[Python] Ich habe einen einfachen Code geschrieben, der automatisch AA generiert (Ascii Art).
[Python] Ich habe versucht, den Pitcher zu analysieren, der keinen Treffer und keinen Lauf erzielt hat
Ich habe versucht, einen Formatierer zu entwickeln, der Python-Protokolle in JSON ausgibt
(Python) Ich habe versucht, 1 Million Hände zu analysieren ~ Ich habe versucht, die Anzahl der AA ~ zu schätzen
Ich habe es mit den Top 100 PyPI-Paketen versucht.> Ich habe versucht, die auf Python installierten Pakete grafisch darzustellen
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich habe versucht, den entscheidenden Baum (CART) zu verstehen, um ihn sorgfältig zu klassifizieren
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe versucht, die Neujahrskarte selbst mit Python zu analysieren
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, den Befehl umask zusammenzufassen
Ich habe versucht, Permutation in Python zu implementieren
Ich versuchte das Weckwort zu erkennen
Python3-Standardeingabe habe ich versucht zusammenzufassen
Ich habe versucht, die grafische Modellierung zusammenzufassen.
Ich habe versucht, ADALINE in Python zu implementieren
Ich habe versucht, das Umfangsverhältnis π probabilistisch abzuschätzen
Ich habe versucht, die COTOHA-API zu berühren
Ich habe versucht, PPO in Python zu implementieren