Pattern Lock - Quelques compléments

Quelques compléments sur le billet de la semaine dernière à propos des codes de débloquage.

Nombre de combinaisons possible en fonction de la longueur du code.
Liste des 160 codes de longueur 2.
Merci @Manu pour celui-là ! Moi je suis une quiche en matplotlib.

Et sinon on a regardé sur divers téléphones : en fait on peut emprunter des chemins du type 1 vers 8 (comme le déplacement d'un cavalier aux échecs). Mais en prateek c'est pas simple à effectuer. Selon la largeur du doigt on risque de passer par une touche intermédiaire. Typiquement en allant de 1 vers 8 le doigt passe souvent par 5. Du coup ce type de trajet doit être très très rarement utilisé.


Year+=1


En vivant 91 ans 4 mois et 6 jours, avec un pouls moyen de 69,445139,
ça fait pile 33 333 jours et 3 333 333 333 battements de coeur.
(le pouls est un peu élevé, mais c'est parce qu'on vit intensément).


Allez, Meilleurs Wishes 2019,
les poilu.e.s des veuches !


Tiens, je te rajoute un petit Manson.
Volume au max, hein, pour que tes voisins profitent.

Good Old School : Monstur

Une découverte qu'on m'a soufflée dans l'oreille : Monstur. Du "Hard-Rock" façon old school. Pas mon style habituel mais ça fait du bien. Impression de revisiter mes classeks, intros ciselées, bridges de trois kilomètres de long, toute une époque... Cinq morceaux pour l'instant. Mes préférés Frankenstein et surtout Human Shell. Celui-là, c'est en boucle.




Pattern Lock - Combien de combinaisons ?


Allez tiens, un bon post bien geek aujourd'hui. Franchement si vous n'êtes pas fan de combinatoire et de python ne perdez pas trop de temps à lire… En échange je vous mets le clip de Djiin. (*)

Alors un midi comme ça on discutait des schémas de déverrouillage pour smartphones. Ces glyphes qu'on trace du doigt pour dire à notre smartphone que c'est bien nous. On s'est demandé combien de combinaisons ça pouvait bien faire. L’intuition ambiante oscillait entre pas tant que ça et pas bézef.

Posons un peu mieux le problème

On a neuf touches, numérotées de un à neuf. Attends je vérifie... ouais c'est ça, neuf. On fixe la longueur max du code à huit mouvements, j'expleek pourquoi plus loin. La longueur minimum c'est zéro mouvement. Zéro mouvement ça correspond au gros fainéant qui appuie juste sur une touche et fait même pas glisser son doigt. J'ai honte pour lui.


D’abord le cas simple

Le cas le plus facile à calculer c'est quand il n'y a pas de contrainte particulière : on peut aller d'une touche vers n'importe quelle autre touche, on peut repasser plusieurs fois par une même touche. Ben oui c'est simple parce qu’on choisit une touche de départ (neufs possibilités) et de là on peut glisser vers n'importe quelle autre touche. À chaque étape il y a donc huit mouvements possibles. En tout il existe 9 codes de longueur zéro, plus 9 x 8 codes de longueur un, plus 9 x 8 x 8 codes de longueur deux, etc. Jusqu'à la longueur maximale fixée à huit mouvements, j'expleek pourquoi plus loin, je l'ai déjà dit. Je nous fais les multiplication et les sommes gratuitement et ça donne cent soixante-douze million cinq cent soixante-cinq mille six cent quarante combinaisons. De quoi voir venir, surtout si le téléphone se bloque genre trente secondes au bout de cinq essais. Faut près d'un siècle pour tout essayer, et encore, en dormant pas beaucoup.

Maintenant le cas intéressant

En prateek tous les mouvements ne sont pas nécessairement autorisés. On s'est demandé combien il y avait de combinaisons lorsque premièrement on interdit de réutiliser une touche et deuxièmement on n'autorise que les mouvements vers des touches contiguës (**). Voir croquis.


On peut remarquer que sous ces conditions la longueur maximale d'un code est huit mouvements. En effet, au bout de huit mouvements, toutes les touches ont été visitées une fois chacune. Voilà, je l'avais bien dit que j’expleekerai plus loin.

Alors je vous donne direct le résultat. Des codes comme ça il n'y en a que : dix mille trois cent cinq. Soit à peine plus que des PIN codes de carte bancaire à quatre chiffres. C'est peu : en même pas une semaine on peut tout essayer, et encore, en dormant bien. Marrant, à l'intuition j'aurais cru qu'il y avait encore moins de combinaisons que ça. À la louche j’aurais dit quelques centaines pas plus. Je me foutais donc le doigt dans l’œil sur deux ordres de grandeurs. Ça va, j’ai fait pire…

Un bout de python pour calculer ça

Le calcul n'est pas aussi direct que dans le cas simple. C’est même carrément coton. Pas moyen de trouver une formule explicite. Du coup j'ai fait un bout de python pour énumérer tout ça. Je vous le copie-colle ici et j'expleek après.


Version texte à la fin du post (si quelqu'un sait comment utiliser pygmentize dans blogspot, je veux bien un coup de main)

Quelques remarques sur le bout de python

1) Je n'ai pas mis le programme sur github. Ouais, j'aime bien à l'ancienne, copié-collé crade direct dans le post.
2) Je n’ai pas mis non plus de licence particulière. En fait c'est un Metallurgeeciel: tu peux en faire ce que tu veux mais je veux bien qu'on aille se boire une bière.
3) Les variables et les noms de fonctions font tou.t.e.s exactement quatre caractères. Un vieux T.O.C. ça m’a pris en classe de cinquième ça finira bien par passer. Dans le même esprit les commentaires sont tous obsessionnellement alignés au caractère près. Et le score sous pylint est de 10.00/10, comme quoi je respecte la PEP8 au pied de la lettre.
4) Les remarques 1) 2) et 3) n'ont rien à voir avec l'algorithme et le sujet du post. La remarque 4) non plus.
5) La fonction "code(path, many)" lignes 9-15 prend le début d'un code en argument et compte les suites possibles. Pour ça elle s'appelle récursivement autant de fois qu'il y a de mouvements possibles. Le programme connait par cœur les mouvements possibles à partir d'une touche. C'est à ça que sert le dictionnaire "MOVE" lignes 3-7. On est confiant que la récursion terminera car à chaque appel une nouvelle touche est visitée et des touches y en a que neuf (attends je vérifie... ouais c'est ça, neuf)
6) Pour faire moins de calculs, j'utilise le fait qu'il n'y a que trois sortes de codes : ceux qui commencent par un coin (touches 1, 3, 7, 9), ceux qui commencent par un milieu (touches 2, 4, 6, 8) ou ceux qui commencent pile par le centre (touche 5).
7) Du coup, je calcule le nombre de codes possibles en partant du coin 1 et le nombre de codes possibles en partant du milieu 2. Ces nombres là je les multiplie par quatre parce qu'il y a quatre coins et quatre milieux. Reste à ajouter le nombre de codes qui commencent par le centre.
8) On peut aussi calculer tous les chemins sans exploiter les symétries. C’est ce que fait la ligne 18 en commentaire. Truc de ouf, on trouve le même résultat.

