🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). Log available at irclogs.raku.org/raku/live.html . If you're a beginner, you can also check out the #raku-beginner channel!
Set by lizmat on 6 September 2022.
00:00 reportable6 left 00:02 reportable6 joined 00:04 andydude left 00:30 whatnext joined 01:01 whatnext left, andydude joined
japhb tbrowder__: So I went and ran it with Rakudo 2023.06, and everything seems to work *except* that .raku/EVAL seems to just go walking off into the weeds. Comment that "codec" out of the list, and it runs to completion just fine. 01:05
Which is ... embarassing, really.
More testing: it's not .raku, it's EVAL that's going off the rails. 01:39
tbrowder__ ok, readme works for me, thanks 01:40
japhb Yup, .raku is even competitive for several of the tests. Now to figure out if there are particular tests that EVAL falls over on .... 01:44
tbrowder__: Ah good.
antononcube Damn! I was just about a list a few of my tests of my code-of-conduct adherence classifier... 01:47
01:48 pony joined
japhb Well that seems suboptimal: "Bytecode validation error at offset 54, instruction 9: register operand index 54 out of range 0..3" 01:57
OK, so it seems EVAL has trouble with the JSON-structured data test and the buf8 test. 02:00
antononcube "[...] Sawyer X's talk should be obligatory viewing for everyone. [...]" -- I agree with @gfldex the talk is somewhat boring. I watched it in full, but with 1.25 playback speed-up. 02:10
pony talk about what?
antononcube @pony The talk was linked / posted above by @guifa. See youtu.be/Q1H9yKf8BI0 . 02:11
pony thanks, I just joined the channel so I couldn't see it
antononcube Well, it is not a fun topic. Talk's title is "No One is Immune to Abuse". 02:12
pony still, an important one 02:13
antononcube @pony Hmm... it seems I have heard or seen that kind of "preaching" before. Important or not, it is somewhat boring. 02:15
pony ok
02:16 razetime joined
antononcube @pony Damn! I thought you would argue!! 02:17
pony hehe
02:21 squashable6 left 02:24 squashable6 joined
antononcube I know how to make that talk interesting -- I can make a Raku script that 1) gets the transcript from the video, 2) gets a moderation score for each deemed offensive statement. 02:26
03:24 evalable6 left, linkable6 left 03:26 linkable6 joined, evalable6 joined 03:37 andinus joined 03:47 razetime left 04:36 razetime joined 04:42 razetime left 05:42 evalable6 left, quotable6 left, reportable6 left, linkable6 left, shareable6 left, coverable6 left, greppable6 left, bisectable6 left, squashable6 left, benchable6 left, tellable6 left, bloatable6 left, nativecallable6 left, sourceable6 left, statisfiable6 left, releasable6 left, unicodable6 left, notable6 left, committable6 left, benchable6 joined, releasable6 joined, committable6 joined, greppable6 joined, statisfiable6 joined 05:43 tellable6 joined, bloatable6 joined, coverable6 joined, notable6 joined, unicodable6 joined 05:44 squashable6 joined, sourceable6 joined, linkable6 joined, shareable6 joined, reportable6 joined, bisectable6 joined, quotable6 joined 05:45 nativecallable6 joined, evalable6 joined 06:00 reportable6 left, reportable6 joined 06:12 siavash joined 07:12 committable6 left, tellable6 left, greppable6 left, notable6 left, unicodable6 left, statisfiable6 left, evalable6 left, releasable6 left, reportable6 left, nativecallable6 left, quotable6 left, bloatable6 left, linkable6 left, benchable6 left, bisectable6 left, shareable6 left, coverable6 left, sourceable6 left, squashable6 left, greppable6 joined 07:13 shareable6 joined, squashable6 joined, unicodable6 joined, nativecallable6 joined, statisfiable6 joined, evalable6 joined, sourceable6 joined, bloatable6 joined, andydude left, coverable6 joined, linkable6 joined 07:14 notable6 joined, quotable6 joined, reportable6 joined, bisectable6 joined, tellable6 joined 07:15 benchable6 joined, releasable6 joined, committable6 joined 07:36 euandreh left 07:57 euandreh joined 08:12 jpn joined 08:29 sena_kun joined 08:47 ab5tract joined 08:50 jpn left 08:53 jpn joined 09:06 jpn left
nemokosch 🤣 09:12
I see there's another video about Rust 09:17
antononcube Yeah, Rust for some reason is referred to a lot in that Perl/Raku conference … 09:29
Yeah, Rust for some reason is referred to a lot in that Perl/Raku conference … 09:30
nemokosch I can kind of see why but I don't think there's a lot to be adopted 09:40
10:01 jpn joined, Sgeo left 10:06 jpn left 10:56 jpn joined 11:03 rf left, rf joined 11:10 jpn left
antononcube Can you briefly explain? 11:33
Or should I ask ChatGPT / PaLM… 11:34
11:59 siavash left, squashable6 left 12:00 reportable6 left 12:02 squashable6 joined, reportable6 joined 12:10 rf left
Well, the LLM answers are too generic… 12:30
12:31 squashable6 left 12:33 squashable6 joined 12:43 jpn joined
guifa I only think Rust+Raku could be a potent combination. The guy who talks about Rust and Go at these conferences is a long time Perlmonger. 12:45
antononcube @guifa It seems you want to be in Steve Roe’s camp. 12:56
@guifa BTW, I am watching your “slangs & DSLs” presentation right now. I am still at the warm-up part (~17 min mark.) 12:58
13:03 jpn left
Xliff \o 13:04
How does dispatch usually handle type resolution?>
How would these be ordered --> sub ($a) { ... } / sub (Int $a) { ... } / sub (Str() $a) { ... } 13:05
lizmat the "constraint" on sub ($a) and sub (Str() $a) is the same, so that feels like ambigupus 13:07
Xliff Hrm... 13:08
lizmat m: multi a($a) { dd }; multi a(Str() $a) { dd }; a 42
camelia Ambiguous call to 'a(Int)'; these signatures all match:
($a)
(Str(Any) $a)
in block <unit> at <tmp> line 1
lizmat yup
Xliff Ok. So omit the coercion for now.
lizmat well, it first tries all candidates in a trial-bind, and if there's one candidate left, it calls that candidate 13:09
if there's more than one, you get the above error
m: multi a(Int $a) { dd }; multi a(Str $a) { dd }; a now 13:10
camelia Cannot resolve caller a(Instant:D); none of these signatures matches:
(Int $a)
(Str $a)
in block <unit> at <tmp> line 1
Xliff I thought dispatch did some ordeirng and then did the trial bind
lizmat and if there is none, you get ^^
possibly, but that would be an optimization, I guess... I mean, if the number of positionals differ, there is no point trying to do a trial-bind
Xliff m: multi a (Int $a) { dd }; multi a (Str $a) { dd }; multi a ($a) { } 13:11
camelia ( no output )
Xliff m: multi a (Int $a) { dd }; multi a (Str $a) { dd }; multi a ($a) { }
camelia ( no output )
Xliff m: multi a (Int $a) { dd }; multi a (Str $a) { dd }; multi a ($a) { 'non }
camelia ===SORRY!=== Error while compiling <tmp>
Unable to parse expression in single quotes; couldn't find final "'" (corresponding starter was at line 1)
at <tmp>:1
------> a (Str $a) { dd }; multi a ($a) { 'non }⏏<EOL>
expecting …
Xliff m: multi a (Int $a) { dd }; multi a (Str $a) { dd }; multi a ($a) { 'non' }; a(1).say
camelia sub a(Int $a)
Nil
Xliff So why didn't it conflict with (Int $a) and ($a)?
guifa antononcube: that one is more of a historical type thing than anything else. Not much on the technical level.
codesections had a good Q, basically, "why bother with inline since that might make display in editors difficult" 13:12
Xliff lizmat: Is it that it only trial-binds on typed signatures first then uses untyped next?
guifa of course afterwards I realized the correct answer is, "good languages don't need syntax highlight" (Larry, paraphrased)
Xliff At any rate... been up all night. Must go *boom*.... or is it *poof*. 13:14
Xliff away Insomnia is BAD...mmmm'kay?
lizmat hmmm... I guess after the trial bind there's another elimination process 13:15
would really have to look at the binding code in the bootstrap for that
Xliff Thanks, lizmat. 13:16
lizmat jnthn would have that more in his head, as they wrote most of that
antononcube @guifa I might write extensive LLM-powered criticism later...
guifa I was happy this year though that all three of my talks followed a theme 13:17
antononcube It is not trivial to prepare 3 talks!
guifa . o O ( as evidenced by my typos and one major missing slide in one of the talks haha ) 13:19
antononcube It happens -- my talks are much messier. Usually, my presentations are fairly non-linear -- I meaning scroll back and forth a lot -- so, typos and other problems are hard to spot. 13:21
@guifa Also, if you really like using formulas from articles / books you should consider switching to Mathematica. 🙂 13:26
guifa oh joy, I have a huge typo in one of my talks hahahahahahahhaha, this is what I get from making a slide from memory and not from test 13:27
m: my &foo = m/blah/;
camelia Use of uninitialized value of type Any in string context.
Methods .^name, .raku, .gist, or .say can be used to stringify it to something meaningful.
in block <unit> at <tmp> line 1
guifa ooooooops
shit
f*** 13:28
I wonder if I can quickly sneak in better slides
13:29 ab5tract left
antononcube @guifa Well, you can have a GitHub repository for your presentations where you can refine their content at will. 13:30
guifa yeah. But it's for the lightning talk, you'd think I'd get that right 13:31
antononcube @gufia Lightning talks are the easiest to get wrong. They are "just advertisements" anyway. 13:34
13:39 xinming_ left
guifa That's basically all I did, advertising Polyglot::Regexen 13:40
13:41 xinming_ joined
antononcube @guifa As for the Roman numbers -- I was recently (this week) looking for Roman numbers grammars / parsers in order do deal with LLM outputs. 13:44
So, I so that Roman number slang. (Did not use it.)
13:50 jpn joined
guifa is afk 13:55
13:57 jpn left 14:09 jpn joined 14:12 perlbot left, simcop2387 left 14:14 jpn left
tbrowder__ it was long, and i haven't finished, but i always enjoy listening to sawyer. i forgot the tpc was on :-( 14:34
14:36 simcop2387 joined 14:39 perlbot joined 14:55 razetime joined 15:04 jpn joined 15:09 jpn left 15:20 jgaz left 16:10 jpn joined 16:13 ab5tract joined 16:15 jpn left 16:33 ab5tract left 16:46 jgaz joined 16:56 teut joined 17:06 jpn joined 17:11 jpn left
teut Hi, may I know whats the speciality of this language? Like python for data, js for web and c++ for performance 17:12
rest just exist for paradigms and elixir for event driven and so on.. 17:13
17:18 jpn joined
antononcube @teut Which language? And Python is not that good for data. 17:21
teut lol
you are correct, its just good for wrapping other languages
but atleast it has the best data  processibg libraries 17:22
n*
raku obviously
17:23 jpn left
antononcube @teut I have probably fairly biased and incomplete view on "why use Raku." I recently responded to a similar question in a different forum, so I will just post the link here. 17:25
teut sure
oh so I m taking to a person from discord
I just realized
antononcube @teut Yes, I am of Discord. 🙂 Here is the link : www.reddit.com/r/Mathematica/comme...epository/ 17:26
teut let me come to discord
Grammar programming within the Object-Oriented Programming (OOP) paradigm 17:27
this is the strength ?
I know OOP but not grammar programminh
g*
other one, python is already good at it 17:29
the REPL thing
antononcube @teut Yeah, "grammar design" and "parse programming" is somewhat less taught in Programming classes / schools / degrees. 17:30
teut I m from chemistry background
not CS
antononcube @teut Do you distinguish between REPL and CLI?
teut hmm, good question 17:31
antononcube @teut "I m from chemistry background" -- You lucky to have met me then!! 🙂
teut repl runs the statements in eval
Read eval print loop
cli runs the commands in shell
let me good that once 17:32
I know about various stages of compiler parsing the code, like parsing, tokenization, code optimization 17:33
etc
antononcube @teut It seems you are on right path! 🙂
teut ya, I studied what I wanted, college is good for nothing even if you are in the best one 17:34
17:34 euandreh left
antononcube @teut How easy it is to implement this Stoichiometry equations parser and balancer in other, non-Raku languages? raku.land/zef:antononcube/Chemistr...ichiometry 17:34
teut hmm, need to split the lhs and rhs of equation
we can use a regex
antononcube @teut Or a grammar. 🙂 17:35
teut oh yes
there are even two types of parsers, regex based and grammar based
I forgot the computer science terms for that 17:36
antononcube At some point I was planning to write a book about teaching functional programming to Chemists and Chemical Engineers. The chemical formula parsing was the first chapter I wrote.
teut great, so you got this package raku.land/zef:antononcube/Chemistr...ichiometry , let me see the source code
well functional programming, why so? 17:37
antononcube @teut Please do! I am looking for chemstry background testers!
@teut It was mostly about Mathematica for chemists, hence functional programming.
teut ok, I m looking for contributing on open source, just need a point to start
I havent used mathmetica 17:38
only Matlab I ve used
antononcube The chemists I taught programming to were much better at understanding procedural programming and flowcharts.
17:38 euandreh joined
So, I was considering making the connections between those. 17:38
teut oh so you woked at mathematica before 17:39
nice
antononcube Yes, I worked at Wolfram Research for 6-7 years.
teut hmm, procedural programming, thats pascal
or cobol
antononcube 🙂 and Matlab.
teut but matlab has classes 17:40
isnt procedural programming the one where you dont jump up and down?
like which doesnt have functions
hold on, I m looking at it 17:41
what was in my head was programming that is unidirectional is procedural
antononcube I am not sure when Matlab got classes. For long time it was just procedural with some sort of shallow polymorphism (i.e. OOP) via signature overloading. 17:44
teut yes, matlab has classes
I was thinking why you are saying it functional 17:45
atleast this much I was sure that having classes in a program makes it non procedural 17:46
antononcube Mathematica is mostly a funcitonal programming language. Also, rule based, etc. 17:47
Well, what I am saying is that Matlab for most of its existence was "just" procedural.
teut most people use matlab
although mathmatica and maple have more featires 17:48
u*
github.com/antononcube/Raku-Chemis...mples.raku  hmm, I just know englisg
h* 17:49
github.com/antononcube/Raku-Chemis...nt.rakumod  what does this do? 17:51
these are the tokens, I get that much
antononcube @teut "most people use matlab" -- very strange statement? 🙂
teut atleast in India
this sounds more correct 17:52
antononcube @teut ChemicalElement.rakumod lists the tokens that going to be encountered in the Chemical Equations Grammar Universe (CEGU). 17:53
teut ya these are atmoic symbols
atomic*
let me see the parset
r*
hmm, I am too bad at typing
antononcube Now CEGU has also assignment symbols and summation signs.
teut github.com/antononcube/Raku-Chemis...akumod#L31 this is the bnf right? 17:54
antononcube Yes, it is very similar to BNF. (Not the same though.)
teut ya its SMILES 17:55
I just observed
antononcube Right, I targeted SMILES with the parser/grammar. 17:56
teut chemistry is taught just a memorization based subject
so this is the first time I m hearing of this
antononcube Yeah, all chemists I have met were/are alchemists. Hence, I felt the urge to teach them Mathematica, so they can be more systematic or scientific. 17:57
teut alchemy is what? 17:59
see I hate lab work 18:00
18:00 reportable6 left 18:01 reportable6 joined
teut I think understand your code can me helpful to me 18:01
which file should I look to start understanding it completely?
antononcube Ok. good!
Hmm... let me think. 18:02
teut like when someone enters "NaOH + HCl -> NaCL +H2)" acid base neutralization" 18:03
H2O *
which function takes it in and starts the tokenization
antononcube See Chemistry::Stoichiometry::Grammar.parse. 18:05
The method parse is a grammar class method.
teut which file? 18:06
antononcube github.com/antononcube/Raku-Chemis...ry.rakumod 18:07
See line 76.
teut so you are kind of interacting between julia and mathematica objects? 18:12
antononcube @teut I am not sure what do you mean. It that chemistry module only Raku is used. 18:14
teut github.com/antononcube/Raku-Chemis...akumod#L31
this part
I mean is this module usable in both mathematica and julia? 18:15
I m really curious about what technique is used to use this package in those languages
antononcube Well, the idea is to translate the strings with chemical equations / formulas into objects of, say, WL, Python, etc. 18:16
Those translators are not implemented yet. 18:17
18:17 jpn joined
teut so python has something called as a dict 18:17
antononcube Yeah, Python universe is well known for misnaming things. 🙂 18:18
teut no, dict is a good name
look at js, it says it Object
antononcube Good does not make it right. 🙂
teut thats a crap name
antononcube This module might be easier to follow and understand: github.com/antononcube/Raku-Lingua...cWordForms . 18:19
teut thats fine, but lets only focus on that chemistry module only 18:20
antononcube I did not have the time to implement Hindy numeric forms. I was thinking yesterday to "just" implement Sancrit numeric forms.
teut even if you will, who 'd be using it? 18:21
in india, the crap peeps do not have a national language
antononcube 🙂 Agh, good question.
teut everyone who is literate enough to use that package would be knowing english 18:22
18:22 jpn left
teut I live in India 18:22
antononcube I hear that argument often, for other natural language processing projects of mine. 18:23
teut in china, france etc, I have heard things are differet
India has english as an official language
but there is no national language 18:24
antononcube Well, to some extend that is why Hindi and Sanscrit numbers are not implemented yet. 🙂
teut so using hindi would mostly be a wasteful effort
18:24 razetime left
antononcube Sure. Depends on the target audience, though. 18:24
teut who is going to read hindi chemical reactions rather than people in  India. 18:25
antononcube I usually target technically literate users, so your argument stands. 🙂
teut if it was 1990's then you might have needed hindi 18:26
antononcube Good to know!
teut there were many great chemists in Bengal
lol, but then you'd need bengali
antononcube Ok, should I program Bengali numbers or not? 🙂 18:27
teut The Eighth Schedule of the Indian Constitution recognizes 22 languages as scheduled languages, which means they are officially recognized and have a special status. These languages include Assamese, Bengali, Bodo, Dogri, Gujarati, Hindi, Kannada, Kashmiri, Konkani, Maithili, Malayalam, Manipuri, Marathi, Nepali, Odia, Punjabi, Sanskrit, Santali,
Sindhi, Tamil, Telugu, and Urdu.
Hindi is spoken in majority of India 18:28
but if we make it national, south Indians would start protests
antononcube Yeah. That was my line of thinking: 1) Hindi is the most popular, 2) Sanskrit is the easiest to program.
From the non-English languages... 18:29
teut 2) Sanskrit is the easiest to program.  >>
?? *
never heard of anyone programming or even speaking in sanskrit
we cant even type hindi /sanskrit etc on our keyboards 18:30
antononcube I think originally Sanskrit numbers forms were specified with some sort of Backus-Naur Form. (Thousands of years ago,)
teut all keyboards are english
maybe
ya wikipedia says a lot about that and the south indian mathematicians but sanskrit is what only some professors or pundits would be knowing 18:31
not common people in India
antononcube Agh, but Raku can handle Sanskrit numbers / digits. (I think.)
teut oh 18:32
the only problem I see is how would I or anyone type sanskrit or hindi on my keyboard
I can use a virtual keyboard though 18:33
antononcube I understand your utilitarian point of view. But in some projects, we just want to demonstrate ability and versatility, not "pure" utility.
@teut Talking to you gives the idea to re-write the Mathematica-for-Chemists documents into Raku-for-Chemists ones. 18:35
teut hmm 18:36
let me first use this package
that would be the perfect start
antononcube Yeah. 18:37
If you use Jupyter, then you can try using "Jupyter::Kernel" (for Raku notebooks.) 18:38
teut oh great
jupyter has features for R when I saw it last tym 18:39
had*
18:39 rir joined
antononcube See here : raku.land/cpan:BDUGGAN/Jupyter::Kernel 18:40
teut hmm, this is also a good prpject
o*
antononcube Yes, it is great. 18:42
Here is demo of using Jupyter and Raku: www.youtube.com/watch?v=THNnofZEAn4 . (Shamless plug, BTW.)
teut what are those images of? 18:45
oh I have heard of these things, the mandelbroth set 18:46
antononcube No!!! Those mandalas! 18:48
I strongly suspect you have been exposed to mandalas before. 🙂
teut I have just seen the mandalbroth set 18:50
althrough the word mandal seems to be hindi word
but never seen these patterns associated with this word
"mandal" means a group 18:51
19:04 Sgeo joined
gfldex m: my $a ≔ 42; say $*RAKU.compiler.version; 19:06
camelia ===SORRY!=== Error while compiling <tmp>
Confused
at <tmp>:1
------> my $a⏏ ≔ 42; say $*RAKU.compiler.version;
expecting any of:
infix
infix stopper
statement end
statement modifier…
gfldex m: say (my $a) ≈ 42; 19:07
camelia ===SORRY!=== Error while compiling <tmp>
Confused
at <tmp>:1
------> say (my $a)⏏ ≈ 42;
expecting any of:
infix
infix stopper
postfix
statement end
statement modifier
antononcube @teut good to know! 19:15
teut =D
19:18 jpn joined
gfldex m: say 1‥2; 19:18
camelia ===SORRY!=== Error while compiling <tmp>
Bogus postfix
at <tmp>:1
------> say 1⏏‥2;
expecting any of:
infix
infix stopper
postfix
statement end
statement modifier
gfldex m: my $n = ↊; say $n; 19:28
camelia ===SORRY!=== Error while compiling <tmp>
Malformed initializer
at <tmp>:1
------> my $n =⏏ ↊; say $n;
expecting any of:
prefix
term
gfldex m: my $n = '↊'; say $n.Int; 19:29
camelia Cannot convert string to number: base-10 number must begin with valid digits or '.' in '⏏↊' (indicated by ⏏)
in block <unit> at <tmp> line 1
Xliff antoncube: Where is the <chemical-element> token defined from here -- github.com/antononcube/Raku-Chemis...kumod#L31?
19:30 jpn left
antononcube @Xliff See: github.com/antononcube/Raku-Chemis...nt.rakumod 19:45
19:48 jpn joined 19:53 jpn left
Xliff m: sub a ( @b ($a, $b, $c, $d) ) { @b.one.so.say }; a(0, 1, 0, 1); 20:10
camelia ===SORRY!=== Error while compiling <tmp>
Calling a(Int, Int, Int, Int) will never work with declared signature (@b (Any $a, Any $b, Any $c, Any $d))
at <tmp>:1
------> b ($a, $b, $c, $d) ) { @b.one.so.say }; ⏏a(0, 1, 0, 1);
Xliff O_o -- did I do array decomp wrong?
antoncube: O I C! I forget that they are both roles. Thanks. 20:11
guifa The good thing re my slides are at least the moduels I mention both work 20:17
antononcube @guifa Where are the slides? 20:26
guifa on the video :-)
I'll work this evening to update slides and post them
www.youtube.com/watch?v=LSnkFfE7vP...p;index=30 <-- brain fuck talk posted 20:27
antononcube ok 20:28
@guifa In the YouTube description it seems you are using RakuAS. (Not RakuAST.) 20:30
20:34 sena_kun left 20:35 rir left
@Xliff Yeah, no problem. Thank you for your interest! 20:44
20:48 teut left 21:48 nativecallable6 left, bisectable6 left, quotable6 left, tellable6 left, notable6 left, statisfiable6 left, bloatable6 left, evalable6 left, benchable6 left, committable6 left, shareable6 left, releasable6 left, unicodable6 left, sourceable6 left, squashable6 left, coverable6 left, reportable6 left, greppable6 left, linkable6 left, benchable6 joined 21:49 tellable6 joined, linkable6 joined, squashable6 joined, nativecallable6 joined, reportable6 joined, statisfiable6 joined, unicodable6 joined, coverable6 joined, quotable6 joined, releasable6 joined, notable6 joined 21:50 committable6 joined, bisectable6 joined 21:51 sourceable6 joined, greppable6 joined, evalable6 joined, bloatable6 joined, shareable6 joined 22:51 reportable6 left, nativecallable6 left, committable6 left, benchable6 left, greppable6 left, squashable6 left, notable6 left, coverable6 left, shareable6 left, bisectable6 left, quotable6 left, statisfiable6 left, linkable6 left, bloatable6 left, evalable6 left, unicodable6 left, sourceable6 left, tellable6 left, releasable6 left, benchable6 joined, reportable6 joined 22:52 squashable6 joined, evalable6 joined, quotable6 joined, notable6 joined 22:53 bisectable6 joined, coverable6 joined, releasable6 joined, greppable6 joined, nativecallable6 joined 22:54 unicodable6 joined, committable6 joined, tellable6 joined, statisfiable6 joined, linkable6 joined, sourceable6 joined, bloatable6 joined, shareable6 joined 23:52 kst left