»ö« | perl6.org/ | nopaste: paste.lisp.org/new/perl6 | evalbot usage: 'perl6: say 3;' or rakudo: / pugs: / std: | irclog: irc.pugscode.org/ | UTF-8 is our friend!
Set by Juerd on 28 August 2009.
00:06 satrac joined, satrac left 00:07 tak11 left
jnthn OK, night all - may be here in the morning before I head for the airport... 00:07
00:12 cdarroch left 00:15 andy_ left
diakopter @tell japhb ping 00:15
lambdabot Consider it noted.
00:16 SmokeMachine left 00:18 japhb joined
colomon rakudo: for <a b c> -> $x { say $x; } 00:20
p6eval rakudo b51d94: ( no output )
colomon rakudo: for ("a", "b", "c") -> $x { say $x; }
p6eval rakudo b51d94: ( no output )
00:23 Limbic_Region left 00:27 SmokeMachine joined
pmichaud p6eval may need to bump the timeout a bit 00:28
rakudo: for 1..3 -> $x { say $x; }
p6eval rakudo b51d94: OUTPUT«1␤2␤3␤»
pmichaud rakudo: for <a b c> -> $x { say $x; }
p6eval rakudo b51d94: OUTPUT«a␤b␤c␤»
colomon pmichaud: I was testing the syntax because it was flopping on me in my test code. Of course, turned out to be a missing ) on the previous line. 00:33
ruoso hmm... I was just presented with an interesting challenge 00:37
how to, using regex, match all the possible selections of two "a" in "aaaa". i.e.: aa.. a.a. a..a .a.a ..aa 00:38
and .aa.
jeekobu In Perl6? :exhaustive or something... and a.*a 00:45
phenny jeekobu: 02 Sep 10:06Z <masak> tell jeekobu thanks for a nice explanation of an alternative algorithm. actually, some of my early labyrinth programs used that (or a very similar) technique. I found that it was biased towards long corridors and depended on the starting position. your algorithm doesn't seem to have that problem, though.
ruoso jeekobu, yeah... Perl 6
00:46 meppl left
jeekobu perlcabal.org/syn/S05.html#line_460 00:49
Although I'm not sure I completely understand what you want to match (all substrings with two a's?)
00:50 tak11 joined
jeekobu rakudo: "aaaa" ~~ m:ex/(a.*?a)/; say "@()" 00:50
p6eval rakudo b51d94: ( no output ) 00:51
jeekobu rakudo: "aaaa" ~~ m/(a.*?a)/; say "@()"
p6eval rakudo b51d94: OUTPUT«@()␤»
jeekobu rakudo: "aaaa" ~~ m/(a.*?a)/; say @()
p6eval rakudo b51d94: ( no output )
jeekobu hm
00:54 synth^2 left
jeekobu I guess all substrings with exactly two a's would be [^a]*a[^a]*a[^a]*, with :ex, translated into p6. 00:55
00:56 synth joined
pugs_svn r28187 | colomon++ | [t/spec] Refactor sin tests a bit more, and add a full set of sin tests on Rats. 01:00
01:01 synth left, synth joined 01:06 FCO joined
syntheticore how does one implement the === operator in perl6? 01:06
Is read that ~~ is implemented indirectly through ACCEPTS 01:07
and declaring a multi sub infix:<===> gives me a Null PMC access
01:07 SmokeMachine left 01:12 s1n left
FCO reakudo: $a="aaaaa"; ($a.split(//) X $a.split(//)).grep("aa").elements 01:13
rakudo: $a="aaaaa"; ($a.split(//) X $a.split(//)).grep("aa").elements
p6eval rakudo b51d94: OUTPUT«Confused at line 2, near "(//) X $a."␤in Main (src/gen_setting.pm:3454)␤»
FCO sorry!
01:26 syntheticore left, meppl joined 01:27 agentzh joined 01:35 synth left, synth joined 01:37 s1n joined 01:46 alester joined
ruoso rakudo: my $a = 'aaaa'; $a ~~ m:ex/(.*)(a)(.*)(a)(.*)/; say ~@() 01:53
p6eval rakudo b51d94: OUTPUT«Colons cannot be used as delimiters in quoting constructs at line 2, near ":ex/(.*)(a"␤in Main (src/gen_setting.pm:3454)␤»
pmichaud rakudo doesn't understand : flags on regexes yet
ruoso any work around?
pmichaud you're trying to get all matches? 01:54
ruoso all possible matches
yes
pmichaud rakudo: my $a = 'aaaa'; $a ~~ m:ex/(.*)(a)(.*)(a)(.*)/; while $/ { say $/; $/.next; }
p6eval rakudo b51d94: OUTPUT«Colons cannot be used as delimiters in quoting constructs at line 2, near ":ex/(.*)(a"␤in Main (src/gen_setting.pm:3454)␤»
pmichaud oops
rakudo: my $a = 'aaaa'; $a ~~ /(.*)(a)(.*)(a)(.*)/; while $/ { say $/; $/.next; }
p6eval rakudo b51d94: ( no output ) 01:55
pmichaud hmmm
ruoso rakudo: my $a = 'aaaa'; $a ~~ m/(.*)(a)(.*)(a)(.*)/; say ~@()
pmichaud rakudo: my $a = 'aaaa'; $a ~~ /(.*)(a)(.*)(a)(.*)/; say $/;
p6eval rakudo b51d94: ( no output )
pmichaud rakudo: my $a = 'aaaa'; $a ~~ /(.*)(a)(.*)(a)(.*)/; say $/;
ruoso rakudo?
p6eval rakudo b51d94: OUTPUT«aaaa␤»
pmichaud rakudo's running a bit slower now due to some parrot changes; I think we need to bump the timeout
rakudo: my $a = 'aaaa'; $a ~~ /(.*)(a)(.*)(a)(.*)/; say $/; $/.next; say $/ 01:56
ruoso rakudo: my $a = 'aaaa'; $a ~~ m/(.*)(a)(.*)(a)(.*)/; say $/.perl
p6eval rakudo b51d94: OUTPUT«aaaa␤aaaa␤»
rakudo b51d94: OUTPUT«Match.new(␤ # WARNING: this is not working perl code␤ # and for debugging purposes only␤ ast => "aaaa",␤ Str => "aaaa",␤ from => 0,␤ to => 4,␤ positional => [␤ Match.new(␤ ast => "aa",␤ Str => "aa",␤ from => 0,␤ to => 2,␤ ),␤ Match.new(␤ ast => "a",␤
.. St…
pmichaud if we end up with two rakudo processes at the same time, they'll tend to cancel each other out
ruoso rakudo: my $a = 'aaaa'; $a ~~ m/(.*)(a)(.*)(a)(.*)/; say @($/).join: ","
p6eval rakudo b51d94: OUTPUT«aa,a,,a,␤» 01:57
pmichaud rakudo: my $a = 'abacada'; $a ~~ /.*a.*a.*/; while $/ { say $/; $/.next; }
p6eval rakudo b51d94: OUTPUT«abacada␤abacada␤abacada␤abacad␤abaca␤abacada␤abacada␤abacad␤abaca␤abacada␤abacad␤abaca␤abac␤aba␤bacada␤bacada␤bacada␤bacad␤baca␤acada␤acada␤acada␤acad␤aca␤cada␤ada␤»
ruoso rakudo: my $a = 'aaaa'; $a ~~ m/(.*)(a)(.*)(a)(.*)/; say @($/).join: "," while $/.next 01:58
p6eval rakudo b51d94: OUTPUT«Null PMC access in get_bool()␤in Main (/tmp/WoT9189uL5:2)␤»
ruoso oosp
pmichaud @($/) isn't likely to do what you're wanting 01:59
lambdabot Unknown command, try @list
ruoso rakudo: my $a = 'aaaa'; $a ~~ m/(.*)(a)(.*)(a)(.*)/; { say @($/).join: ","; $/.next } while $/;
p6eval rakudo b51d94: OUTPUT«aa,a,,a,␤a,a,a,a,␤a,a,,a,a␤a,a,,a,␤,a,aa,a,␤,a,a,a,a␤,a,a,a,␤,a,,a,aa␤,a,,a,a␤,a,,a,␤a,a,,a,␤,a,a,a,␤,a,,a,a␤,a,,a,␤,a,,a,␤»
pmichaud depending on what you're wanting
anyway, ".next" is PGE's method on a match object to say "give me the next match"
ruoso rakudo: my $a = 'aaaa'; $a ~~ m/.*(a).*(a).*/; { say @($/).map({ $_.pos }).join: ","; $/.next } while $/; 02:00
p6eval rakudo b51d94: OUTPUT«Method 'pos' not found for invocant of class 'Match'␤»
pmichaud rakudo: my $a = 'a man, a plan, a canal, panama'; $a ~~ /a./; while $/ { say $/.from; $/.next; } 02:01
p6eval rakudo b51d94: OUTPUT«0␤3␤7␤11␤15␤18␤20␤25␤27␤»
ruoso rakudo: my $a = 'aaaa'; $a ~~ m/.*(a).*(a).*/; { say @($/).map({ $_.from }).join: ","; $/.next } while $/;
p6eval rakudo b51d94: OUTPUT«2,3␤1,3␤1,2␤1,2␤0,3␤0,2␤»
ruoso interesting... there are some matches missing 02:02
pmichaud I think it's because p6eval may be timing out
ruoso trying locally
ah... indeed 02:03
pmichaud gist.github.com/180689
ruoso it's still interesting that it finds duplicates 02:04
pmichaud sure, of course
you asked for exhaustive :-)
ruoso but why do we get a match twice/
?
pmichaud for 1,2
you're matching
both "aaa" and "aa" 02:05
look at it this way:
ruoso rakudo: my $a = 'aaaa'; $a ~~ m/^.*(a).*(a).*$/; { say @($/).map({ $_.from }).join: ","; $/.next } while $/;
pmichaud my $a = 'abcd'; m/.*(.).*(.).*/
p6eval rakudo b51d94: OUTPUT«2,3␤1,3␤1,2␤0,3␤0,2␤0,1␤»
ruoso ahá!
pmichaud++ 02:06
;)
02:08 agentzh1 joined 02:09 xomas left 02:13 cognomore left 02:14 cognominal left 02:15 Whiteknight left 02:17 cognominal joined 02:26 justatheory left, agentzh left
TimToady phenny: tell syntheticore sets should be defined in terms of === so that sets of objects work; === should autothread; === is defined as $x.WHICH eqv $y.WHICH to compare identity 02:28
phenny TimToady: I'll pass that on when syntheticore is around.
02:30 FCO left 02:36 synth left 02:55 markjreed joined 02:56 meppl left
markjreed rakudo: for «a b c» { .say } 02:57
p6eval rakudo b51d94: OUTPUT«a␤b␤c␤»
markjreed That's what I thought. Only the REPL has the encoding issue.... 02:58
02:59 alester left 03:00 markjreed left 03:02 sri_kraih left, sri_kraih joined 03:06 SmokeMachine joined 03:08 agentzh1 left 03:11 jaldhar joined 03:20 donaldh left, donaldh joined 03:21 dukeleto_ joined 03:23 jaldhar left, jaldhar joined 03:24 xomas joined 03:26 alester joined 03:27 alester left, justatheory_ joined 03:31 SmokeMachine left 03:33 markjreed joined, ihrd left
markjreed rakudo: %*ENV.values[0].perl.say 03:34
p6eval rakudo b51d94: OUTPUT«""␤»
03:36 alester joined
markjreed rakudo: my %h = { 'a' => 1, 'b' => 2 }; %h.values[0].perl.say 03:37
p6eval rakudo b51d94: OUTPUT«1␤»
markjreed rakudo: my %h = { 'a' => 1, 'b' => 2 }; %h.values.perl.say 03:40
p6eval rakudo b51d94: OUTPUT«[1, 2]␤»
03:41 markjreed left 03:49 SmokeMachine joined 04:01 meppl joined 04:24 payload left 04:25 stephenl1 joined 04:30 asciiville joined 04:36 alester left, stephenlb left 04:38 tak11 left 04:47 jaldhar left 04:48 jaldhar joined 04:56 asciiville left 05:13 payload joined
pmichaud TimToady: for contextual variables, after we scan outward and reach the GLOBAL package, do the symbols in GLOBAL retain the twigil or do we strip it at that point? 05:17
i.e., would $*FOO look for GLOBAL::<$FOO> or GLOBAL::<$*FOO> ? 05:18
05:24 reqamst left 05:32 frew__ left 06:07 flip913 joined
flip913 In S12 I found has $.fur handles (s/^furget_/get_/); 06:11
But if the intention is that the get_ functions of fur should be named furget_ in this class, isn't that the wrong way? 06:12
ie. shouldn't that be s/get_/furget_/?
06:15 justatheory_ left 06:22 stephenl1 left 06:27 iblechbot joined, rfordinal left, dukeleto_ left 06:36 zloyrusskiy left 06:37 justatheory joined 06:38 zloyrusskiy joined 06:47 justatheory left 06:50 ihrd joined
Matt-W Good morning 07:04
mberends good morning Matt-W, are you at work early? 07:06
07:13 drbean left, rfordinal joined
Matt-W not really 07:17
on time for a change :)
well, on intended time, 8am might be considered early by some
I have a singing lesson afterwards though, so I can't be too late leaving today 07:18
mberends :)
07:20 donaldh left 07:21 donaldh joined, eMaX joined
buu 8am! 07:25
What a terrifying prospect.
Matt-W Ah but I get to leave at 4pm 07:30
07:31 raig joined 07:34 viklund joined
viklund Hello all, 07:34
there's a lot more ppl here now ;)
Matt-W it happens 07:36
the word gets around
viklund indeed it does 07:37
07:38 Eevee left 07:39 drbean_ joined
BooK by the way, I don't see any link to a vector-graphics file for camelia 07:41
how are we supposed to change the colors or make a variant?
07:45 reqamst joined 07:49 carlin left 07:50 carlin joined, carlin_ joined
carlin BooK: svn.pugscode.org/pugs/misc/camelia.svg 07:51
07:51 Su-Shee joined
Su-Shee good morning. :) 07:51
07:51 drbean joined 07:54 buubot left 07:55 buubot joined
BooK carlin: ah of course. thanks 07:57
08:05 jferrero joined 08:06 drbean_ left 08:08 orafu joined
flip913 Anyone for help with S12? 08:19
08:20 drbean left, agentzh joined
Matt-W possibly... 08:20
flip913 Matt-W: Here we go ... 08:21
In S12 I found "has $.fur handles (s/^furget_/get_/);"
But if the intention is that the get_ functions of fur should be named furget_ in this class, isn't that the wrong way?
ie. shouldn't that be s/get_/furget_/?
Or do I just don't understand that, and it is meant that the fur class has its methods named furget_? 08:22
But that would be a bit strange, I think.
Matt-W I read that as saying that the class declaring the has responds to furget_ methods, but translates them into get_ methods when it passes them along to $.fur 08:25
so you call $obj.furget_foo and it delegates to $obj.fur.get_foo
flip913 Ah, so the "incoming" side is the function that should be called, and "handles" just specifies how to transform the name ... 08:26
Ok, understood.
Matt-W I think so, yes
flip913 I thought that's some kind of import declaration - "take all methods on $.fur, and import them with changed names into me."
Another one? 08:27
Matt-W no, handles is more about 'pass these methods along' than 'bring these methods in'
flip913 There's "multi sub fib(0) { return 0; }"
"multi sub fib(1) { return 1; }"
and similar
Matt-W yup
08:27 cognominal left
flip913 Is there a short way to define the type of the parameter? 08:27
08:28 drbean joined
Matt-W Well in that case the type's defined by the type of the constant used in the signature 08:28
spinclad multi sub fib(Int 0) {...}
flip913 So that fib(0) and fib(0.0) and fib(Rat(1/3)) can do different things
spinclad i venture
Matt-W spinclad: it's possible...
std: multi sub fib(Int 0) { ... }
p6eval std 28187: OUTPUT«===SORRY!===␤Multiple prefix constraints not yet supported at /tmp/8S9l7r11u5 line 1:␤------> multi sub fib(Int 0⏏) { ... }␤ expecting any of:␤ type_constraint␤ whitespace␤FAILED 00:02 39m␤»
Matt-W interesting 08:29
08:29 dukeleto joined
Matt-W std: multi sub fib (Int $i where { $i == 0 }) { ... } 08:29
spinclad std: multi sub foo(Cat Dog $pet) {...}
p6eval std 28187: OUTPUT«ok 00:03 41m␤»
std 28187: OUTPUT«===SORRY!===␤Unable to parse signature; couldn't find final ')' at /tmp/6M8LkknuS6 line 1:␤------> multi sub foo(Cat ⏏Dog $pet) {...}␤ expecting any of:␤ constraint␤ param_sep␤ parameter␤ trait␤ type_constraint␤
..typename␤FAILED 00:02 39m␤»
Matt-W so that's a possible albeit clunky alternative
you just use a where clause
I think that's quite likely for any seriously complicated case 08:30
flip913 And I'd believe that this is supposed to do type casting ... if only a fib(0) is defined, a call with "$x=0.0; fib($x)" should work, too (in absence of something more specific), no?
Matt-W rakudo: multi fib(0) { say "0"; }; multi fib($x) { say "x"; }; $x = 0.0; fib($x); 08:31
p6eval rakudo b51d94: OUTPUT«Symbol '$x' not predeclared in <anonymous> (/tmp/nQNsS7bvSz:2)␤in Main (src/gen_setting.pm:3454)␤»
Matt-W rakudo: multi fib(0) { say "0"; }; multi fib($x) { say "x"; }; my $x = 0.0; fib($x);
p6eval rakudo b51d94: OUTPUT«x␤»
Matt-W looks like it doesn't
spinclad std: multi sub fib(Int $ where * == 0) {...}
p6eval std 28187: OUTPUT«===SORRY!===␤Preceding context expects a term, but found infix = instead at /tmp/hES7cAZ8wW line 1:␤------> multi sub fib(Int $ where * ==⏏ 0) {...}␤FAILED 00:03 43m␤»
Matt-W rakudo: multi fib(0) { say "0"; }; multi fib($x) { say "x"; }; my $x = 0.0; fib($x); say $x.WHAT;
p6eval rakudo b51d94: OUTPUT«x␤Num()␤»
Matt-W mmm yes, it doesn't automatically cast Num to Int
because it could lose precision
flip913 rakudo: multi a(0) { say 0; } multi a(1) { say 1; } a(1.0); 08:32
Matt-W rakudo: multi fib(0.0) { say "0"; }; multi fib($x) { say "x"; }; my $x = 0.0; fib($x); say $x.WHAT;
p6eval rakudo b51d94: OUTPUT«Confused at line 2, near "multi a(1)"␤in Main (src/gen_setting.pm:3454)␤»
rakudo b51d94: OUTPUT«0␤Num()␤»
flip913 rakudo: multi a(0) { say 0; }; multi a(1) { say 1; }; a(1.0);
spinclad std: multi sub fib(Int $ where (* == 0)) {...}
p6eval rakudo b51d94: OUTPUT«No applicable candidates found to dispatch to for 'a'␤in Main (/tmp/hWDnGkIQJm:2)␤»
std 28187: OUTPUT«ok 00:03 40m␤»
Matt-W so it looks like fib(0.0) and fib(0) are distinct
flip913 rakudo: multi a(0) { say 0; }; multi a(1) { say 1; }; a(2);
Matt-W so that's basically what you wanted
p6eval rakudo b51d94: OUTPUT«No applicable candidates found to dispatch to for 'a'␤in Main (/tmp/EukkhzC3Y3:2)␤»
flip913 rakudo: multi a(0) { say 0; }; multi a(1) { say 1; }; a(0);
p6eval rakudo b51d94: OUTPUT«0␤»
flip913 rakudo: multi a(0) { say 0; }; multi a(1) { say 1; }; multi a(Num $a) { a(Int($a));}; a(0.0); 08:33
p6eval rakudo b51d94: OUTPUT«invoke() not implemented in class 'Integer'␤in sub a (/tmp/yW9ZjQTgYv:2)␤called from Main (/tmp/yW9ZjQTgYv:2)␤»
flip913 ok, I think I'm convinced 08:34
still, another one ;-)
(I expect you can tell that I'm reading this currently ;-)
There are subsets ...
the example is "subset Positive of Int"
Matt-W It's okay, this kind of thing helps my understanding as well
flip913 are subsets hierarchical, so that a "Positive of Int" is distinct of a "Positive of Num"? 08:35
Or are these more like roles, so that the same restriction can be mixed to another type as well?
(Like Rat, too)
The way I'm reading that it should be hierarchical, but the names must not conflict 08:36
Matt-W Positive of Int would be different to Positive of Num
but you couldn't have both, because the names would collide
as they're both called Positive
flip913 So we'd need a "PositiveInt of Int" and a "PositiveRat of Rat" and a "PositiveNum of Num" with the same constraint
08:36 ihrd left
Matt-W yes 08:36
flip913 Well, there could be a macro 08:37
Matt-W PositiveInt is usually called Natural though :)
flip913 no, the names would still collide
and what do you do to NegativeInt?
Matt-W Unnatural? :P
don't know if there's a proper name for that set 08:38
flip913 No, not the name ...
But I'm wondering whether there should be some way to clone a class hierarchy with a constraint
so eg. clone "Num" with all below (Int, Rat, etc.), all with a common constraint 08:39
Maybe I'm just confused, but I'm not sure about type casts between subsets (from PositiveInt to PositiveNum eg)
rakudo: subset PI of Int where { * > 0 }; 08:40
p6eval rakudo b51d94: ( no output )
flip913 rakudo: subset PI of Int where { * > 0 }; subset PN of Num where { * > 0 }; my PI $pi=3; my PN $pn=3.2; say $pn > $pi; 08:41
p6eval rakudo b51d94: OUTPUT«1␤»
flip913 ok, that works
rakudo: subset PI of Int where { * > 0 }; subset PN of Num where { * > 0 }; my PI $pi=3; my PN $pn=3.2; say $pn < $pi;
p6eval rakudo b51d94: OUTPUT«0␤»
flip913 rakudo: subset PI of Int where { * > 0 }; subset PN of Num where { * > 0 }; my PI $pi=3; my PN $pn=3.2; say $pn == $pi;
p6eval rakudo b51d94: OUTPUT«0␤»
flip913 rakudo: subset PI of Int where { * > 0 }; subset PN of Num where { * > 0 }; my PI $pi=3; my PN $pn=3.2; say PI($pn) == $pi;
p6eval rakudo b51d94: OUTPUT«invoke() not implemented in class 'Integer'␤in Main (/tmp/Jqw50v2zYF:2)␤»
Matt-W I'm not sure how that works 08:42
08:42 carlin_ left
flip913 rakudo: subset Integer::Positive of Int where { * > 0 }; subset Num::Positive of Num where { * > 0 }; my Integer::Positive $pi=45; 08:42
p6eval rakudo b51d94: ( no output )
flip913 rakudo: subset Integer::Positive of Int where { * > 0 }; subset Num::Positive of Num where { * > 0 }; my Integer::Positive $pi=-45;
Matt-W It's possible it could look up to the parent type for the conversion to the parent type of the new subset, and then see if it satisfies the subset constraint of the target type...
p6eval rakudo b51d94: ( no output )
flip913 oops? I'd expect an error 08:43
rakudo: subset Integer::Positive of Int where { * > 0 }; subset Num::Positive of Num where { * > 0 }; my Integer::Positive $pi=-45; say $pi;
p6eval rakudo b51d94: OUTPUT«-45␤»
Matt-W hmm
flip913 ok, subsets don't work yet
Matt-W that's a bug, I think
subsets partially work
flip913 rakudo: subset PI of Int where { * > 0 }; my PI $pi=-3; say $pi; 08:44
p6eval rakudo b51d94: OUTPUT«-3␤»
flip913 well, at least it seems to be possible to use some namespace-like hierarchy for the subset names, to avoid confusion
rakudo: subset PI of Int where { * > 0 }; my PI $pi=1; say $pi; $pi--; say $pi;
p6eval rakudo b51d94: OUTPUT«1␤0␤»
flip913 neither init nor run time checks 08:45
08:45 carlin left 08:49 carlin joined
flip913 Matt-W: Thanks for the attention, time and effort! 08:49
I'll be back with more questions, I think.
Matt-W Feel free 08:50
08:50 flip913 left
moritz_ good morning 08:58
Matt-W hey moritz_ 08:59
Guten Morgen
or is it Morgan
I always got them confused
Morgen is tomorrow?
moritz_ "Morgen" is both morning and tomorrow 09:00
"Morgan" is the name of a witch in the King Arthur tale, I believe ;-)
09:02 drbean left, drbean joined 09:07 drbean left, drbean joined 09:09 huf_ joined 09:10 huf left, huf_ is now known as huf 09:21 cotto left, cognominal joined
moritz_ I finally figured out how to draw circle arcs of arbitrary angle in SVG 09:23
which means that I can prototype a pie chart plotter for SVG::Plot 09:24
Juerd SVG++ 09:34
moritz_ indeed
I've been doing quite some fun stuff with it lately 09:35
Juerd I like how SVG brings graphics within Perl6's reach already.
09:42 ruoso left
Su-Shee why don't you fellows not just bind Cairo? 09:44
moritz_ because I kinda like SVG ;-) 09:45
arnsholt Also, I think outputting SVG is a lot easier than binding to a C library 09:46
moritz_ and so far my experiences with binding libs are small, and not very encouraging
09:49 drbean left 10:01 agentzh left
Matt-W I looked into the Parrot binding stuff for C libraries 10:02
it didn't look much fun
10:05 drbean joined
moritz_ I have a blog post about SVG stuff with a little bit Perl 6 content 10:07
should I post it in the perl 6 category, so that it shows up on planetsix? 10:08
or in misc/, so that you're not bothered with 70% SVG content?
10:10 sharada joined
cognominal rakudo: say eval "@a", :lang<perl5> 10:17
p6eval rakudo b51d94: OUTPUT«␤»
cognominal rakudo: say eval "\@a", :lang<perl5>
p6eval rakudo b51d94: OUTPUT«␤»
moritz_ rakudo: say eval '3', :lang<perl5>
p6eval rakudo b51d94: OUTPUT«␤»
moritz_ I suspect that the blizkost build is broken
cognominal yes, that what I wanted to check 10:18
10:19 jferrero left
moritz_ rakudo: say %*VM<config><prefix> 10:20
p6eval rakudo b51d94: ( no output )
Juerd moritz_: perl6 category because it shows how perl6 is useful already :)
moritz_ rakudo: say eval '3', :lang<perl5>
Juerd It's like calling a module SVG even though it's just doing XMLish stuff :)
p6eval rakudo b51d94: OUTPUT«␤»
10:20 jferrero joined
moritz_ Juerd: I'll do it, thanks 10:21
10:43 [particle]1 joined 10:44 sharada left, buubot left, Su-Shee left, SmokeMachine left, sri_kraih left, zamolxes left, RonOreck left, michaelr left, sjohnson left, hugme left, jrtayloriv left, tylerni7 left, [particle] left, allbery_b left, larsen left, c1sung left, pnu left, clkao left, ilbot2 left, avar left, hcchien left, moritz_ left, cls_bsd left, araujo left, dalek left, charsbar_ left, hcchien_ joined 10:45 clkao joined, RonOreck joined, RonOreck left, araujo joined, dalek joined, sharada joined, buubot joined, Su-Shee joined, SmokeMachine joined, sri_kraih joined, zamolxes joined, RonOreck joined, [particle] joined, charsbar_ joined, tylerni7 joined, jrtayloriv joined, hugme joined, cls_bsd joined, moritz_ joined, larsen joined, ilbot2 joined, c1sung joined, pnu joined, sjohnson joined, allbery_b joined, avar joined, michaelr joined, irc.freenode.net sets mode: +ooo araujo moritz_ sjohnson, RonOreck left, avar left, avar joined, larsen left 10:46 michaelr left, michaelr joined 10:51 RonOreck joined 10:52 pmurias joined 10:54 larsen joined 10:58 [particle] left 10:59 abra joined 11:00 hanekomu joined 11:01 carlin left
moritz_ oh wow, I managed to get a "Null PMC access in isa()" on the last line of my script, which is a ccomment 11:08
rakudo: say [+] "1 2 3" 11:10
p6eval rakudo b51d94: OUTPUT«1 2 3␤»
moritz_ rakudo: my @a = [1, 2], [3, 4]; 11:13
p6eval rakudo b51d94: ( no output )
moritz_ rakudo: my @a = [1, 2], [3, 4]; my @b := @a[0]; say [+] @b
p6eval rakudo b51d94: OUTPUT«1 2␤»
moritz_ I expected that to print 3
but it seems the binding doesn't dereference 11:14
bug in rakudo, or bug in my expectation?
rakudo: my @a := [1, 2]; say [+] @a 11:15
p6eval rakudo b51d94: OUTPUT«1 2␤»
moritz_ same here
11:20 donaldh left, donaldh joined 11:31 masak joined
viklund hello masak ;) 11:33
11:33 carlin joined
cognominal rakudo: my %a; %a{1} ='a'; say (keys %a)[0].WHAT 11:35
p6eval rakudo b51d94: OUTPUT«Str()␤»
cognominal hash keys must still be strings in Perl 6? 11:36
Juerd By default, yes 11:37
rakudo my %a{Any}; %a{1} = 'a'; %a.keys.[0].WHAT.say; 11:38
rakudo: my %a{Any}; %a{1} = 'a'; %a.keys.[0].WHAT.say;
p6eval rakudo b51d94: OUTPUT«Confused at line 2, near "{Any}; %a{"␤in Main (src/gen_setting.pm:3454)␤»
Juerd Not implemented apparently
See S09, "To declare a hash that can take any object as a key rather than just a string or integer"
cognominal ok 11:39
11:39 rfordinal left
masak viklund: be greeted, oh viklund. 11:41
viklund: long time no hackathon... 11:42
viklund masak: indeed 11:46
masak how's life and family?
did you come here due to a prophetic dream you had last night? 11:47
did I figure in it? :)
viklund ah, no, my parental leave is over so now I'm Back At Work 11:49
otherwise, good, Alva started day-care a week ago and it works like a charm
Just thought i'd pop in and see what's happening (noticed that the channel has grown) 11:50
masak it has.
we're working on a deadline nowadays. 11:51
everyone has something to do, it seems.
viklund yes, sounds like fun!
masak it kinda is.
cognominal rakudo: my %a{*}; %a{1} ='a'; say (keys %a)[0].WHAT
p6eval rakudo b51d94: OUTPUT«Confused at line 2, near "{*}; %a{1}"␤in Main (src/gen_setting.pm:3454)␤»
masak cognominal: NYI.
cognominal: same for a lot of stuff from S09. 11:52
11:55 zloyrusskiy left
masak I'm currently reading PGE source, and greatly enjoying myself. 11:57
pmichaud++
12:01 SmokeMachine left 12:03 takadonet joined
takadonet morning all 12:03
masak o/ 12:04
12:07 drbean_ joined
mberends hi masak, did you dream about proto? 12:08
masak mberends: hm, that might be why I woke up in a cold sweat... :) 12:09
moritz_ Null PMC access in find_method() 12:10
in method SVG::serialize (SVG.pm:5)
now that's interesting...
masak indeed. 12:11
moritz_: care to submit a bug report?
moritz_ sub empty { for 1..3 { 4 } }; 12:12
SVG.serialize(empty());
that triggers the bug
masak: I will, once I figured out what causes it
masak nice catch. 12:13
I'd suggest both minimizing it for a Rakudobug, and submitting a bug report to the SVG github bug tracker.
12:15 drbean left
masak rakudo: sub foo { for 1 {} }; sub bar($x) {}; bar(foo) 12:16
p6eval rakudo b51d94: OUTPUT«Null PMC access in find_method()␤in sub bar (/tmp/Wf45L47gN6:2)␤called from Main (/tmp/Wf45L47gN6:2)␤»
masak there's the bug.
moritz_ just found the same, only with a method
moritz_ submits 12:17
masak the error occurs in dispatch.
thus making it hard to fix from SVG.pm itself.
moritz_ I won't submit a SVG bug then
masak at most, we could warn about it in the README or Pod or something. 12:18
moritz_ rakudo: sub foo { }; sub bar($x) {}; bar(foo)
12:18 agentzh joined
p6eval rakudo b51d94: ( no output ) 12:18
moritz_ sent. 12:19
masak moritz_++ 12:20
12:22 drbean joined
masak Google-searching on Perl 6, I just found www.programmersheaven.com/2/Perl6-FAQ 12:25
it's complete and very informative, but 2 years old...
I can't see that it even mentions Rakudo. :/ 12:26
moritz_ and spam in the comments
cognominal jnthn++ # again 12:27
masak ah, missed the spam.
"We will be updating this FAQ over time to include more answers; particularly answers to your suggestions!"
perhaps I should try and make some...
12:29 iblechbot left
moritz_ who has write access to that page? 12:29
12:34 agentzh left, drbean_ left 12:35 drbean left 12:40 drbean joined 12:47 viklund left 12:50 viklund joined 12:51 zamolxes left 12:52 drbean left 12:54 drbean joined, drbean left, ruoso joined 12:57 eMaX left 13:01 abra left 13:03 jferrero left 13:05 sri_kraih_ joined 13:06 Eevee joined 13:08 pmurias left
takadonet Programmersheaven was my first tutorial on Perl6 13:09
13:09 drbean joined
moritz_ I think mine too 13:11
masak the Apocalypses were my first. :) 13:12
13:15 drbean_ joined
moritz_ just produced a colorful pie chart with SVG::Plot 13:16
how could I write tests for SVG::Plot?
13:18 SmokeMachine joined, drbean left
moritz_ I don't want to test for the exact output structure 13:19
13:19 eMaX joined
moritz_ because every small modification will change that 13:19
13:19 sri_kraih left, sri_kraih_ is now known as sri_kraih, drbean joined
masak moritz_: perhaps write something that loosely matches on the XML tree? 13:23
moritz_ masak: that's an idea, but I would only get *very* loose informations
like "is this text included as a label somewhere" 13:24
13:24 drbean_ left
masak I've been thinking of writing an XPath matcher for a while now... haven't had the concentration to begin such a project in earnes. 13:24
[particle]1 what do you want to test?
masak s/nes/nest/
moritz_ [particle]1: it would be ideal if I could test that now two text elements overlap, for example
13:24 [particle]1 is now known as [particle]
moritz_ or overlap with axis, labels 13:24
or are outside the canvas
or something 13:25
13:25 drbean_ joined
moritz_ but thats... hard 13:25
because I use coordinate transforms
[particle] non-trivial
moritz_ and I don't know the size of the text until it's rendered
masak "knowing the size of text" seems to be the recurring limitation of SVG...
[particle] you may get hints from Test::Image::GD 13:26
moritz_ basically a sensible piece of test code would be orders of magnitudes harder than writing the module itself, it seems
[particle] s/::GD//
masak moritz_: only because we don't have the plumbing for it.
moritz_ masak: well, it needs quite some plumbing 13:27
basically an SVG renderer
and some geometrical algorithms which search for overlaps 13:28
masak nod. 13:29
Matt-W masak: people who react to the image of Perl 6 haven't been entranced by the language itself yet, but an image that people don't like might prevent that from happening because they'll never look 13:31
13:32 _jaldhar joined, eMaX left 13:34 drbean_ left, molaf joined, drbean_ joined
masak Matt-W: granted. 13:35
but anything could be a turnoff.
Matt-W True, but image is something that's very, well, visible
masak this guy is turned off by dashes: twitter.com/mcmire/status/3743953120
(I'm not, I like them) 13:36
Matt-W I find it liberating
someone I told about said it looks like infix:<->
moritz_ masak: SVG.pm doesn't escape text - should it?
Matt-W so I gave them the rant about whitespace around operators
masak Matt-W: that seems to be the prevailing attitude of colour coders out there, too. 13:37
moritz_: yes, definitely.
Matt-W colour coders?
masak moritz_: seems you got your bug report, then. :)
Matt-W: hm, color coding algorithms. in editors.
moritz_ masak: I'd submitted a patch, not a bug report...
masak moritz_++
13:37 drbean left
Matt-W masak: oh, people writing syntax highlighters 13:38
masak Matt-W: no, the syntax highlighters themselves. :) never mind.
Matt-W oh
I don't know
perl6.vim handles it fine :)
masak exception, not rule. :)
Matt-W to be honest, if having - in identifiers makes more people space their operators nicely I'm all for it 13:39
literal hm, does that guy know that he can use ' too? :P 13:41
masak I'll let him know. :)
twitter.com/carlmasak/status/3756861260 13:42
literal hehe 13:43
colomon I have to admit dashes in identifiers strikes me as a bit weird (in though I'm sure I did it in Lisp back in the day), but I've an operator spacer ever since my days programming in Forth, so I've glad that's looking to be the Perl6 standard. 13:44
13:44 jaldhar left
masak not so much a standard as a simple rule-of-thumb to keep out of trouble. :) 13:46
rakudo: say 42*42
p6eval rakudo b51d94: OUTPUT«1764␤»
colomon Yeah, I meant standard in the SOP sense, not the spec sense.
masak rakudo: my $foo = 42; say 42*$foo*42
p6eval rakudo b51d94: ( no output )
literal the only thing that worries me is that I hope the builtins settle on a good convention, so people won't mix up the dashes and underscores when trying to remember method/parameter names
masak aye.
Matt-W yes
needs to stick to one or the other
makes the language look nicer too 13:47
and then we can pattern our third-party libraries after it as well
Form is currently a mixture
I need to switch to one or 'tother
[particle] prefers using shift only for operators and metachars 13:48
13:48 snarkyboojum joined
[particle] words should be lowercase, and shift-free 13:48
s/words/terms/
Matt-W at least on an english keyboard...
Matt-W wonders which layouts need shift or some other modifier to get -
moritz_ masak: how would you like your SVG.pm patch? bug tracker? nopaste? mail? 13:51
please don't say "pull request" 13:52
masak bug tracker, please.
the other two are fine as well, but the bug tracker has the extra advantage of being tied to the project page itself.
moritz_ github.com/masak/svg/issues/#issue/1 13:56
13:56 drbean_ left, snarkyboojum left
Matt-W github has an issue tracker?? 13:56
masak :)
since a few months back, yes. 13:57
literal since a few months ago, yeah
damn
Matt-W cool 13:58
has anybody tested what I did to Form on my holidays yet?
masak I've read the diff...
haven't tried the actual phenotype yet.
moritz_: applied, pushed, closed. thanks! 14:01
moritz_ masak: I think attributes should be escaped too
masak: (just occured to me)
14:02 jan__ left
colomon Github lets you make comments on patches, as well, as I discovered last night. 14:02
masak moritz_: waitwait, what was it you just espaced? text? :)
moritz_ masak: yes 14:03
masak should look more closely before writing commit comments
I'll see if I can fix the attr values myself. 14:04
moritz_ shouldn't be all that hard ;-)
14:06 drbean joined 14:08 molaf left
masak it wasn't. :) done. 14:09
14:11 pmurias joined
pmurias ruoso: hi 14:11
ruoso hi pmurias 14:12
14:14 Psyche^ joined
pmurias ruoso: one problem with setting a custom opcode is that the runloop uses the result of the previous opcode as the current one 14:14
ruoso but you can manipulate it
which is what you're going to do inside $interpreter.goto 14:15
pmurias how?
14:15 drbean left
pmurias ruoso: it's done after the opcode does it's stuff 14:17
ruoso pmurias, the code that calls $interpreter.goto is never a regular opcode
that always happen in SMOP land
so you're free to replace the current interpreter state entirely 14:18
(as Coro::State does)
14:20 nihiliad joined
pmurias Coro does C stack hackery 14:20
14:22 drbean joined
ruoso we might need to preserve that hackery 14:22
14:28 drbean left, drbean_ joined 14:29 Patterner left, Psyche^ is now known as Patterner 14:30 zamolxes joined 14:33 KyleHa joined
araujo hello there guys 14:34
morning
moritz_ good localtime()
pmurias hi
araujo :)
14:39 jrtaylor joined
pmurias ruoso: i don't think i understand the way the runloops should interact sufficiently to implement the interaction myself, i could help with the tedious bits if you were willing to attempt it 14:42
14:42 drbean_ left, jrtayloriv left 14:43 jrtaylor left 14:44 jrtayloriv joined 14:47 drbean_ joined 14:50 frew_ left 14:51 frew_ joined
ruoso pmurias, hmm... Ok... I think we still can work on making the p5sv before integrating the runloops 14:52
pmurias we could use the old runloop intergration as a start 14:56
15:00 justatheory joined
ruoso pmurias, yeah... I think so 15:04
15:05 drbean__ joined
pmichaud good morning, #perl6 15:06
ruoso good morning pmichaud 15:07
masak pmichaud: god morgon. 15:08
moritz_ moritz.faui2k3.org/tmp/pie-fail.svg I think proper pie chart plotting is harder than it looks at first sight ;-)
masak good start, though.
I see about three possible improvement to make right away. :) 15:09
15:09 IRSeekBot joined
masak is the code public somewhere? 15:09
moritz_ masak: in a minute it is ;-)
masak pmichaud: when you're available, I have a few small questions about PGE. 15:10
moritz_ masak: it's in SVG::Plot now, the example was generated by plot.pl
hugme: add masak to svg-plot
hugme moritz_: successfully added masak to svg-plot
moritz_ masak: and you're a commiter. Welcome ;-)
masak \o/
hugme++
[particle] who runs hugme? 15:11
masak moritz_++ does.
[particle] hugme should hug people after adding them to projects
15:11 xomas left
[particle] there's no reason to decouple those functions :) 15:11
moritz_ [particle]: nice idea ;-)
@karma hugme 15:12
lambdabot hugme has a karma of 1
moritz_ masak: I'm going to work on the text align thing first
masak moritz_: in fact, the 'successfully added' message could be replaced by a hug and a 'welcome!'
[particle] hugme++
masak: just what i was thinking
moritz_ masak: aye
15:13 larsen left, dukeleto left, lisppaste3 left, leedo left, jjore left, jrockway left
moritz_ '* hugme hugs masak and welcomes him or her to svg-plot' 15:13
masak eww, 'him or her'...
moritz_ "it"? ;-)
masak prefers '...and says welcome...'
15:13 drbean_ left
moritz_ ok 15:13
pmichaud masak: I'm available for PGE questions
moritz_ anyway, text aligning first, then hugme patches.
masak pmichaud: is 'ternary:' a fossil? 15:14
15:14 leedo joined
pmichaud no. 15:14
15:14 jrockway joined, larsen joined
masak what does it do? 15:14
pmichaud it allows parsing of ternary operators :) 15:15
it's left there for non-Perl6 languages to use
15:15 dukeleto joined, lisppaste3 joined, jjore joined
pmichaud because otherwise parsing a ternary can be kind of... tricky. 15:15
masak but no language actually uses it?
pmichaud NQP does.
masak ah.
pmichaud certainly any language that has the traditional ? : syntax is likely to use it. So I suspect pynie uses it also. 15:16
masak that explains it. I was only looking at examples withing the compilers/PGE directory.
pmichaud and perhaps cardinal as well.
15:17 donaldh left
masak next question: PGE::Exp and all its subtypes all inherit from PGE::Match, yes? and PGE::Match inherits from Capture? 15:17
pmichaud currently, yes. That whole hierarchy will likely change soon. 15:18
15:18 drbean joined
masak ok. 15:18
pmichaud ultimately PGE::Exp will be a descendent class of Capture
(with potentially some intermediates in-between)
masak but it's the properties of Capture that allows different values to be set in the PGE::Exp objects, right?
15:18 jan__ joined
pmichaud sure, a Capture is an array+hash 15:18
masak exactly.
and, in PIR, a writeable one, it seems. 15:19
I've found no way to modify a Capture from Perl 6.
pmichaud well, internally we have to have some way to build a capture :)
masak sure, sure.
in Perl 6 you have to build it all at once, I guess.
pmichaud there's a good chance that PGE::Exp and friends will become subclasses of PAST::Node somehow
moritz_ so basically a PGE capture is a Perl 6 cursor
masak pmichaud: that sounds intriguing. 15:20
pmichaud (and PAST::Node is already a subclass of Capture)
well, PGE::Exp are basically ast nodes for regular expressions
masak so this 'subclass Capture' is kind of a pattern in Parrot compilers?
moritz_ (even I understodd that ;-)
pmichaud Captures are incredibly useful... it's a pattern in the compiler toolkit 15:21
masak ok.
pmichaud it's especially useful anytime you need attribute trees
(trees where the nodes have children and a set of attributes)
masak next question: I don't understand the corou bits yet, but they seem to be used for backtracking.
pmichaud they are.
here's an example:
rakudo: my $a = '0abc0def0ghi'; $a ~~ /0./; say $/; $/.next; say $/ 15:22
p6eval rakudo b51d94: OUTPUT«0a␤0d␤»
pmichaud (yes, .next is not Perl 6 standard)
masak ooh, interesting. :) 15:23
pmichaud the match object keeps track of the state of the match. the coroutine allows us to exit with a successful match, but then we can jump back into the coroutine in order to pick up matching from where we left off
we have to have this for subrules
regex { abc <subrule> def }
masak could Perl 6 be made to emulate the coroutine behaviour... besides using gather/take? 15:24
pmichaud if 'def' doesn't match, we have to backtrack into <subrule> at the point where it left off in order to try the other alternatives
15:24 drbean left, drbean joined
moritz_ masak: actually that's what TimToady used in his early attempts to make STD.pm run on pugs 15:25
masak ah, so the coroutines allow you to "pause" the subrule matching, and continue it later?
15:25 drbean left
masak that sounds very much like continuations to me. 15:25
pmichaud masak: yes
[particle] '* hugme hugs masak. Welcome to svg-plot!'
pmichaud it is built on continuations, yes
masak [particle]: nod.
I still would very much like something like that in Perl 6. 15:26
pmichaud (emulating in Perl 6) the answer there would probably be to examine what Cursor is doing in STD.pm
15:26 Su-Shee left
pmichaud I'll be able to answer a bit more directly after I've moved PGE to be more Cursor-like (should be this month) 15:26
masak I think it's a bit limiting to only have that wonderful behaviour through gather/take. it's much more useful than that.
pmichaud: I'll be following along closely.
15:30 drbean joined 15:31 drbean left 15:35 drbean joined 15:36 sri_kraih left, drbean__ left
moritz_ bah. It seems that firefox-3.0 doesn't properly implement the dominant-baseline attribute in SVG. 15:37
15:37 colomon left 15:38 sri_kraih joined 15:39 drbean left
masak throw them a TODO ticket! :) 15:39
15:39 molaf joined, drbean joined
moritz_ when last I found a NYI feature in the SVG renderer I discovered that 3.5 already had it 15:40
masak moritz_: what does 'WIP' stand for in one of your svg-plot commit comments?
moritz_ masak: "work in progress"
masak ah. :) 15:41
15:41 fraterm_work joined
masak as opposed to finished and immaculate? :) 15:41
moritz_ as opposed to "enough implemented that the next comit might wait another couple of days"
masak ah, a partial commit. 15:42
moritz_ moritz.faui2k3.org/tmp/pie-better.svg # text-anchor at work - much better 15:43
afk 15:44
masak aye, definitely better.
I'm going to try and do something about the colours.
moritz_ that would be awesome
pmichaud bikeshedding already?
masak pmichaud: bikeshedding would be _talking_ about changing the colours. :) 15:45
moritz_ afk
15:45 drbean left 15:46 drbean joined
pmichaud masak: isn't that what you just did above? ;-) 15:46
masak (dang!)
15:48 molaf left
pmichaud is it possible for anything to appear outside of the 'CORE' namespace? 15:49
or is CORE the ultimate root of all... names? 15:50
never mind, I found the relevant text in S02 15:52
TimToady there's a sense in which the current lexical scope is the root of all names, but eventually it gets to CORE, and that leads to GLOBAL and PROCESS 15:57
pmichaud right
TimToady except
pmichaud essentially I'm trying to figure out what the package structures are
TimToady I'm thinking that GLOBAL and PROCESS should really be hanging off of UNIT
thing is, every compilation unit has its own idea of what GLOBAL means 15:58
pmichaud the key thing I was looking for was that CORE isn't a package
TimToady so those have to be meshed as a form of linkage
except insofar as you might get to it via GLOBAL::<$?PARENT> or some such 15:59
but yes, packages and lexnamepads are a bit different
pmichaud GLOBAL::<$?PARENT> would be able to get to a lexical scope? hmmmm 16:00
TimToady packages contain variables directly, while lexnamepads contain locations in the real lexpad
pmichaud oh, lexnamepad is a new term for me
TimToady well, we need to distinguish the lexpad that is the symbol table from the cloned lexpad for a closure 16:01
pmichaud god it
got it
TimToady we've been calling both of those lexpads, to great confusion
Perl 5 count them as two different things
pmichaud so lexnamepad is sort of the schema or template for the lexical symbols declared within a closure
TimToady in P5, the scratch pads are all indexed by offset 16:02
pmichaud and the lexpad is the actual name bindings at runtime
TimToady and the 0th scratch pad happens to contain names instead of containers
it's and array of arrays of entries
*an
pmichaud sure, I see how p5 does it 16:03
TimToady so the names just happen to have the same offset in the 0th pad as the actual variable in the nth pad
pmichaud makes sense to me
TimToady and cloning involves adding another n+1th pad
but it's partly because of that structure that the concepts were muddled in my head
so I ended up calling them both lexpads 16:04
pmichaud in Parrot our "lexnamepad" is called a LexInfo
TimToady that works
16:04 lollan joined
TimToady lexsymtab is a bit unweildy 16:04
pmichaud so one can talk about the LexInfo of a sub or block without having to have an instantiated LexPad
chip++ came up with LexInfo, I believe 16:05
(as a name, as well as the implementation design for Parrot)
TimToady anyhoo, I've been trying to keep packages and lexinfos as similar as possible
except for the extra indirection, which STD doesn't worry abou tyet
pmichaud okay, that helps
I can at least build an approximation of much of this now; it will likely take us a few iterations in Rakudo to get it to match the spec 16:06
I left a question for you in backscroll, also -- will repeat it here
lollan Hi guys, I've just read the presentation about SMOP it's kind of WoW.
TimToady so probably the difference is just between carrying a pointer to the container vs an index to the container in the lexpad 16:07
16:07 xomas_ joined
TimToady World of Warcraft? 16:07
16:07 hanekomu left
pmichaud 05:17 <pmichaud> TimToady: for contextual variables, after we scan outward and reach the GLOBAL package, do the symbols in GLOBAL retain the twigil or do we strip it at that point? 16:07
05:18 <pmichaud> i.e., would $*FOO look for GLOBAL::<$FOO> or GLOBAL::<$*FOO> ?
I'm guessing the latter, based on other things I've read
namely, PROCESS::<%*ENV> 16:08
16:08 alester joined
pmurias lollan: which one? 16:08
TimToady thinking how they'll be used in the main program (which starts in GLOBAL package), we may need a way for the starless form to work 16:10
pmichaud ....we want all variables declared in the main program to be contextual?
lollan pmurias: it's called Perl6 is just a SMOP.
pmichaud (that's fine.... just verifying)
TimToady if they say 'my $*FOO' then we know they mean the UNIT scope, but if they say 'our $*FOO', they mean GLOBAL:<$*foo>, but it installs a lexical alias 16:11
which could conceivably cause trouble
lollan it gets you exited about joining but my level is way too low lol
pmichaud I'm thinking about the case of 'our $FOO' 16:12
TimToady but if they say our $FOO in the GLOBAL package, they probably would like to access it
there's always $GLOBAL::FOO, but
maybe 'our $*FOO' shouldn't alias into MY
seems strange
pmichaud agreed; I was wondering about our $*FOO last night 16:13
TimToady now thinking about always losing the * in the package
doesn't help if they declare 'our $*FOO' in GLOBAL, but it helps if they say our $FOO 16:14
and we lose the star for the %ENV fallback
pmichaud so, PROCESS::<%ENV> ?
TimToady so maybe it makes sense to lose the star at the lexical->package transition instead
pmichaud that's where I was initially headed when it occurred to me the star would be in the packages 16:15
TimToady that's what I'm thinking is maybe the best way
pmichaud previously Rakudo has not had the star in its package symbols (but that heralds from when the * twigil meant 'global' and not 'contextual')
TimToady well maybe it should stay that way 16:16
pmichaud I can try it sans-star and report if I run into any problems
it won't be hard to switch
TimToady sounds good
masak phenny: tell moritz_ that I refined the colors of SVG::Plot a bit. 16:19
phenny masak: I'll pass that on when moritz_ is around.
16:19 rfordinal joined 16:22 M_o_C joined
pmichaud how tied is %*ENV to the underlying environment? (more) 16:26
for example, if I do
%*ENV<xyz> = 1.5; say %*ENV<xyz>.WHAT
do I get "Num()" or "Str()" ? 16:27
(or "Rat()") 16:29
16:29 _jaldhar left, cotto joined
masak I could argue either for "what you put in" or "Str". 16:30
pmichaud so can I, thus the question. :) 16:31
moritz_ masak: thanks 16:32
phenny moritz_: 16:19Z <masak> tell moritz_ that I refined the colors of SVG::Plot a bit.
masak pmichaud: the former solution feels both more permissive and simpler. 16:33
pmichaud sooooo
if I did: %*ENV<xyz> = $regex.match($foo); 16:34
then %*ENV<xyz> would give me back the match object, but subprocesses would see the stringification of the match object in their environment
masak 对. yes. 16:35
pmichaud do we have to deal with the possibility of binding ?
%*ENV<xyz> := $a; $a++; # ??? 16:36
16:37 ruoso left, stephenlb joined
pmichaud oh, wait, that probably answers it altogether 16:37
pmichaud looks
masak it feels to me that is a question pertaining to all special kinds of Associative things, not just the %*ENV hash.
pmichaud in the case of %*ENV, we have the possibility of 16:38
my %*ENV = ('xyz' => foo); run("bar");
which to me says that the sub program should see an environment consisting _only_ of 'xyz' => 'foo' (modulo my syntax error above) 16:39
16:40 [particle]1 joined
pmichaud which means we probably need to set the environment at the point of the run call 16:40
as opposed to trying to do it at the point of the declaration/assignment
masak as long as &run is the only point where that is needed...
pmichaud there are others
basically anytime we find ourselves bouncing into external (non-Perl 6) libraries or subprocesses 16:41
masak nod.
16:43 zamolxes left, [particle] left
moritz_ finds it somewhat pleasing that one of the colors in SVG::Plot survived masak++'s revision ;-) 16:45
masak moritz_: I started from that one, and aligned the other ones to that color. :) 16:46
16:46 synth joined
moritz_ masak: it would have been fine by me if you had altered them all, added more or whatever 16:47
pmichaud ...can I see pretty pictures?
or do I have to clone+install+run to do that?
moritz_ pmichaud: just a second
pmichaud wants to bikeshed too!! :) 16:48
moritz_ moritz.faui2k3.org/tmp/pie-even-better.svg
pmichaud: bikeshed patches are very welcome ;-)
pmichaud interesting 16:49
masak moritz_: wow, how do you calculate the line lengths? 16:50
16:50 synth left, synth joined
moritz_ masak: simply alternating 16:50
masak oh :)
pmichaud heh!
interesting heuristic 16:51
moritz_ the next revision makes the dashes grey
masak I think in the general case, one must MCMCMC a little to make the things not collide.
moritz_ MCMCMC? 16:52
masak en.wikipedia.org/wiki/Markov_chain_Monte_Carlo
16:52 fraterm__ joined
masak don't recall just now what the last 'MC' stood for. 16:52
16:52 fraterm_work left
masak the term I was after is really 'hill climbing'. 16:53
moritz_ Mäsak, Carl
masak :P
moritz_ ;-)
masak is this an elaborate ruse to make me make more commits? :P
16:53 ooo joined
moritz_ could be, but I'd never admit it. 16:53
masak also wise.
arnsholt What are the semantics of | in |%_? 16:56
moritz_ foo(%a) passes one positional parameter
foo(|%a) passes all pairs in %a as named arguments
s/parameter/argument/
arnsholt Yeah, that's what I thought 16:57
Then I'm doing something else wrong =)
pmichaud rakudo's support for | is still a bit shaky sometimes
masak any particular reason we don't use * on the calling side for flattening? :)
pmichaud hmmm? 16:58
moritz_ masak: yes, ETOOMANYUSESOF*
pmichaud oh, yes.
originally it was *
it got changed
masak it didn't work?
pmichaud if we use * on the calling side, we lose Whatever
masak oh.
moritz_ do we?
TimToady certainly
synth but but thats operator overloading
masak I don't immediately see why.
moritz_ does term:<*> conflict with prefix:<*>?
pmichaud can't have * in both prefix and term position
TimToady can't have term/infix ambig
masak oh, right. 16:59
now I see it. :)
moritz_ too
TimToady at best, Whatever could respond to .()
same as types
[particle]1 just overload x to multiply numbers 17:00
TimToady and other values
17:00 [particle]1 is now known as [particle]
moritz_ *($a) is currently specced as identity 17:00
don't know if I like it
TimToady that's kind of a fossil, currently
moritz_ *($a) could also mean $_.($a)
pmichaud I'm not sure that I like *($a) at all.. not sure why it's there 17:01
arnsholt At any rate, I'm overriding .parse($str) in my Grammar, and dispatch with nextwith($str, |%_)
17:01 ooo left
pmichaud arnsholt: it's very unlikely that nextwith will work with parse 17:01
moritz_ pmichaud: @array_of_closures.sort: *.(5) is just too tempting ;-)
arnsholt When I try to run it, I get "invalid arg type in named portion of args\nin method SQL::Grammar::parse (./lib/SQL/Grammar.pm:120)"
pmichaud because the built-in .parse isn't a rakudo multimethod
(it will eventually work, yes; it just doesn't work today) 17:02
arnsholt Right. That's what I feared
pmichaud perhaps moving the parse method from builtins into the setting would work
anyway, feel free to file a rt ticket that 'nextwith doesn't work with .parse' 17:04
17:05 masak left
arnsholt Yeah, I'll do that 17:05
In the meantime, any suggestions for calling Grammar's parse from my subclass? 17:06
moritz_ maybe you can try to get it by introspection?
see the t/spec/S12-introspection/*.t test for what is implemented 17:07
pmichaud I don't have an immediate suggestion, no. Sorry bout that 17:08
perhaps you could call your method something other than 'parse' for the time being?
(I don't like that answer either)
arnsholt Well, it's a better idea than doing nothing =) 17:09
17:09 frew__ joined
pmichaud let me see how hard it'll be to move parse 17:09
arnsholt Huh. A more barebones thing gets me a Null PMC access 17:10
pmichaud oh!
Grammar.parse is visible
so you might be able to do
Grammar::parse(self, $str, |%)) 17:11
s/)// 17:12
that might fail when Parrot fixes its method definitions to not automatically stick them in the namespace, but it'll work for now
17:14 abra_ joined
pmichaud (and hopefully by the time Parrot does its fix we'll have already fixed Grammar::parse) 17:14
arnsholt Hmm. But now $/ isn't set correctly. Any way to do that? 17:15
pmichaud not easily 17:16
we don't have OUTER:: implemented yet to be able to do that rebinding
er, CALLER::
arnsholt 'k. That's pretty easy to work around though. I'll just return $/ from the overriding .parse 17:17
pmichaud although there's a _chance_ that we can start to get CALLER:: to work now that Parrot has its contexts as PMCs
afk, lunch 17:21
17:24 payload left 17:26 frew_ left
pmichaud just a note here that having contextuals automatically look up values in %*ENV makes me a tiny bit uncomfortable (more) 17:26
it reminds me a bit of PHP's 'register_globals' and/or its superglobals, which of course have been huge sources of security problems 17:27
afk, lunch 17:28
17:32 abra_ left 17:34 abra joined
moritz_ pmichaud: same here (uncomfortable) 17:41
17:51 payload joined
s1n rakudo: class A { has $.foo = 'bar'; multi method foo(Str $test) { say $test }}; my $a = A.new; $a.foo("oh hai") 17:56
p6eval rakudo b51d94: OUTPUT«push_pmc() not implemented in class 'Sub'␤»
s1n rakudobug?
17:57 synth left
moritz_ known bug 17:58
Ovid++ reported it a few months back
hm
oh wait
I think in Ovid's case it was not a mulit method, just a single one (iirc) 17:59
s1n: I'm not sure. So in case of doubt, please report
has $.foo installs a method foo 18:00
but IMHO it should be a multi
s1n submits
18:09 lollan left
japhb git question: How do you map from a path name to a file in a working copy back to the associated SHA-1 (without recomputing the hash, I mean)? 18:11
lambdabot japhb: You have 1 new message. '/msg lambdabot @messages' to read it.
japhb diakopter, pong (sorry, didn't see your message earlier)
18:14 colomon joined 18:26 Confield joined 18:29 __ash__ joined
__ash__ is there a way in perl6 rakudo to drop down to PIR 18:29
18:31 Psyche^ joined
alester Today's sad sad sad commentary: www.reddit.com/r/programming/commen...?context=3 18:33
18:35 molaf joined
s1n alester: why do you engage with these people? it's like they're getting some sort of validation by spewing that garbage 18:36
alester The people that say it's bad if it's feminine?
s1n alester: yes, it's one thing to not like a butterfly, but to make slurs and say that we need Satan for a mascot because it's masculine?? that seems like a waste of time to even talk to them 18:37
alester: that's some of the most immature conjecture i've read about perl6, i don't think there's anything you can say to convince them to remove their head from their bum 18:39
alester I didn't reply to the 2nd guy.
pioto what's the 'auth' about in: grammar STD:ver<6.0.0.alpha>:auth<perl.org>; 18:42
author?
s1n i wouldn't even converse with them, besides, it's not like larry is going to change it so what do they expect to happen?
alester s1n: I'm not optimizing for my own time. 18:43
s1n -Ofun?
alester I don't expect that the initial guy is going to change his mind. However, I do expect that others will read it.
huf there, i added more gasoline to that reddit thread :) 18:45
s1n huf: i concur 18:47
18:48 Patterner left, Psyche^ is now known as Patterner 18:50 pnu left
huf i still think the string "Perl6" in fixed font is the best logo you could hope for ;) i'd be fine with any mascot 18:50
moritz_ more bikeshedding. Just what we need. 18:52
alester It's outside bikeshedding. 18:53
cognominal The Rorschach test is of no use of anymore because of the wikipedia, hopefully we have TimToady and the camelia 18:54
japhb pioto, "author(ity)" -- whoever "owns" that release, in some sense
18:54 literal left 18:55 literal joined
pioto japhb: that seems like a very vague concept. what's the utility? 18:55
18:55 literal left
moritz_ cognominal: the Rorschach test can still be used to identify exterme personalities. And that's what it's always been good for 18:55
japhb pioto, I don't know all the reasons off the top of my head, but the simplest one that comes to mind is knowing which side of a fork you're following. It's like namespacing the version numbers. 18:56
18:56 pnu joined
pioto right. "fork isn't a dirty word anymore" 18:56
18:56 literal joined
pioto so, autodie would check that it has the right autodie by checking the auth? 18:57
err, the right Fatal
18:57 literal left
pioto (i dunno if they actually forked it, or what, but that's the only example that popped to mind) 18:57
18:57 literal joined
japhb pioto, when you 'use', it grabs the right one, according to your spec. 18:58
You can have both installed on the system. 18:59
In fact, you can even use both of them in the same process!
pioto oww.
but, not in the same scope, presumably.
japhb (For example, if two different modules used by your main program wanted different forks of some module they both depend on.)
pioto rather, that wouldn't likely do what you want.
yeah, ok. makes sense. 19:00
19:02 M_o_C left, pnu left
cognominal moritz, my point is that comments about the camelia tells a lot about the people who make them 19:06
alester Any comment that starts "I'm no homophobe..."
moritz_ cognominal: that's a valid point 19:07
19:07 __ash__ left 19:08 M_o_C joined
pmichaud back from lunch 19:11
I think one can use two same-named modules in the same scope even... but everything ends up having to be longnamed in order to do that 19:14
(i.e., it wouldn't be all that pretty :-)
s1n ahahaha, i made a quickie logo with my horrid gimp skills: s1n.dyndns.org/perl6.jpg 19:16
pmichaud I like it 19:17
I'm not so sure about the UPC code, though :) 19:18
s1n it was true with perl5 and it'll be true with perl6 :)
yeah that was just me learning how to take something off and add my own text
i'm sure there are others with better artistic skills than i that could re-image that
19:18 pnu joined 19:22 icwiener joined 19:29 M_o_C left 19:32 jferrero joined 19:33 pnu left 19:40 drbean left, drbean joined 19:41 __ash__ joined 19:42 __ash__ left 19:43 abra left 19:50 pnu joined
cognominal sln, "made in indonesia", is that some Java in disguise? 19:52
19:52 rfordinal left 19:53 cdarroch joined 19:55 quietfanatic left 19:56 sharada left 19:58 iblechbot joined
Tene pmichaud: re twitter: eh? 20:02
TimToady subliminal advertising, I guess 20:03
Tene the 'rakudo' account on twitter seems to be nonsense.
pmichaud ohhhh
I'm playing with twirssi -- sent the tweet to the wrong place 20:04
fixing
TimToady twirssi?!?!
but will it do the cute face pictures?
pmichaud twirssi is an extension to irssi that allows tweets and updates in irssi 20:05
I already have an alias to send twitter messages to @rakudoperl from my irssi window, I accidentally triggered it
(removing that alias now :-)
TimToady you should tweet an unsubscribe now to undo whatever you did 20:06
Tene obviously 20:07
pmichaud heh
I removed the tweet; we'll just let everyone else guess
20:08 donaldh joined 20:09 pmurias left
pmichaud afk, fetching ice cream 20:09
[particle] ^ git fetch icecream 20:11
20:13 synth joined 20:16 rfordinal joined 20:18 sharada joined
dalek kudo: 3db3e37 | moritz++ | build/gen_setting_pm.pl:
[build] be a bit more idiomatic in gen_setting_pm.pl
20:24
20:42 takadonet left 20:57 icwiener left 20:58 frederico joined 20:59 rfordinal left, donaldh left 21:00 jlmoko joined 21:02 timbunce joined 21:03 zamolxes joined, ruoso joined
timbunce The graph of Rakudo Spectest Progress on rakudo.org/status seems oddly compressed in the horizontal axis. The image is much wider than the graph. Any reason for that? Is it possible to get a wider version? 21:05
moritz_ timbunce: the reason is that GD::Graph does no sub pixel rendering
timbunce: rakudo.de/ has a non-stacked version plotted with gunplot 21:06
timbunce: I can also try to use SVG::Plot to generate one that's a bit wider, if that's of any help
timbunce moritz_: the rakudo.de version will do me nicely - thanks! 21:07
21:11 PacoLinux left, frederico left
moritz_ I pushed a new branch to github, split-gen-setting 21:13
it's a step towards compiling each setting file separately 21:14
21:14 PacoLinux joined
pmichaud moritz_: (haven't looked at the branch) fwiw, I think I'd like the src/gen_* files to go into their own subdirectory 21:16
I was going to do it that way to begin with, but I let other folks talk me out of it at the time.
moritz_ pmichaud: my branch uses src/gen_setting/*.pm for now 21:17
pmichaud *.pir, you mean?
moritz_ *.pm
pmichaud what's the purpose of the *.pm files?
moritz_ adding a 'no Main;' to each
pmichaud oh
that's going to change anyway 21:18
moritz_ so I don't need the step I've beeon working on. Great.
pmichaud perhaps better would be to just add "no Main;" to each of the src/setting/*.pm files directly
moritz_ aye
anyway, off to bed now
pmichaud ultimately they'll need to say 'CORE' instead 21:19
moritz_ will work a bit on it tomorrow
21:20 Whiteknight joined 21:21 synth left 21:28 nihiliad left 21:35 masak joined
masak in response to a tweet of mine saying that people are shocked by Perl 6's image because they are used to programming languages which take themselves too seriously, I got this back from a good friend of mine, who happens to be female: twitter.com/giiku/status/3762841239 21:37
someone willing to make a picture for such a t-shirt? :)
sharada This person has protected their tweets. ??? 21:38
pmichaud I can't see the response
masak oh, dang.
Tene I don't know what it says, but I'll take any photos you want.
masak the tweet was "@carlmasak Hell, if anything, it's not enough. I know I'd get a Perl 6 t-shirt if it sported a cute manga-style girl with butterfly wings." 21:39
Tene ah, "make", not "take"
Tene reading fail.
masak :)
21:39 _timbunce joined
Tene I'll pass it on to one of my gfs. She likes manga-style drawing. 21:39
masak excellent. 21:40
21:40 timbunce left, _timbunce is now known as timbunce
pmichaud if given an image, I can put it on the t-shirt shop, too :) 21:41
masak pmichaud: in t/compilers/pge/perl6regex/rx_quantifiers, lines 208-210, should '**?' in the test description perhaps be '**' instead? (copy/paste error?)
PerlJam (masak's friend)++
21:41 tak11 joined
masak should I tell her that we're working on a t-shirt for her? 21:42
pmichaud masak: Yes.
yes to test description, that is
masak gotcha.
pmichaud as far as "working on t-shirt".... I can't do anything until there's an image :) 21:43
PerlJam I wonder if I could get my brother to draw such a thing.
masak draw several! it'll probably need to go through some iterations anyway, just like everything else.
21:43 fraterm__ left
masak pmichaud: I can try and patch it if you like. I haven't had Parrot commit access for quite some time. 21:46
pmichaud masak: I can take care of it, no problem (and thanks -- masak++) 21:47
I have the file open already :)
masak goodie.
21:50 M_o_C joined
PerlJam I just talked to my brother on the phone and he's going to try to draw a manga-style girl with butterfly wings that look just like Camelia's. 21:52
pmichaud cool
PerlJam (He's kinda shy about his drawing though he does it quite prolificly)
pmichaud we don't have to give him credit if he doesn't want it :)
PerlJam heh
Well, I figure since he's always drawing *something*, why not try to direct him towards drawing something *useful* to us. :) 21:53
pmichaud PerlJam: agreed! 21:54
I can certainly forward royalties, if any show up :)
mberends does the latest Rakudo commit pass all spectests? 36 scripts fail here after realclean etc. 21:55
colomon Last I checked, arith.t was failing a bunch of tests.
PerlJam btw, I don't know how many of you have played with Padre, but I'm liking it more and more. It's got some quirks, but it's also got some really neat features. (and it is only at 0.45)
colomon Think that was yesterday?
pmichaud mberends: it sometimes requires doing a complete rebuild of parrot 21:56
i.e., remove any parrot and parrot_install subdir and try again
Parrot's "make realclean" isn't always as really clean as we'd like it to be
PerlJam make super-duper-clean
masak make splode 21:57
mberends pmichaud: thanks, will do. super-duper-extra-ultra-clean
colomon rakudo: say sin(pi/2.0 + 0i);
p6eval rakudo 3db3e3: OUTPUT«1␤»
pmichaud anyway, I've been doing builds and spectests against parrot trunk (+ my modifications) all morning w/o significant failure
colomon rakudo: say sin(pi/2.0 + 1i)
pmichaud (right now I'm working on contextuals. it's taking longer than I had planned)
p6eval rakudo 3db3e3: OUTPUT«0.957871453708344␤»
PerlJam gah, now my facial hair smells like BBQ and I'll be salivating for the rest of the day unless I get it to not smell that way 21:58
pmichaud PerlJam: try tomato paste
colomon Oooo, do we still have the bug where Complexes mysteriously turn to Nums?
pmichaud I hear that takes the... oh, wait, that's for eliminating skunk smell
colomon: Parrot likes to do that, unfortunately :-(
PerlJam pmichaud: I could pour Dr Pepper on my face .... it's acidic just like tomato paste :) 21:59
colomon pmichaud: It's great when the complex has a 0 imaginary part, but sucks the rest of the time.
pmichaud Parrot's "get_number" function for Complex PMCs likes to return the magnitude of the imaginary vector
colomon I wanted to check because I was getting mysterious successes for sin(Complex).
pmichaud so yes, works great when $foo.im == 0, bites us when it's not.
22:00 angoladon joined
colomon Okay, just wanted to check on that quickly. Still working on getting an improved suite of sin tests when I get the chance. Should have a pretty full set soon, then I'll take a look at actually making them work. :) 22:01
afk
22:04 Whiteknight left
PerlJam "sin tests"? Is that like when the snake tempts you to eat the fruit of knowledge? 22:04
22:06 angoladon left
pmichaud afk, travel 22:13
masak PerlJam: it must be, if you ask me. they're like ordinary TAP tests, but instead of 'ok' and 'not ok', you have 'well, one bite cannot hurt' and 'get behind me, serpent', respectively. and there's no plan. 22:14
22:15 KyleHa left 22:19 alester left 22:27 molaf left 22:28 SmokeMachine left 22:29 dukeleto left
colomon rakudo: say sin(-3.0 + 0i); say sin(-3.0); 22:34
p6eval rakudo 3db3e3: OUTPUT«0.141120008059867␤-0.141120008059867␤»
colomon rakudo: say sin(-3.92699 + 0i); say sin(-3.92699); 22:35
p6eval rakudo 3db3e3: OUTPUT«-0.707106203489093␤0.707106203489093␤»
22:37 timbunce left
masak mmm... in any project, as soon as you start passing tests, it feels like you're _doing_ something. 22:38
I think that's what I like about TDD the most, that right from the start, you're doing something.
colomon TDD is definitely keen for this sort of math library work. It's just the right level of testing for it. 22:41
22:41 iblechbot left 22:42 cdarroch left 22:45 sharada left 22:53 rbaumer joined
TimToady it also tends to flush out spec issues right at the beginning 22:53
masak speaking of which... 22:56
what's the behaviour of calling &break outside of a block of some kind? 22:58
Juerd usually writes code without any specification or even a clue as to where the project's going
TDD doesn't really work when there's no clarity over how things should behave :) 22:59
masak even without a spec, there can still be clarity as to specific use cases :) 23:01
why, this Monday, I threw together github.com/masak/perl6-literate -- and I wrote/implemented three tests for it. that's all it needed, but I'm really glad I did it that way. 23:02
the third test contained a surprise which I probably would have found 'the hard way' had I not used TDD. 23:03
23:03 dukeleto joined
masak time for some beauty sleep. & 23:11
23:11 masak left 23:50 tomd joined 23:51 tomd left