Conclusion

Si le téléphone prend ton empreinte digitale et analyse ton ADN pendant que tu traces le code, et ben le nombre de combinaisons on s'en fout un peu.

Le programme à copier-coller

'''Pattern locks on a 9 digits keypad with just vert/horiz/diag moves and no digit reuse.'''

MOVE = {
    '1':'254', '3':'652', '9':'856', '7':'458',                 # Possible moves from corner
    '2':'36541', '6':'98523', '8':'74569', '4':'12587',         # Possible moves from middle
    '5':'12369874'                                              # Possible moves from center
    }

def code(path, many):                                           # Recursively research paths
    '''Count the codes starting with some path.'''
    #print(path)                                                # Un-comment for enumeration
    for move in MOVE[path[-1]]:                                 # Extend path with netx move
        if not move in path:                                    # Bypass already used digits
            many = code(path+move, many+1)                      # Count one path and recurse
    return many                                                 # Return the number of paths

print(code('1', 1)*4+code('2', 1)*4+code('5', 1), __doc__)      # 4 symmetries except center
#print(sum([code(base, 1) for base in MOVE.keys()]), __doc__)   # Alternate counting formula



(*) Djiin avec deux "i" comme dans Giin Tooneek (ta race).
(**) Contiguës ça s'écrit exactement comme Noël, sauf tu mets un C au début comme dans "Christmas".

