IRC Logs for #zfx


2021-10-12

04:37:21 Magister joined the channel
05:42:34 xq: huhu o/
06:01:38 Schrompf joined the channel
06:03:19 xq: moin Schrompf
06:16:30 Schrompf: Moinsen
06:16:38 Schrompf: hab du doch gestern nix mehr für heute gemacht
06:16:46 Schrompf: aber ich ahne eh, wie das mit dem halloween-special ausgeht
06:16:52 xq: "niemand macht was"
06:17:12 Schrompf: soweit würde ich nicht gehen. "ich krieg nix hin" ist aber ziemlich sicher
06:17:59 xq: ich möchte mit nem kumpel jetzt wieder mal n bisschen gamedev machen
06:21:09 Schrompf: das klingt doch cool! was macht dein kumpel?
06:22:29 xq: 3D-Modelle und Zeichnungen
06:22:43 xq: ich hab mittlerweile nen relativ guten plan, wie ich die meisten Dinge umsetze
06:22:55 xq: wenn man ein paar Gameplay-Features "streicht", ist der Rest easy
06:23:08 xq: Idee ist immer noch Open-World-Foo
06:23:20 xq: aber in dem Fall in einem Insel-Archipel
06:23:35 xq: => LOD brauchste nur in 2 Stufen, nämlich "ich bin nahe einer insel" oder "halt nicht"
06:24:11 xq: und wenn ich "überall drüber hüpfen" aus der gleichung nehme
06:24:19 xq: kann ich das movement komplett auf navmesh-basis basteln
06:24:27 xq: und einfach auf ner triangle surface rumrennen
06:24:37 xq: (hab ja schon nen prototyp dafür)
06:29:10 Schrompf: Dinge wiederverwenden. Praktisch
06:30:29 Schrompf: Was soll es denn werden? OpenWorld was tut man?
06:32:13 xq: du bist ein junge wie wir
06:32:20 xq: "computer sind geil, lass mal was damit basteln"
06:32:46 xq: die idee ist, dass du versuchst, eine "weltherrschaftsmaschine" zu bauen, in dem du computer sammelst, die über die welt verteilt sind
06:32:56 xq: und dazu musst du kleine programmierrätsel lösen
06:34:34 Schrompf: wobei ich Jonathan Blows letztes Ding, dieses farbenfrohe Insel-Rätsel, dessen Name mir gerade nicht einfällt, nahezu komplett ohne Internetsupport gespielt habe
06:35:50 xq: the witness?
06:36:37 Schrompf: gnau!
06:37:11 joeydee joined the channel
06:37:20 joeydee: moin
06:37:27 Schrompf: moeyn!
06:38:15 joeydee: Eigentlich hab ich für heute abend nix Besonderes, da ich seit 4 Wochen nix mehr gemacht habe, wo ich auch nix Besonderes hatte.
06:38:46 joeydee: Das Space-Ding ist noch so experimentell, dass es beim Vorstellen eher "unbedienbar" rüberkommt.
06:39:24 Schrompf: aber schick aussieht!
06:41:02 Schrompf: ich hab noch gar nicht und baue gerade im kopf das kürbisspiel zu nem openworld-rätsel ala witness um
06:41:31 joeydee: Übernimm dich nicht mit OW
06:41:47 xq: ich hab die tage auch wieder ne schöne anwendung von "wave function collapse" gesehen
06:41:55 xq: nicht sicher, ob ich den link gepostet habe
06:42:03 Schrompf: joeydee: keine sorge, ich komme eh zu nix lauffähigem
06:42:12 joeydee: ah, dann ist ja gut ;)
06:43:25 Schrompf: xq: ich erinnere mich an keinen link
06:43:44 Schrompf: ich hab immer übelst panik vor "wave function collapse" gehabt, weil das nach mathe und quanten und so klingt
06:44:06 xq: ist eigentlich nur wahrscheinlichkeiten mit constraints
06:44:32 xq: https://twitter.com/OskSta/status/1447483550257799171
06:44:37 Schrompf: aber es ist echt nur stumpf: setze ein steinchen an eine leere position, prüfe alle hinterlegten regeln, welche steinchen da sein dürfen, mach mit dem leeren nachbarn weiter
06:45:31 xq: muss ja nicht mal der nachbar sein
06:46:23 Schrompf: je nachdem, wie weit deine regeln greifen
06:47:18 xq: die grundidee ist tatsächlich, dass es völlig egal ist, welche tiles du observierst
06:47:26 xq: http://oskarstalberg.com/game/wave/wave.html
06:47:31 xq: das hier ist ne schöne livedemo
06:53:52 joeydee: wobei ich nicht verstehe wie "Steinchen und (lokale) Regeln" mit "Kollaps der Wellenfunktion" (was ja eher globale Zusammenhänge und Fernwirkung suggeriert) zusammengeht
06:54:07 xq: joeydee: guck dir mal die wave.html an
06:54:22 xq: und dreh den slider unten rechts auf "25% von links"
06:54:26 xq: dann drück "reset"
06:54:33 xq: und klick eine einzelne tile irgendwo an
06:54:50 xq: danach bekommst du nur noch eine auswahl von *möglichen* lösungen
06:55:03 xq: die fernwirkung entsteht dadurch:
06:55:13 xq: observiere ein elemente und aktualisiere alle tiles auf ihre möglichkeiten
06:55:27 Schrompf: observiere, joeydee!
06:57:19 xq: muss ich auch mal implementieren
06:57:32 xq: weil eigentlich ist der algorithmus echt sweet
06:57:45 joeydee: ich verstehe da nur Bahnhof.
06:58:19 xq: du hast für jede tile constraints
06:58:32 xq: zum beispiel "über boden muss luft sein, unter boden erdreich"
06:58:59 xq: der initialzustand ist: "alle tiles sind 33% boden, 33% erdreich, 33% luft"
06:59:20 xq: erdreich hat den constraints "unter erdreich kann nur erdreich sein"
06:59:26 xq: und luft "über luft kann nur luft sein"
06:59:28 xq: wenn du jetzt eine einzige tile auf "erdreich" observierst
06:59:51 xq: müssen alle darunter liegenden tiles auf "erdreich" fallen, weil die wahrscheinlichkeit, dass dort luft oder boden ist, gleich 0 ist
07:00:20 xq: nu, ich bin mal duschen
07:00:23 xq: https://robertheaton.com/2018/12/17/wavefunction-collapse-algorithm/
07:00:27 xq: hier isses erklärt
07:02:35 joeydee: "du hast für jede tile constraints" widerspricht irgendwie "needs almost no outside help or instruction", aber ich schau's mir mal näher an.
07:03:08 Schrompf: xq erklärt das irgendwie doof
07:03:11 Schrompf: finde ich. sorry
07:03:16 Schrompf: aber das beispiel ist gutg
07:03:29 Schrompf: du knallst ein random tile da hin, zum beispiel "wiese"
07:04:12 Schrompf: und dein regelsatz sagt: wenn drunter wiese ist, dann darf da nur "wiese" (für hohes gras), "blüten" oder "luft" sein
07:04:30 Schrompf: wenn du jetzt also das feld besetzen willst, dann gehst du all deine tiles durch
07:04:44 Schrompf: "erde"? geht nicht, darf nicht über "wiese" sein
07:04:49 Schrompf: "fels"? genauso nicht
07:05:09 Schrompf: "wiese"? ja, die darf, ab in die tüte kandidaten für dieses feld
07:05:19 Schrompf: "luft"? ja, die darf. auch ab in die tüte
07:05:38 IceMichael joined the channel
07:06:20 Schrompf: "wolke"? ne, das regelset sagt, dass "wolke" nur neben "luft" oder "wolke" kommen darf
07:06:29 IceMichael: hi
07:07:02 Schrompf: "IceMichael" darf zum Beispiel nur in Kanal #sppro oder #zfx auftauchen, aber in #linux wär invalid
07:07:24 IceMichael: Schrompf: huch, wieso das?
07:07:38 IceMichael: tatsaechlich hab ich gestern viel ueber ZNC + nginx mit den Leuten da gequatscht :)
07:07:57 Schrompf: so gehst du halt schritt für schritt jedes freie feld durch und erstellst anhand deines regelsets eine liste von tiles, die da auftauchen dürfen, und dann nimmst du eins davon und platzierst es
07:08:14 Schrompf: und damit ergeben sich weitere kandidaten für die benachbarten noch zu besetzenden felder
07:08:50 Schrompf: und so kannst du ausgehend von nem beliebigen startset einfach in jede richtung anlegen wie bei carcassonne und kriegst immer ne gültige landschaft nach deinem regelsatz
07:09:05 IceMichael: ohhh, carcassone
07:09:21 Schrompf: IceMichael, ich hab dich nur in meine erklärung von "wave function collapse" eingebaut, weil du gerade jointest
07:10:11 joeydee: Nach dem 2. Link von xq hab ich jetzt wenigstens eine Ahnung, was die "Wave Function" bzw. Superpositionen repräsentiert.
07:11:08 joeydee: Aber noch nicht verstanden wie "definierter Regelsatz" mit "You feed it an example of the vibe you’re going for, and it figures everything else out for itself" zuammengeht."
07:11:25 IceMichael: Schrompf: ich schaetze diesen spontanen Einbezug
07:12:05 joeydee: IceMichael: solange du nicht kollabierst, weil du nicht in #linux darfst, ist alles gut
07:12:50 IceMichael: joeydee: ich hab die Regel bereits verstossen
07:16:38 Schrompf: joeydee: ich glaube, das bezieht sich auf: du als mensch baust in nem editor ne testlandschaft, und der computer zieht sich die regeln "welche tiles dürfen neben welchen auftreten" aus dieser testlandschaft
07:16:43 Schrompf: anstatt dass du die regeln von hand codest
07:17:29 Schrompf: quasi der stochastische ansatz: häufung von tiles neben nem tile aus nem bestehenden datensatz ziehen, und dann diese häufungen auf leere felder neben tiles anwenden
07:17:53 joeydee: Ok, dann ist das der Knackpunkt und der Rest eigentlich nur Larifari mit High-Impact-Vokabeln.
07:18:04 Schrompf: exakt das hab ich auch erst heute begriffen
07:18:16 Schrompf: "wave function"... tsss. da schmückt sich jemand mit großen wörtern
07:18:47 joeydee: Dasselbe habe ich quasi vor xx Jahren mit einen Name-Generation-Algorithmus gemacht, der echte Texte schluckte und "ähnlich" klingende Wörter generierte.
07:18:58 Schrompf: cool :-)
07:21:34 Schrompf: ich glaube, jetzt hab ich auch verstanden, wie diese generativen neuronalen netzwerke funktionieren, die ein bestehendes muster fortsetzen können
07:21:47 Schrompf: diese textur-generatoren, die mal durch's netz gingen
07:23:36 xq: "wave function"... tsss. da schmückt sich jemand mit großen wörtern
07:23:43 joeydee: Neuros funktionieren aber anders, die haben Rückbezug und Trial & Error
07:23:49 xq: naja, der algorithmus ist eben von genau dieser idee aus der quantentheorie inspiriert
07:24:37 IceMichael: xq, du weisst wsl auch nicht ad-hoc, ob (und wenn ja wie) nginx reverse ssl (NON-https) fuer subdomains geht, oder?
07:24:57 IceMichael: hab gestern den ganzen Tag probiert den irc-Teil von znc ueber ne subdomain zu routen mit nginx reverse proxies, aber scheint wirklich nicht zu gehen
07:25:20 IceMichael: guten Morgen btw :)
07:26:08 joeydee: Schade dass das ZFX-Archiv nicht mehr existiert, hätte jetzt gern mal in dem Zusammenhang meinen alten Post betrachtet :(
07:26:22 Schrompf: narzist :)
07:26:33 Schrompf: WÄÄÄH, ER HAT MICH NARZI GENANNT!
07:26:48 xq: IceMichael: ja: nginx kaufen oder selbst compilieren
07:27:04 IceMichael: xq: hab es selbst compiled, und dann?
07:27:09 IceMichael: oder meinst du den source erweitern?
07:27:18 xq: du musst dinge aktivieren, wenn du es selbst compilierst
07:27:21 xq: und das war mir zu blöd
07:27:25 xq: und dann hab ich was anderes gemacht
07:27:31 IceMichael: hab ich sogar gemacht
07:27:37 IceMichael: dieses with-stream-ssl-preread
07:27:48 xq: da bin ich schon überfragt
07:27:54 IceMichael: okay
07:28:10 IceMichael: ja, das selbst compilen nervt tatsaechlich nur, das war zwar kaum Arbeit, aber die Extramodule... sind halt eher rotzig
07:28:52 IceMichael: ich glaub, Streams sind einfach nicht wirklich nginx' Staerke
07:29:16 xq: wichtig: die gegenseite muss auch SNI machen
07:29:17 IceMichael: frage mich ein wenig, ob man da nicht selbst was implementieren kann. SSL will man halt nicht selbst bauen, aber dafuer koennt man ja ne lib nehmen
07:29:19 xq: sonst haste in SSL keine domains
07:29:57 xq: ich versteh aber auch nicht, was du genau vor has
07:29:59 xq: *hast
07:30:00 IceMichael: hmmm, wie meinst das? ist das nicht nur ein Extracheck
07:30:07 xq: nein
07:30:12 IceMichael: na ja, ich will in meinem IRC-Client den Bouncer eingeben koennen mit SSL-Check
07:30:21 IceMichael: und zwar mit Subdomain
07:30:30 xq: das is alles erst mal wurst
07:30:38 xq: da brauchst du für nix nen reverse prox
07:30:40 xq: *proxy
07:30:43 xq: nur port forwarding
07:30:50 xq: SNI (server name indication) sagt bei einer ssl-verbindung, auf welche domain verbunden wird
07:31:04 xq: ohne das gibt es keine möglichkeit, rauszufinden, welche domain bei einer verbindung genutzt wurde
07:31:04 IceMichael: ja richtig, das wuerd mir sogar reichen, aber das allein geht mit nginx anscheinend halt schon nicht
07:31:11 xq: ja, wofür auch?
07:31:13 xq: das ist nen kernelfeature
07:31:29 xq: und SSL reverse proxy brauchst du nur, wenn du auf einer IP auf dem selben Port mehr als einen Service anbieten willst
07:31:34 IceMichael: subdomains sind doch kein Kernelfeature?
07:31:35 xq: das ist der einzige use case
07:31:44 xq: subdomains haben hier gar nix mit zu tun
07:32:04 IceMichael: hmm, was meinst mit mehr als einem service fuer einen port?
07:32:09 xq: oder willst du etwa IRC über port 433 sprechen?!
07:32:20 IceMichael: ach so, du meinst im IRC-Fall
07:32:29 xq: beispielsweise hast du da nen git- und ssh-server auf port 3333
07:32:41 xq: und "git.foo.de" soll auf den git-server gehen
07:32:45 xq: und "ssh.foo.de" auf SSH
07:33:06 xq: bin mal ne weile afk
07:33:12 xq: arzt, test, geld holen, arbeiten und so :D
07:33:19 IceMichael: du meinst outbound port fuer beides? dann versteh ich, was du meinst
07:33:38 IceMichael: ja ist schon richtig, mein use case ist eher sinnlos, weil man bei irc eh immer nen port angibt
07:33:52 IceMichael: oder wenn nicht, kann ich genau so gut den default port nutzen
07:34:06 IceMichael: alles klar, danke fuer die Infos und Gedanken :) hauste rein
07:56:26 joeydee: LOL, hab noch ein altes Javascript meines Wörter-Algos gefunden. War von 2004. Prinzip war: Ein vorgegebener String wurde analysiert und Regeln erstellt, dass z.B. nach einem "e" 5x ein "i" und 8x ein "n" auftaucht, aber nie ein "q". Danach wurde mit einem zufälligen Buchstaben begonnen und geschaut, welche Buchstaben mit welcher Wahrscheinlichkeit folgen dürfen usw. - also Kollaps der Wellenfunktion im 1D-Raum wenn man so will ;)
07:57:35 Schrompf: joa, genau so, soweit ich das verstanden habe
07:58:30 joeydee: cool, dann hab ich jetzt auch die Zusammenhänge verstanden, danke xq nochmal für den 2. Link.
08:03:24 joeydee: (Dem Wave-Namen nach hatte ich ursprünglich vermutet, da steckt so eine Fourier-Transe drin, wie JPG-Bildkompression, die dann nur mit ähnlichen Params "weitergedacht" wird, und daher immer die Finger von gelassen)
08:18:46 joeydee: Sudoku lösen ist dann ja quasi dasselbe, absolute Superposition wäre ein leeres Grid, vorgegebene Zahlen starten den Kollaps. Zum Lösen sucht man die Felder mit geringster Entropie und wendet darauf die Regeln an.
08:21:10 Schrompf: stimmt
08:21:12 Schrompf:
08:21:20 Schrompf: hab ich noch nie so betrachtet
08:21:37 Schrompf: gut, bis heute morgen dachte ich ja auch, wave function collapse wäre irgendne stochastische mathe-zauberei
08:22:23 Schrompf: und kein plumpes auswählen von kandidaten anhand von nachbarschaftsbeziehungen aus nem beispiel-datensatz
08:22:43 Schrompf: ey, komm zurück!
08:22:48 Schrompf: hier lauert weisheit!
08:23:03 IceMichaelGuest joined the channel
08:23:19 Schrompf: aber nur für geladene gäste
08:25:26 IceMichaelGuest: grml
08:25:48 IceMichaelGuest left the channel
08:31:17 IceMichael joined the channel
08:34:47 Schrompf: wb
08:35:01 Schrompf: du experimentierst noch mit deinem bouncer rum?
08:35:06 Schrompf: ist das wirklich so kompliziert?
08:36:53 IceMichael: ich bin halt jetzt weggegangen von "IRC ist auf ner subdomain", es liegt jetzt einfach auf nem port auf der TLD
08:37:03 IceMichael: lediglich der webadmin liegt jetzt auf ner TLS-geschuetzten subdomain
08:38:18 Schrompf: ähm... ja
08:38:26 Schrompf: ich guck immer in xqs log
08:49:10 IceMichael joined the channel
08:55:34 IceMichael: Schrompf: ja, aber ich bin auch noch auf Libera unterwegs
08:55:46 IceMichael: die haben da auch ein paar super Channel :) chess und arduino zB
08:56:08 IceMichael: und ich will irc halt auf laptop und gleichzeitig auf ipad nutzen
08:56:17 IceMichael: und das scheint jetzt auch endlich zu gehen
08:56:23 IceMichael: kein ssl dazwischen, aber jut
08:56:33 IceMichael: koennt ich natuerlich noch adden, aber spaeter
08:56:51 IceMichael: als naechstes muss ich mal die firewall bearbeiten...
09:17:20 xq: sodele
09:18:14 xq: joeydee: schöne anal-logie mit dem sudoku :)
09:18:46 xq: ich bin halt jetzt weggegangen von "IRC ist auf ner subdomain", es liegt jetzt einfach auf nem port auf der TLD
09:18:50 xq: liegt aufch auf der subdomain
09:18:55 xq: IRC doesn't care for domains
09:19:02 xq: außer deine subdomain zeigt woanders hin als die hauptdomain
09:19:10 IceMichael: xq, I know
09:19:35 xq: okay
09:19:39 xq: was du aber machen kannst:
09:19:59 xq: dein nginx-https-reverse-proxy leitet irc.icemichael.de auch auf ZNC weiter
09:20:05 xq: => du hast ne nette subdomain fürs admin interface
09:20:35 IceMichael: Ja, hab ich bereits
09:20:45 IceMichael: Das ist schon ganz nett
09:21:25 IceMichael: Fürs Auge wär halt IRC port nur für subdomain Open nice gewesen
09:21:36 xq: wie meinen?
09:21:48 IceMichael: Aber ich sehe ein, das ist gefummelt, wenn *.Domain.com auf denselben Server geht
09:22:13 IceMichael: Na irc.domain.com 6667 Open, ohne irc. Closed
09:23:47 IceMichael: Hm, wieso fandest ZNC im Docker eigentlich nicht gut? Sollte doch den Restserver im Falle von ZNC sicherheitsluecken schuetzen, oder?
09:26:00 xq: ja, aber: ZNC sollte sowieso nicht als root laufen
09:26:05 xq: started afaik auch nicht als solcher
09:26:09 xq: und warum kein docker:
09:26:24 xq: warum ZNC+OS, wenn ZNC ohne zusätzliches OS genauso einfach läuft?
09:26:30 xq: das hat ja keine komplexen dependencies
09:26:35 xq: und nur ein einziges configfile afaik
09:27:10 IceMichael: Na ja, falls es sich doch irgendwie privileges holt wegen nem bug oder ner misconfig meinerseits
09:28:55 xq: ja, dann bringt dir docker aber auch nur noch einen weiteren schritt
09:29:19 IceMichael: Ja, immerhin
09:30:09 xq: also, ich werd dich nicht abhalten
09:30:12 xq: aber ich finds nicht sonderlich sinnvoll
09:30:32 IceMichael: Gut, sehe ich ein
09:31:13 IceMichael: Docker läuft per default übrigens echt als Root :/
09:32:25 xq: ja
09:32:30 xq: und als user wird *richtig* hässlich
09:36:01 IceMichael: Ja und das ist auch das Hauptproblem, oder? Docker als root selbst sollte ja ok sein? Geht ja auch schlecht anders
09:37:42 IceMichael: Mal sehen ob ZNC container das bedacht hat :D
13:57:43 IceMichael: Und sonst so?
14:06:52 joeydee: ich mach jetzt Feierabend und guck mir dann evtl. nochmal den Kollaps an.
14:08:40 xq: sehr schön :)
14:16:33 xq: joeydee: ich hatte vorhin ne coole idee damit
14:16:53 IceMichael: was fuer nen Kollaps?
14:17:00 xq: "wave function collapse"
14:17:13 xq: ne idee/konzept/algorithmus zum prozeduralen erstellen von dingen
14:17:38 joeydee: "Vorgegebene Muster imitieren" sozusagen.
14:18:05 joeydee: welche Idee, xq?
14:19:59 xq: sekunde
14:21:25 xq: theoretisch müsste es mit der kollaps-geschichte möglich sein, wenn du folgendes machst
14:21:25 xq: https://mq32.de/public/4f362e03df52465abd47957da2bfda5cf806157f.png
14:21:33 xq: weiß ist "unobserved"
14:21:41 xq: grün wäre ein horizontaler weg
14:21:48 xq: braun einfach "erdboden"
14:22:07 xq: und du hast jetzt tiles für weg-kurve, weg gerade (horiz, vert), und boden
14:22:10 xq: aber kein ende
14:22:26 xq: müsste das ganze auf jeden fall so kollabieren, dass ein verbundener weg entsteht
14:22:32 xq: ansonsten wäre das ja ein illegaler zustand
14:24:14 joeydee: Von welchem Pattern würdest du lernen? Kreis wäre wahrscheinlich ein legaler Zustand, weiß nicht ob man das so ausschließen kann.
14:25:11 IceMichael: uh, das sieht aus, als koennte es nice werden
14:28:29 xq: joeydee: ja, kreis wäre legaler zustand, erfüllt aber nicht die constraints
14:28:35 xq: aber es könnten zusätzliche kreise entstehen
14:28:50 xq: ich weiß noch nicht, wie ich das mit den templates/constraints machen würde
14:28:55 xq: finde aber die idee mit vorlage-tilemap gut
14:30:05 joeydee: "erfüllt aber nicht die constraints" - du hast keine besonderen genannt. Wenn du eine Formulierung dafür findest, jo.
14:30:30 xq: joeydee: der weg links muss ja verbunden sein, es gibt kein weg-ende
14:30:34 xq: genauso der weg rechts
14:30:41 xq: also müssen irgendwie links und rechts miteinander verbunden werden
14:31:17 joeydee: probiers mal aus
14:31:32 joeydee: könnte gehen, mit einigen Versuchen
14:32:36 xq: theoretisch muss es immer klappen
14:32:45 xq: hab aber schon bock, das auch mal zu implementieren
14:32:59 xq: das coole ist, dass du damit auch relativ gut constraints für biome bekommst
14:47:44 joeydee: ja
14:49:00 joeydee: ist glaube ich auch spaßig, mal andere Graphen als Tilegrids zu besiedeln.
15:16:40 IceMichael: puh, mit iptables kann man ja echt viel kaputt machen :)
15:16:46 IceMichael: hab aber die basics jetzt kapiert, glaub ich
15:16:58 IceMichael: hab aber noch angst mich selbst aus dem server auszuschliessen :D
17:55:47 Schrompf joined the channel
18:00:18 Schrompf: Scheiss drecks fick discord mist
18:00:25 Schrompf: plötzlich besteht der auf einen account
18:00:30 Schrompf: und lässt sich nicht davon abbringen
18:00:33 Schrompf: fickscheiße
18:46:36 IceMichael: hm
18:46:46 IceMichael: Schrompf: was feuer discard?
20:09:01 Hannes joined the channel
20:10:13 Hannes joined the channel