IRC Logs for #lost


2021-02-19

08:24:32 XanClic joined the channel
08:29:41 kevin joined the channel
09:00:00 xq: moin moin
09:00:19 xq: kevin, wo finde ich denn doku zu den tyndur syscalls?
09:01:00 kevin: Moin
09:01:09 kevin: Use the source, Luke ;-)
09:02:01 xq: kernel2 nehme ich an?
09:02:09 kevin: Wobei, ich glaube, die libc-Wrapper um die Syscalls haben sogar Doxygen-Kommentare
09:02:50 kevin: Vielleicht tut "make documentation" ja sogar?
09:03:45 kevin: Ansonsten src/modules/lib/syscalls/
09:04:10 kevin: Hm, sind nur manche kommentiert
09:04:43 kevin: Bleibt noch die Hoffnung auf offensichtliche Parameternamen ;-)
09:05:11 xq: hrhr :D
09:05:27 xq: okay, wenn ich einfach nen hello world schreiben will, brauch ich lostio, oder?
09:05:34 kevin: Und die Implementierungen, wenn du sie brauchst, sind in src/kernel/src/syscalls/ (kernel2 gibt es ja nicht mehr nachdem Tufel kernel1 gelöscht und kernel2 umbenannt hat)
09:06:03 xq: ah
09:06:22 kevin: Ja, LostIO ist für alles mit Dateien und stdout ist eine Datei
09:07:05 xq: oho
09:07:10 xq: Plan9-Stil ? :D
09:07:32 kevin: Eher klassisch Unix?
09:07:50 xq: naja, stdout ist ja da eher nur ein FD
09:07:53 xq: der existiert hal :D
09:08:00 kevin: Jo, das meine ich
09:08:06 kevin: Also es ist ein lio_stream_t, was im wesentlichen ein FD ist
09:08:08 xq: ah
09:09:08 kevin: Vermutlich willst du auch ein bisschen von src/modules/lib/crt0.c bzw. den dort aufgerufenen Funktionen abschreiben
09:10:02 xq: ah, das initialisiert ein programm?
09:10:28 kevin: Jo, _start ist ein dünner Wrapper um c_start()
09:10:37 kevin: Und das ist dort drin
09:11:33 kevin: Ach, _start sogar auch, in einem Inline-Assembler-Block
09:11:42 xq: jo, habs gesehen
09:12:03 xq: "Make" tut sogar was :O
09:12:14 kevin: Sachen gibt's
09:13:06 xq: scheint durchzubauen :D
09:13:53 xq: ah, das initialisiert ein programm?
09:13:53 xq: Jo, _start ist ein dünner Wrapper um c_start()
09:13:53 xq: Und das ist dort drin
09:13:53 xq: Ach, _start sogar auch, in einem Inline-Assembler-Block
09:13:57 xq: ups
09:13:58 xq: #define stdin stdin
09:14:02 xq: /* C89/C99 say they're macros. Make them happy. */
09:14:03 xq: #define stdin stdin
09:14:04 xq: so, nu
09:14:05 xq: lol
09:14:26 kevin: *g*
09:29:35 xq: das sieht ja alles wild aus :D
09:30:37 xq: destroy_process ist noreturn, oder?
09:44:19 xq: ah, tufel ist gleich da
09:45:41 tufel joined the channel
09:46:18 xq: moin tufel o/
09:46:31 kevin: Huch, wo hast du das denn gesehen?
09:46:32 kevin: Moin
09:48:21 kevin: Und ja, sieht ziemlich noreturn aus
09:50:17 tufel: Huhu
09:51:13 xq: der kommentar ist aus den gnuheadern
09:52:42 xq: was macht denn "0" (result)' in inline assembler?
09:58:14 kevin: War das das, wenn ein Parameter als Input und als Output vorkommt?
09:58:40 kevin: Hm, sieht nicht so aus
09:59:06 xq: jo
09:59:11 xq: Input constraints can also be digits (for example, "0"). This indicates that the specified input must be in the same place as the output constraint at the (zero-based) index in the output constraint list. When using asmSymbolicName syntax for the output operands, you may use these names (enclosed in brackets ‘[]’) instead of digits.
09:59:47 xq: aber warum wird "a" als input genutzt?
09:59:53 xq: das ist die result value :D
10:01:58 kevin: Bei welchem Syscall bist du denn grad?
10:02:18 xq: FASTRPC und RPC
10:02:23 kevin: Ah
10:03:01 xq: die list sind
10:03:01 xq: : "=a" (result)
10:03:01 xq: : "i" (SYSCALL_FASTRPC), "g" (pid), "i" (0x8), "g" (metadata), "g" (len), "g" (data), "0" (result)
10:03:03 kevin: Ach so, ich glaube, jetzt verstehe ich das wieder
10:03:23 xq: result ist im loop 1 = 0, danach isses die errno
10:03:40 kevin: Das "=a" legt halt fest, dass das über eax laufen muss, und das "0" referenziert dann Parameter Nummer 0 (also eax)
10:03:55 kevin: Wenn man nochmal "a" sagt, gibt das einen Compilerfehler, wenn ich mich nicht täusche
10:03:59 xq: ah
10:04:06 xq: aber: wieso will ich den error in eax reingeben?
10:05:00 kevin: Du willst ihn aus eax rausholen, oder?
10:05:15 xq: jo
10:05:32 xq: : [result] "=eax" (-> i32)
10:05:37 xq: wäre mein output
10:05:45 xq: und als input lass ich den output einfach weg?
10:06:38 kevin: Ach so, ja, hä? *g*
10:06:47 xq: ^^
10:06:55 xq: genau das.
10:07:03 xq: der packt irgendwie den result schon als eax in den input
10:07:07 xq: das macht aber überhaupt keinen sinn
10:07:20 xq: vorallem, weil EAX ja auch gesetzt wird *facepalm*
10:09:01 kevin: Ich könnte mir höchstens vorstellen, dass das irgendein Workaround war, dass gcc nichts kaputtoptimiert
10:10:07 xq: ah
10:10:44 xq: na ich bin jetzt mal auf den disassembly-output gespannt
10:11:11 kevin: Also _eigentlich_ sollte das wegkönnen
10:11:17 xq: okay
10:11:27 xq: init_process_exit memory-leaked :D
10:11:32 xq: ist das gewollt?
10:11:39 xq: also, es macht nen malloc(13)
10:11:49 xq: und gibt das nicht wieder frei
10:12:00 xq: muss der speicher für sendMessage länger leben als sendMessage braucht?
10:12:53 kevin: Ne, der Syscall kopiert das
10:13:06 kevin: Und puh, git blame sagt Toni war's ;-)
10:13:13 xq: hehe
10:13:24 xq: okay, dann kann ich das in meiner lokalen var lassen *freu*
10:15:37 kevin: Aber nebenbei: Verlass dich übrigens nicht zu sehr auf meine Aussagen, das ist alles schon ein paar Jahre her ;-)
10:16:42 xq: jo, denk ich mir
10:16:51 xq: wie kann ich in tyndur den process result sehen?
10:18:35 tufel: Mh die lib/syscall-Dateien funktionieren alle nur mit i386 oder?
10:19:19 xq: sieht so aus, ja
10:20:04 tufel: Mh warum hat man da eigentlich nicht eine zentrale Funktion gebastelt, über die ein syscall aufgerufen werden kann?
10:20:45 xq: die syscalls sehen mir nach normaler cdecl-callconv aus, oder?
10:21:38 tufel: Joar, glaub schon
10:21:56 tufel: Zumindest säubert immer der Aufrufer der stack
10:23:40 kevin: xq: Außer wenn nicht
10:23:48 kevin: Siehe syscall_arch()
10:24:00 xq: https://mq32.de/public/e583ad52ddd4ac379ee188959b273a8e1364faec.png
10:24:01 xq: lol :D
10:24:07 xq: ich hab tyndur gekillt
10:24:13 kevin: Das ist nicht schwer ;-)
10:24:32 xq: true
10:24:34 kevin: Hm, killt das nicht nur wget?
10:24:40 kevin: Sind alles Userspace-Adressen
10:25:17 xq: keine ahnung :D
10:25:29 xq: wie kann ich meine aktuelle ip sehen?
10:25:57 kevin: Ich wusste übrigens auch nicht, dass es ein "Neues Syscall-Interface" gibt, das auskommentiert ist
10:26:05 kevin: Irgendwo in tcpip:/ in einer Datei
10:27:59 xq: hm
10:29:18 kevin: cat tcpip:/e1000/0/ip
10:29:34 kevin: Oder halt je nach Treiber
10:32:04 xq: okay, top
10:32:07 xq: wie kill nen ich prozess? :D
10:32:20 kevin: kill?
10:32:32 xq: nen foreground in der shell (wie mein hängendes wget)
10:32:47 kevin: Zweite Shell nehmen ;-)
10:32:51 xq: wie komm ich da hin?
10:32:54 kevin: Alt-F2?
10:33:01 xq: oho!
10:33:44 kevin: Aber Strg-C oder sowas wäre auch mal ein Feature
10:35:12 xq: qemu standard-netzwerk, was ist meine host-ip? :D
10:38:06 kevin: Standard-Netzwerk in QEMU ist NAT mit einem virtuellen Router an 10.0.2.2 und dahinter liegt dein physisches Netzwerk
10:38:11 kevin: Also vermutlich deine echte IP
10:38:38 xq: thx <3
10:38:44 xq: 10.0.2.2 wars
10:39:09 tufel: Wie kann ich eigentlich tyndur herunterfahren? :D
10:39:21 kevin: qemu zumachen *g*
10:39:38 xq: kek
10:39:41 kevin: Wenn du besonders ordentlich sein willst, kannst du vorher noch ein sync machen
10:39:46 xq: strftime ERROR -1: Malformed status line
10:39:54 kevin: ICh weiß aber nicht, ob sync im Moment wirklich was tut
10:40:24 xq: das wget tut nicht :(
10:40:34 kevin: Hm, das hat aber mal getan :-(
10:40:36 xq: kann ich einfach stuff mit tcpdump übertragen?
10:40:44 xq: ähhh
10:40:46 xq: netcat
10:41:05 kevin: Öhm, ja, schon, aber frag mich nicht, wie das ging...
10:41:17 xq: tcpip://tcp-connect/?
10:41:44 tufel: Also das Herunterfahren find ich ein wenig unbefriedigend gelöst. Dann müsste ja der Benutzer immer den Stecker von seinem Rechner ziehen :P
10:41:54 kevin: Vermutlich, aber wie weiter? Vielleicht tcp-connect/hostname/port oder so?
10:43:32 xq: pipe tcpip:/192.168.1.1:1234
10:43:35 xq: wiki hilft :D
10:43:58 kevin: Ah
10:44:09 kevin: Und wenn du was kopieren willst, vermutlich cp statt pipe
10:44:35 kevin: tufel: Also mein Rechner hat einen Knopf
10:46:15 kevin: Ah, tcp-conn ist für Server, nicht für Clients
10:47:36 tufel: Hehe joar Knopf drücken wäre natürlich auch eine Lösung :D
10:47:43 xq: cp tut nicht :(
10:49:26 xq: oder doch, tat
10:49:34 xq: witzig
10:49:38 xq: hard crash
10:53:09 xq: sollte ggf. den RPC-handler installieren, oder?
10:56:08 kevin: Bist du jetzt bei deiner Binary oder noch beim Kopieren?
10:56:20 kevin: RPC-Handler installieren klingt prinzipiell nützlich
10:57:35 xq: meine binary
10:57:44 xq: wenn ich sie starte, ist das system resettet :D
10:59:50 kevin: As in triple fault?
11:00:04 xq: //if (my_pid == 7) printf("%8s\n\n", data + 8);
11:00:10 xq: scheint so, ja
11:00:15 kevin: Das ist ja schade
11:02:11 xq: kann ich shell-scripte machen?
11:02:52 xq: oh sweet, nano
11:04:07 kevin: Jo, kannst du
11:04:15 kevin: Die Shellsprache ist halt nicht arg mächtig
11:04:40 kevin: *lol* Will ich in meiner Linux-VM die Pakete für "Kopfloses Management" installieren?
11:04:58 xq: haha
11:05:04 kevin: Das war wohl ein kopfloser Übersetzer *g*
11:13:33 xq: yep
11:13:35 xq: okay, mist
11:13:43 xq: da gibs assembler-code von kwolf
11:13:47 xq: wer issn das? *lach
11:17:25 xq: ich glaub ich probier erst mal syscall_putsn
11:22:32 kevin: kwolf? Wer soll das sein?
11:33:29 xq: hm
11:33:33 xq: irgendwas tut noch ganz und gar nicht :D
11:34:48 kevin: Crasht immer noch?
11:34:51 xq: yep
11:35:14 xq: ich hab grade als programm puts("Hello, World!\r\n"); while(true);
11:35:28 xq: das sollte ja *irgendwas* tun
11:35:42 kevin: Das libc-puts oder direkt der Syscall?
11:36:22 xq: direkt der syscall
11:36:29 xq: oder landet der aufm serial out?
11:36:30 tufel: Ich bin mal für eine Weile afk
11:36:53 kevin: Würde man erwarten, dass das tut, ja
11:37:04 kevin: Serielle Konsole ranhängen schadet nicht, da kommt er auf jeden Fall raus
11:37:17 kevin: Auf dem Terminal sollte es zwar auch, aber kann sein, dass es da gleich wieder überschrieben wird
11:37:42 kevin: Weil der Kernel ja keine Ahnung hat, was das Textterminal eigentlich gerade macht
11:41:48 xq: tyndur setzt mir nen korrekten ESP?
11:46:02 kevin: Ich denk schon
11:46:34 kevin: Korrekt heißt sowas wie 0xfffffff8
11:46:54 kevin: Also crt0.c fängt direkt mit push an ohne vorher %esp zu ändern
11:47:37 xq: https://pastebin.com/6cPkV5aK
11:47:47 xq: das ist mein aktuelles programm
11:49:49 kevin: Und wie sieht der Crash aus?
11:50:27 xq: in dem fall: friert ein
11:52:52 kevin: Einfrieren ist ja ok bei einer Endlosschleife, oder? Fehlt also nur die Ausgabe?
11:53:26 xq: jo
11:53:41 xq: kann nur die shell auch nicht mehr wechseln
11:53:55 kevin: Ah, hm
11:54:18 kevin: info registers sagt, er ist im Kernel oder im Userspace?
11:59:12 xq: mal was anderes: wie bring ich qemu bei, immer tabs anzuzeigen?
12:07:48 kevin: Gute Frage, benutze ich nie
12:08:14 kevin: Du kennst Strg-Alt-1/2, falls es dir ums Wechseln zwischen VM und Monitor geht?
12:08:25 xq: nope :D
12:08:33 kevin: Ja, dann ist das das, was du benutzen willst ;-)
12:10:21 xq: jo, aber davon abgesehen
12:10:26 xq: es passiert nüscht :D
12:12:53 xq: muss ich heute abend mal nachforschen
12:12:54 xq: nu: arbeit
12:13:18 kevin: Überbewertet ;-)
12:14:57 xq: heh
12:15:51 tufel joined the channel
12:18:53 xq: wb tufel
12:19:03 tufel: Huhu
12:23:17 xq: wie ist das? die module (fat, kbc, ...) sind statische executables?
12:24:47 kevin: Jo
12:25:24 xq: oh
12:25:30 xq: ich hab ne idee, warum das so kaputt ist
12:25:41 xq: sind module normale programme oder irgendwie special?
12:26:55 xq: https://pastebin.com/rqkxhb59
12:27:03 xq: der entrypoint ist auffällig unterschiedlich :D
12:34:36 xq: AHA
12:36:57 xq: so
12:37:05 xq: "Hello, World!" steht auf der Konsole
12:53:43 xq: https://mq32.de/public/adde817936d60527bf0f41f09df587a269c3491b.png
12:53:44 xq: \o/
13:04:30 xq: kevin: okay, mein prozess macht zwar PM_EXIT_PROCESS, aber beendet sich nicht
13:18:34 kevin: Ah, Entrypoint im Kernelspace ist natürlich nicht so geschickt gewesen
13:18:49 kevin: Vielleicht sollte man sowas mal checken *g*
13:19:49 kevin: Ich glaube, dein Prozess ist weg, aber die Shell merkt das nicht, weil die da einen RPC erwartet
13:21:00 kevin: _exit() schickt da ein CHL_EXIT
13:23:43 xq: ah
13:27:19 kevin: Sollte natürlich eigentlich der Kernel machen, aber...
13:29:48 xq: "generelle kaputtheit"
13:33:09 xq: get_parent_pid(0) => 0
13:33:13 xq: klingt nicht richtig, oder?
13:34:55 kevin: Klingt eher nicht so richtig, ja
13:41:25 xq: 0x30303030
13:41:28 xq: kling spanisch
13:54:11 kevin: Immerhin interessanter als 0
13:54:34 XanClic: klingt schon irgendwie nach 0
13:56:52 kevin: Was für eine Art von 0 denn?
13:57:51 XanClic: Die ASCII-Art
13:59:41 kevin: Ah, stimmt
13:59:55 kevin: Und mir ist gerade zum ersten Mal bewusst geworden, dass ASCII-Art mehr als eine Bedeutung hat *g*
14:00:07 XanClic: Hm :)
15:10:59 tufel: Hab jetzt mal das Pong-Spiel repariert.
15:12:43 tufel: kevin: hat eigentlich bei meinem Commit von gestern alles gepasst?
15:13:44 kevin: tufel: MNemo hat dir doch auf die Mail geantwortet, und ich dann auch nochmal nachdem ich mir den Patch testweise applied habe statt nur die Mail zu lesen
15:17:47 tufel: Ops tatsächlich. Aber warum hab ich die Mails nicht bekommen :(
15:18:06 tufel: Ich versuch mal neu zu abonnieren.
15:48:00 tufel: Ich geh jetzt mal für eine weile afk. Bis später
16:10:00 LittleFox joined the channel
16:16:01 xq: ich muss mir das pong wohl mal angucken
16:16:13 xq: das ist ja ne gute grundlage für den UI-Rewrite
16:16:44 kevin: Du meinst, von dort klaut es sich einfach als von SDL? ;-)
16:18:14 xq: j :D
16:18:17 xq: *jo
17:28:01 xq: sodele
17:31:32 kevin: Huch? xq sagt "sodele" und XanClic geht? Einmal das falsche Fenster erwischt? ;-)
17:32:09 xq: nene, ich bin wieder da
17:32:11 xq: :D
17:32:41 xq: kann ich sowas wie strace machen?
17:33:16 kevin: Ja, machen kannst du das, fände ich nützlich :-P
17:33:34 xq: kek
17:33:44 kevin: Man kann den Kernel alle Syscalls ausgeben lassen, aber ich glaube, nicht auf einen Prozess beschränkt
17:33:56 xq: ah dang
17:34:15 xq: wie funktioniert das mit den dateipfaden?
17:34:28 xq: also, tcpip:/ ?
17:34:34 xq: wie finde ich raus, welche es da gibt?
17:37:08 tufel joined the channel
17:39:33 kevin: Die normalen halt indem du das Verzeichnis anschaust
17:39:58 kevin: Die besonderen durch Code lesen. tcpip:/ hat ja Dateien, die es erst erstellt, wenn du versuchst, sie zu öffnen
17:40:13 kevin: Also die für Verbindungen und so
17:40:49 xq: jo
17:40:55 xq: das find ich ziemlich sweet
17:41:09 xq: funktioniert so jeglicher netzwerk-foo? oder gibts sowas wie berkely-sockets?
17:43:00 kevin: Die libc implementiert BSD-Sockets teilweise, aber die machen dann intern auch nichts anderes
17:43:19 xq: okay. also für tcpip einfach random files auf tcpip:/ öffnen
17:43:21 xq: nice :D
17:43:29 kevin: Jo, das ist das native Interface
17:43:44 xq: sollte man ja dann auch nutzen, oder? :)
17:43:52 kevin: Vermutlich leicht suboptimal, weil man immer mit Strings arbeitet, aber dafür ist es mal was anderes ;-)
17:43:58 xq: joa
17:44:06 xq: jetzt mal rausfinden, warum get_parent_pid nicht klappt
17:44:14 xq: irgendwelche userechte gibts nicht, oder?
17:44:22 xq: alle dateien sind ausführ, les und schreibbar?
17:44:25 kevin: Jo
17:44:49 xq: wunderbar
17:45:01 xq: braucht man imho in nem hobby-os auch nich
17:49:29 kevin: Hat zumindest nicht die höchste Prio
17:49:55 kevin: Wenn es mal funktioniert, kann man das Funktionieren immer noch einschränken
17:53:01 xq: jop
17:57:23 xq: ah
17:57:28 xq: inline assembler will gelernt sein
18:01:13 xq: kaumt macht mans richtig, gehts
18:05:01 kevin: Hast du nach was ganz anderem gefragt?
18:05:07 xq: nein
18:05:14 xq: "=eax" ist nicht "={eax}"
18:05:15 xq: :(
18:05:30 xq: aber beides compiliert, wenn man SSE anhat
18:05:45 xq: wenn man SSE ausmacht,s tellst du fest, dass das ergebnis nicht in ein SSE-Register geschrieben werden kann *rofl*
18:06:26 xq: aber: cp tcpip:/10.0.2.2:9090 demo ist godlike useful :D
18:06:35 xq: *rofl
18:06:45 xq: cp tcpip:/10.0.2.2:9090 tcpip:/10.0.2.2:9080
18:06:53 xq: how to relay with tyndur :D
18:06:57 kevin: *g*
18:07:03 xq: konnte man das nicht auch noch irgendwie nesten?
18:07:11 xq: so "raw device → file system → ???"
18:07:48 kevin: Du meinst tcpip:/10.0.2.2:9090|ext2:/some_file tcpip:/10.0.2.2:9080 oder sowas?
18:07:57 xq: jop
18:08:10 kevin: Um eine Datei aus einem Image rauszukopieren und einzeln hochzuladen
18:08:21 xq: ich seh grade
18:08:25 xq: wer braucht curl, wenn er tar hat?! :D
18:08:26 kevin: Ne, ich glaube, das tut nicht, weil tcpip ist ja nicht seekable
18:08:34 xq: jo, aber sowas wie tar müsste klappen
18:08:47 kevin: Alles, was sequentiell arbeiten kann, ja
18:08:57 kevin: Aber ein Dateisystem arbeitet per Definition nicht sequentiell
18:09:04 xq: jop
18:09:08 kevin: Dahe schwierig mit nesten
18:09:11 xq: was, es gibt kein tar?! :D
18:09:13 xq: schweinere!
18:09:52 kevin: Hm, lpt install blubb.tar oder so ähnlich tut es nicht? *g*
18:10:04 xq: hm
18:10:16 xq: lpt install tcpip:/10.0.2.2:9090
18:10:16 xq: :D
18:10:21 xq: wenn das geht, feier ich das hart
18:10:43 kevin: Hm. Ich will das nichtmal auschließen, dass das tut.
18:10:53 kevin: Aber ich glaub nicht
18:11:29 xq: schade :D
18:11:32 xq: habs probiert :D
18:11:37 xq: ja gut, muss halt CP her
18:15:29 kevin: Kannst dir ja ein Skript schreiben, dass cp nach tmp:/ und danach lpt install von dort macht
18:16:44 xq: jo
18:17:04 kevin: Wobei du dann eigentlich auch gleich ein richtiges lpt-Repo auf dem Host haben kannst, falls du einen Webserver zur Hand hast
18:18:56 xq: lpt install scheint von nem server zu installieren
18:19:01 xq: jo, klar
18:19:04 xq: wie sieht das aus?
18:20:03 kevin: Halt deine Tarballs in einem Verzeichnis und dann noch eine Indexdatei, wo die Metadaten für alle Pakete gelistet sind. Da gab es irgendwo ein Skript, um das aus den Tarballs zu extrahieren.
18:20:28 kevin: build/scripts/lpt_index.sh müsste das sein
18:21:22 xq: ah, mal später reingucken
18:21:29 kevin: Und dann die URL in file:/config/lpt/pkgsrc eintragen
18:21:39 xq: ich hab auf jeden Fall bock, mit Zig das UI-Ding neu zu hacken (und zwar kompatibel zum vorgänger *grin*)
18:21:52 kevin: Ganz wichtig, diese Kompatibilität *g*
18:22:25 xq: naja, die API ist schon okayish
18:22:30 xq: ich hab noch ein paar pläne
18:22:39 xq: idee wäre, nen "tabbed window manager" zu haben
18:22:40 xq: erst mal
18:22:50 kevin: "okayish" geht ja gar nicht. Wir brauchen schon richtig kaputt. ;-)
18:22:52 xq: also keine resizable fenster, sondern alles fullscreen und man kann immer zwischen anwendungen wechseln
18:23:11 kevin: Jo, wäre ein Anfang
18:23:19 xq: grade hab ich überlappende fenster
18:23:21 xq: ist auch cool
18:23:22 xq: :D
18:25:14 xq: aber: lbuilds müssen erst mal warten, ich muss die bude aufräumen :D
18:25:18 xq: danach kann man wieder spaß haben
18:57:34 Tufel joined the channel
22:52:33 Paddy joined the channel