Super concert !

Super concert, un peu court peut-être, mais vraiment sympa.


Back 2 Roots


Si seulement j'avais écouté mes parents quand j'étais petit !

Pourquoi, qu'est-ce qu'ils disaient tes parents ?

Je sais pas, j'ai pas écouté...

Toute ressemblance...

Citer Arthur Rimbaud, c'est bon ? J'veux dire on a encore le droit, hein ? Ok, ben alors je cite :

Tandis que les crachats rouges de la mitraille
Sifflent tout le jour par l’infini du ciel bleu ;
Qu’écarlates ou verts, près du Roi qui les raille,
Croulent les bataillons en masse dans le feu ;

Tandis qu’une folie épouvantable, broie
Et fait de cent milliers d’hommes un tas fumant ;
– Pauvres morts ! dans l’été, dans l’herbe, dans ta joie,
Nature ! ô toi qui fis ces hommes saintement ! ...

– Il est un Dieu, qui rit aux nappes damassées
Des autels, à l’encens, aux grands calices d’or ;
Qui dans le bercement des hosannah s’endort,

Et se réveille, quand des mères, ramassées
Dans l’angoisse, et pleurant sous leur vieux bonnet noir
Lui donnent un gros sou lié dans leur mouchoir !

Arthur Rimbaud,
Le Mal, 1870.

Bon, ça c'est fait...

Crypto Monet
C'est deux monnaies électroneek (ta mère) :
"Oulah, t'as une mine de Bitcoin ce matin t'es tout PayPal."
"M'en parle pas j'ai Zerocash de tension et j'Ethereum toutes les 2 minutes."

La minute de pub

Ben ouais, les "intelligences artificielles" mettent bien de la pub entre mes articles(*). Donc si je veux j'en mets aussi dans les articles et je la choisi moi-même avec mon "intelligence naturelle". Là c'est pour un pote sur Rennes. Il fait des portraits au pochoir, surtout dans les tons gris. J'ai vu ça aujourd'hui, j'aime bien ce qu'il fait, j'vous met sa carte(**) et son mail : kmi35i@yahoo.fr.

Après, je sais pas s'il fait aussi des tatouages au pochoir... Peut-être une idée à creuser :)



(*) Avec tous vos clics j'ai déjà gagné 5 000 000 euros, là je suis aux Bahamas près de la piscine.
(**) J'ai laissé que l'adresse email sur la carte parce que sinon... vie privée... tout ça, tout ca.

Bash Sampling

Parfois dans la vie on n'a pas besoin d'avoir toute l'info. Par exemple on peut s'intéresser à seulement un mille trois cent trente septième de l'info. Certes, ça fait pas beaucoup, sauf si on a trop d'info au départ (par exemple mille trois cent trente sept fois trop). Bref, voici une méthode pour faire du random sampling en bash. Eh ben en voilà un billet qu'il était nécessaire !

while read L; do ((RANDOM % 1337)) || echo $L; done < data > sample


Enigmateek (again)

Quel mot devient drôle quand on lui ajoute une lettre ?

Et un "équivalent" en anglais : which five letters word becomes shorter when you add two letters?

Je poste les solutions dès que je les ai trouvées.

Les derniers sauvages

Ayé, l'espèce humaine n'est plus 100% une espèce sauvage. Les premier.e.s humain.e.s génétiquement modifié.e.s, Lulu et Nana, sont né.e.s, les premier.e.s humain.e.s domesteeks en quelque sorte. Je suis trop nul en philo pour savoir si c'est plutôt bien ou plutôt mal. Mais je trouve que c'est plutôt intéressant.

Moi qui me suis toujours considéré comme un dinosaure, maintenant j'en suis certain.

Hiérarchiser les priorités

Mon nouveau fond d'écran / My new wallpaper (of death)

Expressions Irrégulières


L’autre jour j’avais pas grand-chose à penser dans ma tête. Du coup je me suis pris à réfléchir aux verbes irréguliers anglais. J’aime bien, ça change du python.

Irregular Verbs


Et de me poser cette question toute simple : « d’où vient cette obsession des profs à vouloir enseigner les verbes irréguliers anglais ? » Puis la question corolaire : « d’où vient cette obsession des élèves à ne pas vouloir apprendre les verbes irréguliers anglais ? »

