[00:00] It's telling me I need 'use experimental :macros', but even when I add the use statement, it still complains about it. I assume it's a normal use statement, without the quotes, but I tried with and without quotes and it doesn't seem to recognize it. Any thoughts? [00:01] m: use experimental :macros; [00:01] rakudo-moar 600bb6b06: ( no output ) [00:01] what version of raku Gus26 [00:01] I'm trying this [00:01] committable6: rakuast %*ENV = 1; my $p = run 'raku', '-e', "use experimental :macros; macro m() { use experimental :macros; quasi { say 'a' } } m;", :out; my $o = $p.out.slurp: :close; say $o; [00:01] Gus26, ¦rakuast: «===SORRY!===␤X::Syntax::Confused at line 2, near "quasi { sa"␤␤» [00:02] Oops I was trying to put inside the function [00:02] committable6: rakuast %*ENV = 1; my $p = run 'raku', '-e', "use experimental :macros; macro m() { quasi { say 'a' } } m;", :out; my $o = $p.out.slurp: :close; say $o; [00:02] Gus26, https://gist.github.com/4cbcb7ea0109796ba966bb3e5b351bd5 [00:03] Trying what I figure is the simplest possible program that demonstrates the AST functionality is really turned on [00:04] I suppose I could try and instantiate some AST nodes but I need to learn more about the API; I got the sample macro code from one of jnthn's talks [00:07] Also, without the macro, I'm not sure how you insert an AST back into your program [00:19] Ok so that problem was caused by shell quoting, didn't even consider that originally. Now I get the error that it's not recognizing quasi [00:19] committable6: rakuast %*ENV = 1; my $p = run 'raku', '-e', 'use experimental :macros; macro m() { quasi { say "a" } } m();', :out; my $o = $p.out.slurp: :close; say $o; [00:19] Gus26, ¦rakuast: «===SORRY!===␤X::Syntax::Confused at line 2, near "{ quasi { "␤␤» [00:24] does there need to be a semicolon on the } before m() since its on a single line? [00:25] say "a" } }; m(); [00:26] As I keep playing with it I feel like there's more shell escaping problems [00:26] committable6: rakuast %*ENV = 1; my $p = run 'raku', '-e', 'use experimental :macros; macro m() { quasi { say "a" } }; m();', :out; my $o = $p.out.slurp: :close; say $o; [00:26] ugexe, ¦rakuast: «===SORRY!===␤X::Syntax::Confused at line 2, near "{ quasi { "␤␤» [00:26] guess thats not it [00:27] Even simplifying further, it doesn't work but it's a strange error to me [00:27] committable6: rakuast %*ENV = 1; my $p = run 'raku', '-e', 'macro m { }', :out; my $o = $p.out.slurp: :close; say $o; [00:27] Gus26, ¦rakuast: «===SORRY!===␤X::Syntax::Regex::NullRegex at line 2, near "}"␤␤» [00:27] *** berber44 left [00:27] And in an empty quasi and it complains about some character problem [00:27] committable6: rakuast %*ENV = 1; my $p = run 'raku', '-e', 'macro m { quasi { } }', :out; my $o = $p.out.slurp: :close; say $o; [00:27] Gus26, ¦rakuast: «===SORRY!===␤X::Syntax::Regex::UnrecognizedMetachar at line 2, near " quasi { }"␤␤» [00:28] I have no idea what an UnrecognizedMetachar would be [00:28] I guess a character not allowed inside a macro? [00:29] Or is it some shell quoting issue with the curly brace? [00:40] committable6: rakuast %*ENV = 1; say run('raku', '-e', q|macro m($x) { quasi { {{{$x}}} }; }; m(1);|, :merge).out.slurp(:close); [00:40] ugexe, ¦rakuast: «===SORRY!===␤Undeclared variable $x␤␤» [00:40] I don't think it's recognizing the macro keyword [00:41] I tried putting back in the use experimental :macros to no effect [00:44] This suggests that there is really something there, but I'm not sure what to do with it: [00:44] committable6: rakuast %*ENV = 1; my $p = run 'raku', '-e', Q^say RakuAST.WHAT^, :out; my $o = $p.out.slurp: :close; say $o; [00:44] Gus26, ¦rakuast: «(RakuAST)␤␤» [00:45] hmm right but i dont think rakuast implies macros [00:45] its just a precursor to better macro support [00:51] i also havent kept up with rakuast as much as i should so i might be woefully out of date in my thinking [00:52] Hmm, maybe I should make sure the environment variable is actually getting through [00:52] And print the variable from the nested -e block [00:52] Also, how can you reference a constructor without calling it? [00:52] I'm trying to get the constructor signature [00:53] i suppose there could be many constructors [00:53] But RakuAST::Statement.new.signature is trying to call signature on the created object, not the method itself [00:53] ah ignore me then heh [00:53] I guess it's likely I'm looking for the BUILD method though right? [00:54] Isn't it standard practice to not really touch new and put logic in BUILD? [01:05] Probably should have considered this sooner, but the place to see how this works is in the tests [01:05] https://github.com/rakudo/rakudo/blob/rakuast/t/12-rakuast/statements.t [01:09] *** kvw_5_ joined [01:09] Is anyone already working on a CBOR implementation (https://en.wikipedia.org/wiki/CBOR)? I think MUGS will need to switch to that (from JSON) in order to handle really big/rapid game updates, especially including blobs or arrays of native numbers, without spending too much bandwidth transmitting and time (de-)serializing. [01:09] I didn't see anything on modules.raku.org, but I know sometimes people have such things "simmering" in a local repo for quite a while before making them official. [01:12] *** kvw_5 left [01:15] Ok, if you're manually building the AST, you don't need the ENV variable, so this works: [01:15] rakuast use MONKEY-SEE-NO-EVAL; my $s = RakuAST::Call::Name.new(name => RakuAST::Name.from-identifier('say'),args => RakuAST::ArgList.new(RakuAST::IntLiteral.new(5))); EVAL($s) [01:15] c: rakuast use MONKEY-SEE-NO-EVAL; my $s = RakuAST::Call::Name.new(name => RakuAST::Name.from-identifier('say'),args => RakuAST::ArgList.new(RakuAST::IntLiteral.new(5))); EVAL($s) [01:15] Gus26, ¦rakuast: «5␤» [01:25] *** brtastic joined [01:25] *** db48x left [01:25] *** db48x joined [01:26] So the nested call to raku does see the ENV var, but somewhere along the line it's going crazy, and I'm at a loss why [01:26] Still feels like a quoting issue, but I don't see how [01:28] Even using the manual AST evaluation in the nested raku causes a weird error [01:28] committable6: rakuast %*ENV = 1; my $p = run 'raku', '-e', Q[my $s = RakuAST::Call::Name.new(name => RakuAST::Name.from-identifier('say'),args => RakuAST::ArgList.new(RakuAST::IntLiteral.new(5))); EVAL($s)], :out; my $o = $p.out.slurp: :close; say $o; [01:28] Gus26, ¦rakuast: «===SORRY!===␤Unknown compilation input 'optimize'␤␤» [01:28] Also, I guess when you use -e it no longer cares about EVAL [01:28] I think -e is doing weird things but I can't find any docs [01:30] It's actually looking for a package here: [01:30] committable6: rakuast %*ENV = 1; my $p = run 'raku', '-e', Q[use MONKEY-SEE-NO-EVAL;], :out; my $o = $p.out.slurp: :close; say $o; [01:30] Gus26, https://gist.github.com/4f221254a9d34b640d055c36b159f317 [01:37] Jeez we have been trying way too hard, it just works [01:37] committable6: rakuast use experimental :macros; macro z($str) { quasi { say {{{$str}}}; } }; z("foo"); [01:37] Gus26, ¦rakuast: «foo␤» [01:51] *** frost-lab joined [02:16] *** lucasb left [02:25] *** defaultxr joined [02:33] *** Gus26 left [02:36] *** kini joined [02:38] *** mowcat left [02:41] *** defaultxr left [02:44] *** defaultxr joined [02:51] *** mahafyi left [03:31] *** stanrifkin joined [03:32] what means :D behind the types? Like Complex:D [03:34] defined [03:35] m: say Complex ~~ Complex:D; say Complex.new ~~ Complex:D [03:35] rakudo-moar 600bb6b06: OUTPUT: «False␤True␤» [03:37] look like a smiley to me :D [03:37] m: say Complex ~~ Complex:U; say Complex.new ~~ Complex:U # for comparison [03:37] rakudo-moar 600bb6b06: OUTPUT: «True␤False␤» [03:37] ragu :DDD [03:38] And that's why it's called a 'type smiley' [03:38] (in the docs) [03:38] that's not unintentional. makes it happier to look at :) we sometimes even call them "type smileys" or something like that [03:38] exactly [03:47] *** stanrifkin_ joined [03:50] *** stanrifkin left [03:50] *** stanrifkin_ left [03:55] *** mahafyi joined [04:31] *** brtastic left [04:47] *** Sgeo__ joined [04:48] *** gordonfish left [04:49] *** abraxxa1 joined [04:50] *** abraxxa left [04:50] *** Sgeo_ left [05:18] *** jmerelo joined [05:36] *** ufobat_ joined [05:56] *** neshpion left [06:03] *** parabolize left [06:04] *** abraxxa1 left [06:07] *** abraxxa joined [06:18] *** rindolf joined [06:23] *** rindolf left [06:25] *** Sgeo__ left [06:39] *** rindolf joined [06:45] *** wamba joined [07:05] *** asymptotically joined [07:08] *** sena_kun joined [07:32] *** brtastic joined [07:37] *** dakkar joined [07:47] *** pecastro joined [07:48] *** aborazmeh joined [07:56] *** mahafyi left [08:00] *** mowcat joined [08:04] *** mowcat left [08:05] *** aborazmeh left [08:07] *** mowcat joined [08:08] *** mowcat left [08:47] *** wamba left [09:40] *** ZzZombo joined [10:01] *** solitario left [10:03] *** solitario joined [10:08] *** ZzZombo left [10:12] *** ZzZombo joined [10:24] *** ZzZombo left [10:40] japhb: Are you aware of the existence of FlatBuffers? (alas no Raku lib available either) [10:41] *** wamba joined [10:44] *** mahafyi joined [11:28] *** Xliff joined [11:28] \o [11:29] Can someone tell me why the constant-def regex isn't working? [11:29] https://replit.com/@Xliff/MobileBeneficialPixels#main.raku [11:29] If you would like editing access to fiddle with it, please request. Would prefer you clone, though! :) [12:11] *** mahafyi left [12:30] *** abraxxa left [12:33] *** abraxxa joined [12:52] *** natrys joined [13:08] *** jmerelo left [13:10] *** jhill joined [13:45] not to be pedantic, but doesnt the :D stand for DEFINITE (like the method)? [13:45] not defined [13:46] it seems like something i used to know but i certainly don't remember the difference at the moment heh [13:46] (the difference between DEFINITE and defined) [13:46] *** wamba left [13:49] *** |oLa| joined [13:50] huh, looks like you're right. TIL. [13:50] m: sub f { fail }; say f().defined; say f().DEFINITE; f() ~~ Failure; f() ~~ Failure:D [13:50] rakudo-moar 600bb6b06: OUTPUT: «False␤True␤» [13:50] m: sub f { fail }; say f().defined; say f().DEFINITE; say f() ~~ Failure; say f() ~~ Failure:D [13:50] rakudo-moar 600bb6b06: OUTPUT: «False␤True␤True␤True␤» [13:54] *** |oLa| left [14:00] And I guess the difference is that .DEFINITE is a pseudo-method that can't be meaningfully overwritten, whereas .defined is a regular method inherited from Mu. https://docs.raku.org/language/mop#index-entry-syntax_DEFINITE-DEFINITE [14:02] *** frost-lab left [14:03] And 'defined' actually winds down to the same nqp::p6definite, as DEFINITE [14:03] (except when overwritten, as with Failure) [14:04] *** wamba joined [14:08] and :U stands for... indefinite [14:14] *** test joined [14:15] *** test is now known as Guest43428 [14:15] *** Kaiepi left [14:15] *** Kaiepi joined [14:16] *** Guest43428 left [14:18] *** b2gills left [14:18] *** b2gills joined [14:29] *** gordonfish joined [14:33] *** ufobat__ joined [14:35] *** Sgeo joined [14:37] *** ufobat_ left [14:38] *** Kaiepi left [14:38] *** Kaiepi joined [14:43] *** Kaiepi left [14:43] *** xinming joined [14:44] *** Kaiepi joined [14:46] *** Sgeo left [14:46] *** Sgeo joined [14:49] releasable6: [14:49] xinming, I cannot recognize this command. See wiki for some examples: https://github.com/Raku/whateverable/wiki/Releasable [14:49] 2021-04-03T14:32:37Z #raku xinming_ no, that’s just a way to add “” around the table name… sorry, that problem wasn’t fixed yet… :( [14:49] releasable6: status [14:49] xinming, Next release will happen when it's ready. 3 blockers. 8 out of 183 commits logged (⚠ 1 warnings) [14:49] xinming, Details: https://gist.github.com/c70085c045df0b777a4d6810d673ad3f [14:57] *** parabolize joined [15:16] *** brtastic left [15:24] anybody here on windows ever see this when running rakudo's tests? https://dev.azure.com/MoarVM/MoarVM/_build/results?buildId=454&view=logs&j=5b519533-8a6a-5ec0-9930-bcff75bff664&t=6c4f881f-c031-5fa2-35de-9b22b606ed7e&l=1900 [15:37] *** abraxxa left [15:38] *** abraxxa joined [15:39] *** softmoth_ joined [15:44] *** guifa2 joined [15:45] codesections: re your question on SE (I've left the site so can't respond there), even in blocks, you can adjust values in a closure [15:45] m: my $foo = 0; my &bar = { $foo + 1 }; say bar; $foo++; say bar; [15:45] rakudo-moar 600bb6b06: OUTPUT: «1␤2␤» [15:46] patrickbkr[m]: I hadn't looked at FlatBuffers (thanks for the pointer) because it wasn't listed in https://en.wikipedia.org/wiki/Comparison_of_data-serialization_formats as being a JSON superset. I wanted something that could do everything that JSON could do (only better in terms of performance and space efficiency) and which could be a valuable core addition to Cro as a default-supported format. [15:47] yeah, that's what I realized/mentioned in the comment. I was surprised by that, but I think I was misunderstanding how lexical scope works [15:47] (in Raku, but also just in general) [15:47] FlatBuffers has the downside of needing a schema to parse, IIUC. I also wanted to make sure that the serialization and parsing where schemaless. [15:47] protobuf? [15:47] (the same effect occurs in js, for example) [15:48] did someone mention protocol buffers? [15:48] (oh MasterDuke just did) [15:48] MasterDuke: Also needs a schema to parse. And has one of the most baroque systems for parsing I know of. (I know, I implemented the wire format in Raku back before it was called that.) [15:49] ah [15:55] Some other advantages of CBOR is that it is getting picked up in a bunch of IETF specs, has standard bindings for zero-copy (on parse) browser-side typed arrays, and is designed not only to be relatively space efficient, but to be parser-efficient as well, since part of the target audience is constrained/IoT devices. [15:56] All of which are other reasons it looks like a decent fit for adding support to Cro as well. :-) [15:57] * japhb wonders if our UDP support is decent enough to support CoAP too .... [16:02] flatbuffers looks to have flexbuffers [16:04] codesections: it's more of at the end of the scope, if the variable doesn't "belong" to anyone else, it'll get frozen. [16:04] m: sub foo ($a is rw) { return { $a + 1 } }; my $x = 0; my &bar = foo $x; say bar; $x++; say bar; [16:04] rakudo-moar 600bb6b06: OUTPUT: «1␤2␤» [16:13] japhb: fwiw, I was looking at p5's CBOR::PP and it seems extremely short and clean and easy to port to Raku [16:16] tonyo: Hmmm, flexbuffers are at least not schema'd, though it was only by you mentioning it that I even found it -- seems like flexbuffers uses the flatbuffer wire format, but is otherwise not their primary target? [16:16] raydiak: Oooh, good data point. [16:18] *** dataangel left [16:18] *** dataange` joined [16:19] however I have no idea of the legalities of creating a derivitive work of a GPLv2 project and relicensing it as artistic 2, or if you'd have to do it as its own separate GPL'd module (or get special permission/relicensed copy from the original author) [16:20] Can someone help me with regex issues, here: https://replit.com/@Xliff/MobileBeneficialPixels#main.raku [16:23] raydiak: CBOR::PP and CBOR::Free appear to be Perl-licensed. CBOR::XS is I think the only GPL-only one? [16:26] japhb: oh I missed that, just saw the bulk of the license file and missed the first few lines, and saw github said gplv2. looks like its actually dual licensed if I carefully read the top of the license file [16:27] Xliff: apparently I am not human enough to pass the captcha on that site after a few attempts :D [16:28] those things are getting tricky...here in the US you usually wouldn't call a motorhome a "truck", even though I think the dept. of transportation classifies it as one. same with vans/minivans etc [16:32] raydiak: You have to be kidding me! :( [16:32] radiak: Have an email? [16:32] I'll try to invite you and see if that's a workaround [16:32] Xliff: no joke, I failed at "airplane" too, unless the site is just having problems [16:33] [email@hidden.address] should work [16:33] Invited [16:34] *** dakkar left [16:38] don't see it yet, I'll check again in a few minutes. I just sent a test message, it does still work [16:42] *** mahafyi joined [16:44] got it, looking... [16:46] Thanks. [16:48] can you put that together into an actual test that shows how you're initiating the match/parse against the header file and shows the output? [16:48] ? [16:49] you just define some lexical tokens/rules, but you don't actually use them to parse the file [16:49] Oh... I didn't finish it off... [16:50] Should now be corrected. [16:53] *** aluaces left [16:53] looks like you're getting there. in general, I'd suggest wrapping it all in a grammar and using grammar::tracer, if that's something you can do in this environment [16:54] Well, if you comment out the $ rule, I can pick up names,. [16:54] However that's useless. [16:55] It looks like isn't working, and I'd like some help figuring out why [16:57] Throwing it all in a grammar and using that is just another way to get a whole lot of nothing. [16:58] Grammar::Tracer would require the whole output to match\ [16:58] s/output/input/ [16:58] It's why I did this with a regex. [17:02] radiakAck! You had it. You needed to remove the my's [17:03] my bad, assumed this thing would have version control [17:05] LoL! No [17:05] I suggest doing that, but against a much shorter test file [17:06] Yes, but the utulity of Grammar::Tracer when used for what really is a line-by-line algorithm is...less than awesome. [17:09] So. As you can see... as soon as I add support for value extaction, things stiop working. [17:10] ... or not [17:10] Huh... why does removal of $$ allow the to process?! [17:11] Also. Only picks up the decimal, not the hexi... [17:12] !?? [17:12] Now Grammar::Tracer has dissappeared! [17:13] uh...I'll reinstall it [17:13] Didn't even know Grammar::Tracer was installed by default on repl.it@ [17:13] s/@/!/ [17:13] it's not, I installed it in the shell [17:14] it does have zef [17:14] Ah! Nice trick! radiak++ [17:15] this tool is fun, I'm a bit sad that I'm about to have to leave. but it also feels a bit immature. definitely should have an edit history, and not randomly lose things in the filesystem [17:16] *** aluaces joined [17:17] Yes. [17:17] Leave? Leave where? [17:18] I have a legal appointment downtown [17:20] Oh, but you'll be back! [17:20] Then the fun can resume! [17:20] Good luck with your appointment. [17:21] Xliff: thanks :) it'll be a few hours, but absolutely I'd be happy to do this some more if you're still around and haven't worked it out by the time I'm back [17:21] my regex/grammar memory is rusty anyway, nice to be brushing up on it [17:29] Sure thing! [17:39] that thing wouldn't load for me [17:39] *** neshpion joined [17:40] wouldn't mind taking a look at the regex, just finished the toml 1.0.0 thing so still have some regex freshness in mind [17:41] *** aborazmeh joined [17:52] *** aborazmeh left [17:59] *** sena_kun left [18:00] *** sena_kun joined [18:00] * lizmat clickbaits https://rakudoweekly.blog/2021/04/19/2021-16-dispatch-anew/ [18:01] tonyo: I had to sign up to bypass the captcha, which is the part that wasn't working for me [18:04] lizmat++ thank you for all of your continuing hard work, weekly and otherwise [18:10] 7oh, i don't even get a captcha [18:10] it appears to load but no code shows [18:14] I saw that too, but only between captchas. either way, signing up may make a difference if you're interested. it doesn't seem very mature, but being a multiuser code editor, kinda fun to use anyway with another person [18:15] ah, that enabled more of the ui [18:15] no joy tho [18:16] hm. yeah, seems immature. maybe try another browser? I'm on chromium [18:28] *** sftp left [18:28] *** sftp joined [18:29] *** CIAvash joined [18:33] *** juanfra__ joined [18:42] *** wamba left [18:53] codesections, i was redirected to you about some legal concerns about my code i had in #raku-dev [18:53] i use modified snippets of openbsd source code in a few spots. i know there are comments i need to worry about in doing so, but is this permissible, and if so, is there anything else i need to worry about? [18:53] *** abraxxa left [18:55] *** neshpion left [18:55] *** abraxxa joined [18:56] keep the license text? [18:57] *** neshpion joined [18:58] that's what i'm doing at the moment [19:06] *** Black_Ribbon joined [19:07] *** mahafyi left [19:11] tony-o: Maybe an invite might help. Email? [19:13] *** MasterDuke left [19:16] *** wamba joined [19:27] *** softmoth_ left [19:29] sent via msg [19:38] *** wamba left [19:50] *** lucasb joined [19:58] *** asymptotically left [20:05] ¦ doc: 70d30afc75 | (Stoned Elipot)++ | doc/Type/Range.pod6 [20:05] ¦ doc: Use code formatting for an operator [20:05] ¦ doc: review: https://github.com/Raku/doc/commit/70d30afc75 [20:05] Link: https://docs.raku.org/type/Range [20:08] *** neshpion left [20:09] *** neshpion joined [20:13] *** wamba joined [20:15] *** MasterDuke joined [20:23] *** aborazmeh joined [20:31] *** MasterDuke left [20:32] *** MasterDuke joined [20:52] *** kybr joined [20:59] *** abraxxa left [21:01] *** abraxxa joined [21:03] *** brtastic joined [21:05] *** Ven_de_Thiel joined [21:13] is it possible to invoke a constructor using just the () after a class name? Foo() instead of Foo.new ? i tried somrthing likke this: class Finger { sub CALL-ME() { "got here".say } } [21:14] method CALL-ME [21:14] `Finger()` looks like a conversion missing the object to be converted [21:14] does not seem to work either. I get (Finger(Any)) [21:16] *** ufobat__ left [21:16] camelia: class Finger { method CALL-ME() { Finger.new } ; method fun() { "got here".say } } ; Finger().fun [21:21] Finger.() seems to work. [21:21] yeah it doesn't work with 0 arguments for some reason [21:24] m: class Bar { }; say Bar(Str); # looks like the Bar() takes this code path even with a CALL-ME() [21:24] rakudo-moar 1c4577aed: OUTPUT: «(Bar(Str))␤» [21:24] *** rindolf left [21:24] Kaiepi: since I'm not licensed to practice law in your jurisdiction, I can't really give legal advice but keeping the license seems like a good idea in general [21:24] [21:28] kybr: to flesh out what Ven_de_Thiel said a bit: the syntax for type conversions is `TargetType(OriginType)` and if OriginType is omitted, it's treated as Any. E.g.: [21:28] m: my $a = Int(); say $a = '42'; say $a.WHAT [21:28] rakudo-moar 1c4577aed: OUTPUT: «42␤(Str)␤» [21:29] er, [21:29] *** softmoth_ joined [21:30] m: my Int() $a; say $a = '42'; say $a.WHAT [21:30] rakudo-moar 1c4577aed: OUTPUT: «42␤(Int)␤» [21:31] (I'm kind of surprised having the coercion doesn't work as the right-hand-side, but that's a tangent) [21:31] Anyway, the point is that Finger() is being parsed as a type coercion [21:34] *** softmoth_ left [21:36] *** aluaces left [21:42] *** wamba left [21:43] *** Ven_de_Thiel left [21:43] *** aborazmeh left [21:54] *** dogbert11 joined [21:58] *** dogbert17 left [21:59] How can I get access to self outside of a method? [22:00] there is no self outside of a method ? [22:00] afk& [22:02] *** dogbert17 joined [22:03] https://gist.github.com/Xliff/30478a31e96e71132d9e814a722ae3c3 [22:03] See ^^ for code [22:04] *** UukGoblin left [22:07] *** dogbert11 left [22:07] *** brtastic left [22:07] *** HobGoblin joined [22:13] *** dotdotdot left [22:16] *** neshpion left [22:19] *** dotdotdot joined [22:34] *** dogbert11 joined [22:37] *** dogbert17 left [22:39] *** neshpion joined [23:13] *** agentzh left [23:17] *** agentzh joined [23:17] *** agentzh left [23:17] *** agentzh joined [23:33] * guifa2 is legitimately surprised about the pushback from the CAT. (especially from guy who claimed to not trust it because he didn't know who sjm was — guess he doesn't follow perl much lol) [23:35] *** pecastro left [23:50] Xliff: still around? [23:55] *** aborazmeh joined