À question simple réponse simple me direz-vous. Et c’est vrai qu’il existe des réponses simples, voire simplistes. Du genre : en France on est des fétichistes de la grammaire et on n’est pas foutu d’enseigner l’anglais correctement. Et corolairement côté élève : les verbes irréguliers c’est méga-chiant, nous ce qu’on veut c’est comprendre les paroles des chansons, genre KILL4ME (me dites pas que tous les élèves écoutent de la K-Pop et  de l’électro-trap ça va m’énerver).


KILL4ME


Tiens j’en profite pour faire un aparté parce que KILL4ME est à mon avis l’ultime hurlement authentiquement valable de Marylin Manson. Parce qu'à part ça j’aime pas trop ce qu’il fait depuis 10 ans. Mais avec KILL4ME il m’a juste crucifié à mes baffles ! L’impression d’entendre le gros son indus des débuts(*).

Tant que j’y suis, je fais un aparté dans l’aparté, tkt je reviens au sujet juste après. Autant la museek est fantasteek, autant la vidéo de KILL4ME est un peu space : commerciale, couteusement léchée et post-produite, avec cet acteur hollywoodien qui jouait naguère pour Disney. La première fois j’ai détesté la vidéo et maintenant je la trouve euh, intéressante. Mais bon, ça me fait ça avec toutes les vidéos de Marylin Manson en fait.
Allez, fin des apartés.


Les verbes irréguliers c’est le passé


Donc, vous l’aurez compris, je trouve les réponses toutes faites un peu nazes. Je préfère élaborer moi-même mes réponses un peu nazes.

Pour moi, la difficulté d’enseigner/apprendre les verbes irréguliers c’est avant tout une question d’âge. Ben oui, suis bien le raisonnement : les verbes irréguliers sont irréguliers seulement quand on les met au passé, plus précisément au simple past et au preterite(**) Au présent les verbes irréguliers se comportent à peu près comme n'importe quel verbe à la con normal. Or s’il y a un truc dont on se fout solidement quand on est élève, c’est bien le passé ! Et à l’inverse, s’il y a un truc qui nous fascine quand on est enseignant c’est bien le passé.
CQFD !


Du passé simple faisons table rase sous les aisselles


Même en utilisant les trucs pédagogeeks les plus extrêmes (décharges électreeks, drogues de synthèse, balades en montagne) on ne parviendra pas à enseigner ce qui ne suscite pas l’intérêt. À l’inverse, quand l’élève grandira et qu’il aura de plus en plus de choses à raconter (au passé donc) le simple past et le preterite {footnote purulent} lui deviendront des sujets utiles ; et donc faciles à apprendre. Par exemple à l’âge bénit du garage band avec les potes, quand on écrit nos premières chansons en anglais. Avant, rien à faire, c’est mort.


Application prateek


Chers enseignants, lâchez-leur la grappe aux collégiens et jeunes lycéens avec les verbes irréguliers. Jouez le coin du bois, attendez patiemment la classe de première ou de terminale. Là, repérez les élèves qui ont formé un garage band (en gros 90% de la classe). À ceux-là, enseignez comment s’exprimer au passé en anglais.

Et si c’est difficile pour vous de patienter jusqu’à là, souvenez-vous qu’à l'âge que de vos élèves vous connaisiez ça par coeur.


We don't need no education
We dont need no thought control
No dark sarcasm in the classroom
Teachers leave them kids alone
Hey! Teachers! Leave them kids alone!
All in all it's just another brick in the wall.
All in all you're just another brick in the wall.





(*) Un peu dans la veine du mytheek "Tourniquet". La même veine, ouais, celle où il plante l'aiguille.
(**) Rien que le mot « preterite » ça sonne plus comme une maladie de peau que comme un temps conjugué(***).
(***) Eh toi, si tu lis les notes de bas de page en plus des apartés, t’es pas arrivé au bout de l’article !

Enigmateek la soluce

(Ce billet fait suite au billet Enigmateek. Si tu l’as pas lu vas y vite vite vite. Et profites en pour relire tout Metallurgeek depuis Juillet 2011. Prends ton temps je bouge pas. (…) Eh ben t’as fait vite. Allez, maintenant que tout le monde est là j’enchaîne).

Vraiment sympa cette énigme, en particulier avec toutes les ambiguïtés dans l’énoncé qui permettent des réponses intéressantes et très diverses. En fait, Science & Avenir aurait pu poser la question avec 9 épiciers au lieu de 6. Oui, la solution en deux pesées sur une balance à plateaux marche jusqu’à neufs sachets. Tu m’crois pas ? Voici la méthode, inspirée du mix de plusieurs réponses sur FB plus une bière et un morceau de fromage.

Je prends mes neufs sachets, j’en mets trois sur un plateau, trois autres sur l’autre plateau, et les trois derniers je les laisse sur ma table avec mes chamallows. Si la balance penche d’un côté j’en déduis que le sachet de l’escroc est du côté le plus léger. Si la balance est à l’équilibre je sais que le sachet du fumier (Hadès noircisse sa face !) est sur la table.

Dans tous les cas je me retrouve avec trois sachets dont un. Je mets l’un de ces sachets sur un plateau, l’autre sur l’autre plateau parce que j’aime bien les trucs symétreeks, et le troisième dans mon calecif pour la déconne. Si la balance penche, le sachet du fumier est du côté le plus léger. Si la balance est à l’équilibre, le sachet du fils de rat est dans mon calcif.

Et, sauf collision de trous noirs supermassifs, on ne peux pas faire mieux que 9 avec deux pesées. Paskeu si on regarde bien, chaque pesée permet de couper l’espace des solutions en trois (selon que ça penche à gauche, ou à droite, ou que ça penche pô). Et donc avec deux pesées on peux au mieux couper l’espace en trois et re en trois : 3x3=9. Merci kiki on plie les gaules on rentre chez mémé.

Ça me met dans des états ce genre d’énigmes ! Du coup je suis pas près d’acheter du safran, ni de la coke, ni quoique ce soit vendu en paquet d'un gramme. Je continue à me défoncer aux chamallows. Les roses surtout.



épicène le mascu


Euh, je réfléchissais à un truc là...

faut dire "le langage inclusif"

ou "la langue inclusive" ?

Enigmateek

Il est assez rare que j'achète le magazine "la recherche" mais là il y avait un article qui m'intéressait à mort, alors je me suis fendu de quelques euros. Avant de me précipiter sur l'article en question, j'ai rapidement feuilleté l'ensemble du magazine histoire de voir comment c'était ficelé. Quand je feuillette je commence toujours par la fin, une habitude. Et donc je suis tombé direct sur la section "énigmes" du magazine.

Résultat : 1) je suis à fond dans les énigmes depuis des jours, 2) je n'ai toujours pas feuilleté le reste du magazine, 3) je n'ai toujours pas lu l'article qui m'intéressait à mort, 4) d'ailleurs je ne sais plus trop de quel article il s'agissait, 5) au moins une énigme est difficile et va falloir que j'achète le numéro suivant pour la soluce.


J'en partage une ici, d'énigme. Pas trop difficile et assez connue, mais particulièrement édifiante. Six épiciers vendent du safran de grande qualité par sachets de 1 gramme. L'un des épiciers triche et ne met en fait que 3/10 gramme dans ses sachets. L'enfoiré ! J'ai connu un dealer qui faisait pareil avec la coke ça m'a agacé je l'ai cloué à la porte du tribunal. Bref. On récupère un sachet chez chaque épicier. Sur une balance à plateaux, combien faut-il de pesées au minimum pour être certain de débusquer l'empafé d'épicier et le clouer à côté du dealer ?

Je vous laisse réfléchir dans vos têtes. Et si j'en voie un qui surfe pour trouver la réponse toute faite sur Internet, sérieux je le cloue avec les deux autres.


Ma meilleure soluce pour l'instant (spoil): je prends deux sachets au hasard et je les mets sur le plateau plateau de droite, je prends deux autres sachets au hasard et je les mets sur le plateau de gauche. Là, trois cas peuvent se produire: 1) ça pencha à droite, 2) ça penche à gauche, 3) ça penche pas. Chacun des cas me permet de savoir lequel des groupes de deux sachets contient celui de l'enflure d'épicier. Là je prends le groupe concerné et je fais une seconde pesée : un sachet sur chaque plateau. Le plus léger est celui de l'enflure d'épicier.

Une légère variante envoyée par une lectrice: elle met trois sachets sur chaque plateau. Du coup ça penche forcément d'un côté. Elle prend au hasard deux sachets dans le groupe le plus léger et refait une pesée avec (un sur chaque plateau).

Bon, reste plus qu'à trouver une solution en une seule pesée. Pas facile. Peut-être en utilisant le fait que le sachet de ce rapia d'épicier pèse 3/10 grammes.

Dead Is Not


J'ai croisé un steampunk à chien.
Il m'a dit no retro-futur.  
Eh ben ça se tient.
 

Reggaeek metalleek

Merci Affif pour celle-là !!
Bon d'habitude le raggae j'aime pas trop (sauf Papa Style).
J'aime bien quand c'est un p'tit peu plus moins calme.
Mais là bon quand même, une reprise de Led Zep.
Whole Lotta Love en plus.
Allez bisous tous plein et écoutez moi-ça !


It's a miracle


"Ne baisse pas les bras tu risquerais de le faire deux secondes avant le miracle."

T'ain, non seulement il faut attendre le miracle, mais en plus il faut garder les bras en l'air !

Vacances de geek

Quelques jeux pour se détendre les neurones

  • Mots croisés regex : https://regexcrossword.com/
  • Mots de passes croisés : https://zed0.co.uk/crossword/
  • Roulette Russe geek :
    [ $[ $RANDOM % 6 ] == 0 ] && rm -rf / || echo “Click”
    (un conseil, n'executez JAMAIS cette ligne de commande, une fois sur 6 ça efface tout votre disque)

Un peu de culture quand même

Pour le reste c'est classeek

  • Bière
  • Piscine
  • Et re-bière derrière

HellFest 2018

Mon programme en trois points :

  1. Je me fracasse la tête.
  2. Je fais n'importe quoi.
  3. J'embrasse Bruce Dickinson avec la langue.
Faut savoir s'organiser.

Necrologeek

Le dernier mâle rhinocéros blanc est mort. Je ne le connaissais pas perso, mais quand même ça me laisse un peu triste...


polemeek


Le fond d'écran qui fout la merde en réunion.
Au mieux les gens n'écouteront pas.
Au pire ils s'entretueront.

Une RFC du 1er avril pour la tolérance

Les RFC du premier avril sont une tradition que j'adore. Celle de cette année est plutôt sympa: rfc8367.

Quoi de plus sérieux qu'une RFC avec son mode texte austère, son formalisme délicieusement ampoulé, ses implications sur le fonctionnement réseau. Quoi de plus déconnant qu'un poisson d'avril collé à la sauvette par un gamin facicieux dans le dos d'un grand monsieur sérieux en costume-cravatte-cigare. Alors mélanger les deux, du sérieux et du facicieux, c'est le summum.

La rfc8367 s'intitule "Wrongful Termination of Internet Protocol (IP) Packets". Les auteurs m'ont l'air de gars sérieux, l'un chez Intel, l'autre chez Marvell(*). Et les voillà épris de tolérance. Ils remarquent que certains packquets réseau sont "terminés" de manière tout à fait arbitraire. Rappelons qu'en anglais to terminate someone peut signifier virer quelqu'un ou executer quelqu'un. Les auteurs recensent les critères te terminsaison d'un paquet : taille, age, couleur, origine, etc. Lu comme ça c'est effectivement révoltant de terminer des pauvres paquets réseaux sur des critères aussi arbitraires.

L'humour peu parfois (toujours ?) véhiculer des messages. Difficile de lire cette RFC sans faire le lien avec l'actualité outre Atlanteek où - de fait - des gens se font tuer sur des critères arbitraires.

Je ne sais pas si on atteindra un jour le niveau d'humour de la rfc1149, mais en attendant celle de cette année m'a bien fait rire. Et refléchir.



(*) Le Marvell avec deux "L", ceux qui font des semi-conducteurs, pas ceux qui font des super-héros (même si certains super-héros on aussi deux "L" pour voler).

Faites chauffer la colle !

Faites chauffer la colle et brûlez des cierges,
le HellFest approche.
Allez, deux vidéos de la grande époque,
pour patienter...

Circle pit (oresque)

Wall of death (truction)


Hygiène de vie


geek rule #001: communicate
morning first thing: update
evening last  thing: commit

My humble tribute to xkcd

Without xkcd the Web would be even more boring. Tonight, I was thinking about what generative adversarial network could bring whenever trained with xkcd cartoons. And some extra weight on my favorites pics.