»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or /msg camelia p6: ... | irclog: irc.perl6.org or colabti.org/irclogger/irclogger_log/perl6 | UTF-8 is our friend! 🦋
Set by Zoffix on 25 July 2018.
xq on the page docs.perl6.org/language/modules link in section 'use' that says 'here' doesn't work - it's pointing to 'Finding modules' when it should point to 'Finding installed modules' 00:17
docs.perl6.org/language/modules#use
MasterDuke xq: if you don't feel like submitting a PR, could you create an issue? github.com/perl6/doc/issues 00:18
Skarsnik ok, I removed emiting an array and just emiting each $event and it work :( 00:19
anyways time to sleep xD
ryanth Is there any reason at all why postfix for 1 .. $max would be slower than for 1 .. $max { ... } ? 00:23
I'm still trying to isolate it enough for a decent benchmark, so I might be imagining things at this stage. 00:24
guifa Is it slow if the postfix version is encased in a block? { … } for 1 .. $max? 00:26
ryanth Good question. I'll check that, too. 00:26
MasterDuke ryanth: i think pre- and post- for should compile to the same code. however, introducing a new scop with {} is frequently slightly slower 00:29
ryanth Seems you're right. Adding new scope is a lot slower, actually. $dummy = $_ vs { $dummy = $_ } is 0.9s vs 14.73s on a loop of 10_000_000 00:32
postfix or not doesn't seem to matter 00:33
Of course that difference would largely evaporate if my loop was actually doing anything :-)
MasterDuke wow. wouldn't have expected that much difference
m: my $a; $a = $_ for ^1_000_000; say $a; say now - INIT now 00:35
camelia 999999
0.6813657
MasterDuke m: my $a; { $a = $_ } for ^1_000_000; say $a; say now - INIT now
camelia 999999
0.7293779
guifa makes mental note, avoid new scopes for big loops 00:36
ryanth Interesting... much smaller difference than I'm seeing
MasterDuke ryanth: what version of rakudo are you using? 00:37
ryanth > perl6 --version 00:38
This is Rakudo version 2019.03.1-46-g6d8077cec built on MoarVM version 2019.03-35-gd15906711
implementing Perl 6.d.
(Built earlier today)
MasterDuke huh. i would assume outside influences then for a difference that big 00:41
ryanth I'd buy that, but it's very consistent. (Just a small bit of normal noise in the results.) 00:42
MasterDuke can you --profile the two versions and check if there's anything obvious? 00:46
ryanth Sure 00:47
guifa “This type (QAST::WVal) does not support positional operations” (but no line number :( ) 00:51
cpan-p6 New module released to CPAN! Font-FreeType (0.1.8) by 03WARRINGD 00:52
ryanth MasterDuke: Alright, I definitely have some weirdness here. My code no longer takes 14x longer to run loops with scope. Trying to get a more reproducible problem... 00:53
MasterDuke guifa: using --ll-exceptions ? 00:56
ryanth The problem is in my timing code! my $start = now; ... say now - $start; works fine the first time, but if I do that again in the same scope, I get a value ~10x what I expect. 01:00
BUT it DOES actually take 10x as long.
guifa weird error message 01:01
But I figured it out
p6: my @foo = 2,3,4; my $bar = 1; @foo.prepend:($bar) if $bar 01:04
camelia ===SORRY!===
This type (QAST::WVal) does not support positional operations
guifa p6: my @foo = 2,3,4; my $bar = 1; @foo.prepend: ($bar) if $bar
camelia ( no output )
guifa Sneaky little typo
egads, even sneakIER without parentheses 01:06
p6: my @foo = 2,3,4; my $bar = 1; @foo.prepend:$bar if $bar; say @foo;
camelia [2 3 4]
guifa p6: my @foo = 2,3,4; my $bar = 1; @foo.prepend: $bar if $bar
camelia ( no output )
guifa p6: my @foo = 2,3,4; my $bar = 1; @foo.prepend: $bar if $bar; say @foo
camelia [1 2 3 4]
MasterDuke ryanth: you're re-assigning a new now to $start? 01:07
or, can you show the code that you're using?
ryanth I've done that, and also tried a new my $start2 = now, etc. I can post the code... pastebin ok? 01:08
MasterDuke sure 01:09
ryanth pastebin.com/Ma8uSPgF 01:10
The first ~8 lines are enough to show the problem for me, MOST of the time. 01:11
It'll either run in ~1 sec, or 4 sec.
And it's *always* the second (and subsequent) loops that are slow
ryanth So far all I know it doesn't have anything to do with postfix vs normal for loops, nor does now() matter 01:13
MasterDuke i get essentially identical times for all cases 01:14
when i remove the exit
ryanth Have you run it a bunch of times? It'll run normally a few times in a row sometimes. 01:15
MasterDuke 15 times in a row. everything was 0.1 plus/minus .01 01:16
ryanth That is interesting.. thanks for testing! Either I picked a bad time to build, or something *really* weird is going on with my Ubuntu box. I'll maybe roll back to 2019.03 and see if that's any different. 01:19
MasterDuke fwiw, i'm also at HEAD and on kubuntu 18.10 01:20
ryanth: you could try with perf stat or callgrind. those give instruction counts and you could see if that metric is also very different, not just time 01:21
ryanth Interesting. Same here, except I'm on xubuntu 18.10, which shouldn't matter. 01:22
Alright, I'll give that a shot.
kawaii is `(10000...99999).rand.Int` the most direct way of getting a random 5 digit number? it works but just looks... like I took the scenic route instead of the most direct one 01:27
MasterDuke m: say rand 5 01:28
camelia 5===SORRY!5=== Error while compiling <tmp>
Unsupported use of rand(N); in Perl 6 please use N.rand for Num or (^N).pick for Int result
at <tmp>:1
------> 3say rand7⏏5 5
MasterDuke kawaii: oh, and you want to use '..' instead of '...'. the sequence operator is much slower 01:32
ugexe m: say (^9).rand.Int xx 5 # maybe reads a littler more obvious its specifically 5 digits and works with numbers with leading zeros 01:34
camelia (8 7 8 1 0)
ugexe ^10 rather
ryanth MasterDuke: Been a while since I set up perf. I can't remember how to get cycles/instructions/etc. to show up. So it's taking me a little while... 01:36
(That is, `perf stat $cmd` shows <not supported> for cycles, instructions, branches, and branch-misses)
MasterDuke ryanth: hm. works for me. don't remember if i had to set anything up though 01:38
ryanth My guess is it's a virtualization issue, as this particular install is a VM. I can run it on a dedicated box, but I'll have to rebuild rakudo 01:39
MasterDuke that might explain it, i'm on bare metal 01:40
ryanth Alright, I've done about all I can do for now then, until I can free up an 18.04 box to test with. Thanks for your help. 01:46
MasterDuke np 01:47
Herby_ o/ 02:07
guifa Given the signatures foo(Str() bar) and foo(Callable bar) is default, how is foo(* + *) sent to the Str one instead of the Callable? 02:19
ugexe m: multi sub foo(Str() $bar) { say 1; }; multi sub foo(Callable $bar) { say 2 }; foo(* + *) 02:23
camelia 2
guifa weird 02:24
ugexe which one do you have first in your source code?
the order is important
guifa oh wait, I figured it out. I was overtyping. I had “Callable &foo” and … it didn’t like that. Either dropping Callable or using the $ sigil made it work 02:26
Geth doc: c9c28134fd | (JJ Merelo)++ | 3 files
Minor fixes and reflow
09:05
doc: cba74fec13 | (JJ Merelo)++ | doc/Type/StrDistance.pod6
Fixes StrDistance, refs #2683
SmokeMachine Xliff: github.com/FCO/Red/issues/15#issue...-474745855 09:10
SmokeMachine .tell Xliff github.com/FCO/Red/issues/15#issue...-474745855 09:16
yoleaux SmokeMachine: I'll pass your message to Xliff.
kawaii Good morning! I'm trying to constrain an array (used as a named parameter) to contain only ENUMs, I tried doing `method analyze(:$comment, MODEL :@models) {` and then setting my array like `my @models = MODEL::TOXICITY, MODEL::SPAM;`, which returns the following error: `Type check failed in binding to parameter '@models'; expected Positional[MODEL] but got Array ($[MODEL::TOXICITY, MO...)`. 09:26
sena_kun you have to explicity initialize your array 09:29
like, `Array[MODEL].new(foo, bar, baz)`
sena_kun as typecheck doesn't infer args 09:29
m: sub a(Int @a) { say @a }; a(Array[Int].new([1,2,3])); 09:30
camelia [1 2 3]
sena_kun m: sub a(Int @a) { say @a }; a([1,2,3]); 09:31
camelia Type check failed in binding to parameter '@a'; expected Positional[Int] but got Array ($[1, 2, 3])
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
kawaii sena_kun: like this? `my @models = Array[MODEL].new(MODEL::TOXICITY, MODEL::SPAM);`
sena_kun m: enum MODEL <A B>; sub a(MODEL @a) { say @a }; my MODEL @models = Array[MODEL].new(A, B, A); a(@models); 09:32
camelia [A B A]
sena_kun m: enum MODEL <A B>; sub a(MODEL @a) { say @a }; a(Array[MODEL].new(A, B, A)); 09:33
camelia [A B A]
sena_kun kawaii, ^
kawaii sena_kun: worked, thanks :) 09:44
sena_kun \o/
xinming m: 09:49
evalable6
xinming m: $_ = %(:a<b>); $_.<a>.perl.say;
camelia "b"
xinming What is the difference between $_.<a> and $_<a>?
moritz nothing
xinming Ok, Thanks.
Altreus how does one constrain an array by type? 10:02
When we converted (:@models) to (MODEL :@models) it said... oh hang on
sena_kun `MODEL @models` should be enough. 10:03
and, actually, it is Positional[MODEL] type of constrain. if you certainly want an array, then `Array[MODEL] $models`. 10:04
Altreus MODEL :@models seems like it should DWIM 10:06
note colon
sena_kun sure
Altreus Positional[MODEL] was the problem
sena_kun it being named should not be an issue
Altreus lemme see if I can find the actual error 10:07
Because ... well 10:08
ToddAndMargo Anybody on newbie duty tonight? 10:08
$ p6 'my $x="04030000_16014"; $x~~m/ (..) (..) (..) (..) ("_") (.*?) ("_") .* /; say $0;' Nil
Why does `(..)` not pick out two letters? 10:09
Altreus I just feel like this is never what I mean when I say this
jast m: my $x="04030000_16014"; $x~~m/ (..) (..) (..) (..) ("_") (.*?) ("_") .* /; say $0
camelia Nil
ToddAndMargo I want $0 to be 04 10:10
jast your expression attempts to match two underscore characters but your string only has one, hence the expression doesn't match
Altreus m: enum M ( <A B C> ); sub a(M :@ms) { say @ms } a(:ms(M::A, M::B)); 10:10
camelia 5===SORRY!5=== Error while compiling <tmp>
Strange text after block (missing semicolon or comma?)
at <tmp>:1
------> 3M ( <A B C> ); sub a(M :@ms) { say @ms }7⏏5 a(:ms(M::A, M::B));
expecting any of:
infix
inf…
Altreus m: enum M ( <A B C> ); sub a(M :@ms) { say @ms }; a(:ms(M::A, M::B));
camelia Type check failed in binding to parameter '@ms'; expected Positional[M] but got List ($(M::A, M::B))
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
sena_kun m: say "04030000_16014" ~~ / (..) (..) (..) (..) ("_") (.*?) ("_") .* /
camelia Nil
Altreus well OK
ToddAndMargo Poop! right under my nose!!! Thank you!
Altreus m: enum M ( <A B C> ); sub a(M :@ms) { say @ms }; a(:ms(@(M::A, M::B))); 10:11
camelia Type check failed in binding to parameter '@ms'; expected Positional[M] but got List ($(M::A, M::B))
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
sena_kun m: say "04030000_16014" ~~ / (..) (..) (..) (..) ("_") (.*?) /
camelia 「04030000_」
0 => 「04」
1 => 「03」
2 => 「00」
3 => 「00」
4 => 「_」
5 => 「」
jast ToddAndMargo: "right under my nose" is the best kind of error IMO :)
Altreus m: enum M ( <A B C> ); sub a(M :@ms) { say @ms }; my @arr = M::A, M::B; a(:@ms);
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '@ms' is not declared
at <tmp>:1
------> 3) { say @ms }; my @arr = M::A, M::B; a(:7⏏5@ms);
Altreus m: enum M ( <A B C> ); sub a(M :@ms) { say @ms }; my @arr = M::A, M::B; a(:@arr);
camelia Unexpected named argument 'arr' passed
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
Altreus ok next time I promise I will test this in DM first
m: enum M ( <A B C> ); sub a(M :@ms) { say @ms }; my @ms = M::A, M::B; a(:@ms);
camelia Type check failed in binding to parameter '@ms'; expected Positional[M] but got Array ($[M::A, M::B])
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
Altreus there 10:12
jast reported to the internet police for using the bot
Altreus basically, why doesnt "M :@arr" mean "array of Ms" ?
and why would I want it not to?
Altreus m: enum M ( <A B C> ); sub a(Array[M :@ms) { say @ms }; my @ms = M::A, M::B; a(:@ms); 10:14
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '@ms' is not declared
at <tmp>:1
------> 3enum M ( <A B C> ); sub a(Array[M :7⏏5@ms) { say @ms }; my @ms = M::A, M::B; a
Altreus m: enum M ( <A B C> ); sub a(Array[M] :@ms) { say @ms }; my @ms = M::A, M::B; a(:@ms);
camelia Type check failed in binding to parameter '@ms'; expected Positional[Array[M]] but got Array ($[M::A, M::B])
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
Altreus m: enum M ( <A B C> ); sub a(Array[M] :$ms) { say $ms }; my @ms = M::A, M::B; a(:@ms);
camelia Type check failed in binding to parameter '$ms'; expected Array[M] but got Array ($[M::A, M::B])
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
Altreus idgi 10:15
sena_kun erm... 10:16
Altreus, isn't it the same question kawaii asked a minute ago? :)
give me a second...
sena_kun m: enum M <A B C>; sub a(Array[M] :$ms) { say $ms }; my $ms = Array[M].new(M::A, M::B); a(:$ms); 10:17
camelia [A B]
kawaii sena_kun: yes but I think we both agreed that `my MODEL @models = Array[MODEL].new(MODEL::TOXICITY, MODEL::SPAM, MODEL::INCOHERENT);` was an ugly and not very perl 6y way of doing it :)
sena_kun well, firstly, you can just use `TOXICITY, SPAM, INCOHERENT`.
:)
kawaii ah true, because I've constrained to the MODEL ENUM already 10:17
sena_kun secondly, you can omit a type.
actually
sena_kun because if it will be a MODEL 100% of time, moarvm optimizer will optimize all checks anyway. 10:18
just dynamically.
Altreus sena_kun: probably - I didn't see it
kawaii `my MODEL @models = Array[MODEL].new(TOXICITY, SPAM, INCOHERENT);` so this is a little cleaner now
Altreus The idea being that you *have* to pick from the enum
it's not for the optimiser, it's for the developer 10:19
But forcing the developer to do crap like that ^ just to satisfy the constraint is Not OK
sena_kun well, another way is to write a type alias, I think.
but yes, this thing is not too convenient, imho.
Altreus Should I open an issue on some github, requesting nicer syntax? 10:20
sena_kun m: enum M <A B C>; sub a(:@ms where .all ~~ M) { say @ms }; my @ms = A, B; a(:@ms); 10:21
camelia [A B]
sena_kun that's another way
Altreus, I don't know, to be honest. I just know about this thing of the type checker. I am also not sure if it's an edge case of some serious design solution or just a lack of ones willing to patch type checker to make inference(which is HARD and I wonder if possible with dynamic nature of Perl 6). 10:23
s/solution/decison/
s/decison/decision/
Altreus Sure but at the same time it's not convincing me to prefer P6 over ... well anything really 10:26
kawaii I think we'll stick with what we have now, it's not pretty but hey, it's a good time for me to wrote documentation anyway where I can warn users of the module that their scripts must adhere to that syntax :) 10:27
sena_kun kawaii, you can use a `where`, then no issues for users.
discord6 <Vendethiel> uh oh. zef install WWW ends with a Segfault after trying to install JSON::Name. 2nd time runs fine. 10:42
kawaii sena_kun: `my @models = (TOXICITY, SPAM);` now works, much nicer, thanks! :) 10:44
sena_kun and parens are redundant too. ;) 10:47
jnthn I'm curious why one would ever write `my MODEL @models = Array[MODEL].new(TOXICITY, SPAM, INCOHERENT);`; `my MODEL @models = TOXICITY, SPAM, INCOHERENT` works fine because it checks each thing as it assigns it into the Array. If using `:=` it'd make sense, but it's still a bit much to write out. 10:49
Array assignment is a copying operation, so the Array on the RHS is just a throwaway in such code. 10:50
sena_kun jnthn, eeeeeh...
jnthn, because it fails the typecheck?
sena_kun otherwise. 10:50
jnthn m: class C { }; my C @a = C.new, C.new; 10:51
camelia ( no output )
discord6 <Vendethiel> typed, it shouldn't
jnthn Looks OK to me?
sena_kun no
jnthn, give me a second...
discord6 <Vendethiel> mh, when using zef install X --to=Y, it checks for deps globally. I wonder if there's a way aroudn that
sena_kun m: num MODEL <A B>; sub a(MODEL @a) { say @a }; my MODEL @models = A, B, A; a(@models);
camelia 5===SORRY!5=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> 3num7⏏5 MODEL <A B>; sub a(MODEL @a) { say @a }
expecting any of:
infix
infix stopper
statement end
statemen…
sena_kun m: enum MODEL <A B>; sub a(MODEL @a) { say @a }; my MODEL @models = A, B, A; a(@models); 10:52
camelia [A B A]
sena_kun erm, stop
discord6 <Vendethiel> it breaks down when it's untyped
<Vendethiel> if you do my @models = .... it'll break though
jnthn What'll break?
sena_kun m: sub a(Int @a) { say @a }; a([1,2,3]);
camelia Type check failed in binding to parameter '@a'; expected Positional[Int] but got Array ($[1, 2, 3])
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
sena_kun ^
discord6 <Vendethiel> that's normal. 10:53
sena_kun m: sub a(Int @a) { say @a }; my Int @a = 1, 2, 3; a(@a);
camelia [1 2 3]
masak that old thing.
jnthn Yes, of course.
discord6 <Vendethiel> Array is accessible from the outside, there's no way to tell it's not gonna be altered
sena_kun of course, the second one won't fail.
masak let's discuss it again :)
discord6 <Vendethiel> jnthn: I mean this: enum MODEL <A B>; sub a(MODEL @a) { say @a }; my @models = A, B, A; a(@models);
discord6 <Vendethiel> I can't "m: ..." from discord... 10:53
sena_kun it seems the answer is to just `my MODEL @models`.
m: enum MODEL <A B>; sub a(MODEL @a) { say @a }; my MODEL @models = A, B, A; a(@models);
camelia [A B A]
sena_kun without a where constraint or explicit array. 10:54
-_-
jnthn OK, so nothing new here. :)
I just saw the my Foo @a = Array[Foo].new(...) thing and was like "huh, that's a waste of chars/time" :)
Ven`` m: enum MODEL <A B>; sub a(MODEL @a) { say @a }; my @models = A, B, A; a(@models); 10:55
camelia Type check failed in binding to parameter '@a'; expected Positional[MODEL] but got Array ($[MODEL::A, MODEL::B,...)
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
masak when you `MyType @a` a parameter, Perl 6 requires of the incoming array argument not just that it's filled with `MyType` values, but that the array _itself_ be an `Array[MyType]`
discord6 <Vendethiel> (I just wanted to have mine here)
masak that's why real Ven``'s eval just failed. 10:56
what I like about TypeScript here is that it succeeds where Perl 6 fails, so to speak
kawaii I settled for doing `method analyze(:@models where .all ~~ MODEL)` and then `my @models = TOXICITY, SPAM;` like sena_kun suggested :) 10:57
sena_kun isn't it a tradeoff of where to have a type check?
Ven`` We don't do bottom-up type derivation, AFAIK.
masak in TypeScript, the array's type is inferred, not really part of the code. and so you don't have to cross your Ts and dot your Is in the same way.
sena_kun kawaii, what jnthn's suggested is better.
Ven`` no, Typescript just recovers the type from its use
masak kawaii: of course, that will loop forever on an infinite array ;) 10:58
Ven`` At least in some places (it doesn't from return type i.e.)
masak Ven``: maybe that's a better way to describe it, yes
Ven``
.oO( we should introduce most() which checks only a random sample of the array and assume the rest is fine )
masak in any case, next to TypeScript, Perl 6 does give a very stuffy feel. "I know the array looks good, but you have to _declare_ it!" 10:59
Ven`` it looks good *right now*. Maybe with a `is copy` it should be smarter, but otherwise...
sena_kun the question is "can Perl 6 know it looks good or not in any possible case". 11:00
masak point taken.
Ven`` This is akin to `const T&` in C++. Maybe you have a const reference to it, but that certainly doesn't mean it can't be mutated.
masak right
it's a statement about a "view" on the value
jnthn Yeah, but isn't it also the case that TypeScript doesn't actually enforce anything at runtime, and just does best effort at compile time?
masak oh, definitely
Ven`` It does enforce some things at runtime in some cases (bivariance with function types, at least a few years back). 11:01
kawaii sena_kun: github.com/shuppet/p6-api-perspect...5acf89232d
fixed!
`my MODEL @models = TOXICITY, SPAM;` is fine too :)
sena_kun \o/
jnthn It could be interesting to try writing a structural typing module for Perl 6 :) 11:02
Ven`` (I'm not sure "best effort" at compile-time is fair; since their OO is statically checked)
jnthn: with the ways things are wired, would it be even imaginable replacing the OO system with a "static"(-ish) one?
(let's say a simple version taht replaces dot-calls with sub calls, and generates multisub depending on self's type) 11:03
jnthn Ven``: In theory, though you might have to do a lot more type declarations to make things work, and decide what to do with FALLBACK, etc.
Ven``: Oh, I'd probably do it as some kind of compiler plugin; it probably blocks on QTrees to do it really well. 11:04
Ven`` Interesting thought experiment at least
jnthn But in theory if there was a hook to obtain the compilation unit's QTree at compile time and a way to export a CHECK phaser, you'd probably be in a good place to write such a thing.
kawaii sena_kun: can I do `method analyze(:$comment, MODEL :@models = TOXICITY)` to have a default fall-back if :@models is not provided to the method? :) 11:05
Ven`` I'm not sure what to do with FALLBACK, but to be fair, most static OO systems don't have such a feature 11:06
sena_kun kawaii, I doubt that. this is possibly a place where explicit type declaration may be necessary. 11:07
Altreus is there some magic whereby a scalar pulled from MODEL knows what it is, but an array of items pulled from MODEL doesn't have anyway of passing the type up to the array itself? 11:10
SmokeMachine would it be possible to something like `sub bla(Int() @a) {}; blu [1, 2, 3]` to work? 11:23
and it transform `[1, 2, 3]` into `Array[Int].new: [1, 2, 3]` 11:24
s/blu/bla/ 11:25
tbrowder SmokeMachine: hi. i guess i need a working simple sample of how to get the data out of my Person table. i cannot figure out how to get Red to do it. 11:48
quipa Hello, does someone know of a tutorial on using Perl/Tk in Perl 6 using Inline::Perl5 ? I am new to Perl 6 & 5 11:49
I looked at Gtk::Simple but I am a bit unsure it's mature enough for what I will be doing 11:50
GTK::Simple
tadzik I think GTK::Simple is mature enough to provide more than Tk provides altogether :) 11:51
I don't remember anyone ever using Tk in Perl6 to be honest, so I doubt that there is a tutorial for it 11:52
quipa tadzik: Ok! I'll continue with the tutorials on GTK::Simple, hopefully your right :) 11:54
Also used to Tk so would avoid having to learn another GUI library, but hey why not :p
tadzik hehe 11:55
SmokeMachine tbrowder: www.irccloud.com/pastebin/zbIa4F2t/
tadzik to be fair, they are all quite similar in the way they work
quipa yup I've used Tkinter and wxPython in Python, but got to say for what I am doing (nothing to complex) Tk was a bit easier to deal with 11:56
quipa I have only had contact with GTK using glade haven't ever done anything usable 11:57
SmokeMachine tbrowder: www.irccloud.com/pastebin/Uc3VELXi/ 11:58
quipa on a totally different note, has anyone heard of an implementation in Perl 6 (or 5) of top down operator precedence / Pratt parser (that can dynamically define new token rules, like in the original CGOL developed by Pratt)? 12:01
tbrowder SmokeMachine: erg, that looks good, but in my case it still throws. mabe my models are wrong? have you tried my case yet? i'm obviousy doing something stupid. 12:03
SmokeMachine tbrowder: what happens when you do `.say for Person.^all`? 12:04
tbrowder i'll paste it, give me a minute
tbrowder .say Person.^all => pastebin.com/9shdQLp5 12:08
tbrowder the data seem to be there, but there's something worng with the call 12:09
*wrong
i just pulled latest changes from upstream master and still get the same error. 12:15
one major difference between your working example and the PR is the multiple associated models. in the error i'm not sure i see the other models' data 12:17
is it an error in my model (looks like a relationship problem to me) or a Red problem? 12:18
discord6 <Vendethiel> Seems like even with ODBC I need a mssql driver installed to piggyback 12:28
scimon quipa: I did a quick thing about GTK::Simple for last years advent calender. It's not too hard to use and the event handling via supplies is nice an easy. 12:28
perl6advent.wordpress.com/2018/12/...ktop-apps/ 12:29
quipa scimon: cool thanks :)
scimon: was actually reading your article on Inline::Perl5 before asking 12:30
tbrowder also note the "child" models don't have a primary key. in the README i describe the need for a combined key created by uniqueness of data and person-id. Red may not be able to handle that yet, but my real-world case needs that. 12:31
quipa or at advent calendar
quipa didn't realise it was different people hehe 12:31
quipa perl6advent.wordpress.com/2016/12/...g-the-gap/ 12:32
tbrowder for now i can call sqlite code inside query-db.p6 to read the tables unless you can see a work around for the combined key requirement. 12:34
tbrowder for now i will work on the update part and see how that goes. 12:36
tbrowder SmokeMachine: can on define a single relationship on two other models? 12:49
s/on/one/ 12:50
SmokeMachine tbrowder: what do you mean? 13:46
tbrowder look at the README and the sql for the tables as i think they would be created if i were using sqlite directly. notice the two unique columns thus a kind of combined key. doesn't that sound like a relationship on two models? 13:51
tbrowder i'm going to add red's sql for the tables to the readme to show the comparison. 13:53
SmokeMachine tbrowder: I would probably do something like this... (not tested) www.irccloud.com/pastebin/UGwTrDBo/ 14:39
tbrowder SmokeMachine: thanks, looks like a plan! 15:20
AlexDaniel kawaii: please hang around on #perl6-dev and #moarvm 15:42
kawaii AlexDaniel: done!
AlexDaniel kawaii: also here's the public log (similar link for other channels is available too): colabti.org/irclogger/irclogger_logs/perl6-dev
kawaii I also re-sent my CLA earlier, and cc'd Coke
AlexDaniel kawaii: also, I think the discord bot is now on #perl6-dev and #moarvm, so you should be able to read the logs there as well 15:43
kawaii It is, but I like IRC now so :) 15:50
xinming What is the best way to implement array with fixed length? Something like, when we call push, the @array remove's the first elements? 15:51
xinming I wrote one implementation myself, Just wonder if there is better ways for this purpose. 15:51
sena_kun a custom class. 15:52
I doubt there is.
xinming for example, with array fixed length
sena_kun and a class is a pretty normal solution.
xinming Or maybe roles.
my @array = blabla; @array does FixedLength(5);
Maybe something like this.
sena_kun: How do I specify the array class for @array? 15:53
sena_kun You can make FixedLength `does` Positional and re-implement necessary method.
ugexe you'd probably create a does Positional class, and then use e.g. custom BIND-POS
jmerelo xinming: a subset that could be parametrized could be ideal
xinming my Int @array creates a array with values with Int. Not the class for that.
jmerelo xinming: as in subset fixedlength where fixedlength.elems < $x. I don't think that can be done. 15:53
AlexDaniel xinming: like a deque, right? 15:54
ugexe m: my Int @array; say @array.^name
camelia Array[Int]
sena_kun `class Foo does Posiitional { method BIND-POS {...} }` and then `my Foo $array`.
AlexDaniel with a maxlen
xinming AlexDaniel: Yes, a bit like deque, But actually, It's used to keep history. 15:55
And throw out old ones
AlexDaniel xinming: if you implemented that, perhaps consider publishing a module 15:57
xinming What I do for now is, I override the push method, and with my own implementation, It uses splice to re-shape the array.
ugexe what if they use something other than push?
:P
xinming I'm still thinking for the good sollution.
ugexe @foo[$max + 1] = 666
AlexDaniel xinming: maybe consider a ring buffer instead of splicing
ugexe @foo.append(...)
xinming ugexe: I haven't think about this yet. as I use the push method only. :-)
ugexe thats why you would does Positional and write e.g. BIND-POS methods
which would work for push, append, etc 15:58
xinming Since after splice, the @array is already updated.
xinming AlexDaniel: does perl6 have ring buffer? 15:58
AlexDaniel xinming: no, but if you implement the logic it's probably going to be many times more efficient than doing what you have now :) 15:59
xinming Ok, Will check them. 16:00
ANother question just raised
m: my Int @array; say @array.^name
camelia Array[Int]
xinming How can we may the Array[Int] to MyArray[Int] for @array?
jmerelo xinming: Use a role? 16:02
xinming Not a role, I'm thinking about how to make @array to use customized class. 16:03
moritz using the "is" trait
my Int @array is MyArray
xinming got it. Thanks.
That's what I'm curious about.
moritz (iirc; haven't tried it with type constraints yet)
xinming I think, In my rest of my life, I'll only use perl6 as much as I can. :-) 16:04
lizmat news.perlfoundation.org/2019/03/gra...-for-.html
Grant Committee - Request for Members
AlexDaniel weekly: news.perlfoundation.org/2019/03/gra...-for-.html 16:05
notable6 AlexDaniel, Noted!
AlexDaniel :)
moritz dumb question: am I still member of the grants committee?
I'm pretty sure I was asked to vote on one or two grant applications, and then never again 16:06
but nobody told me I was out either
AlexDaniel weekly: Welcome to the new rakudo dev Kane Valentine (kawaii) github.com/kawaii
notable6 AlexDaniel, Noted!
kawaii ah, a link to my github where you'll all see my bad perl 6 modules 16:07
AlexDaniel yes
moritz: I think you should ask [Coke] directly (via email)
moritz AlexDaniel: probably, yes
xinming m: class T is Array { }; my @a is T; @a.^name 16:09
camelia ( no output )
kawaii Altreus: I should probably rewrite API::Cloudflare using Cro::HTTP:Client if we're going to standardise our API libs around Cro ecosystem
xinming m: class T is Array { }; my @a is T; @a.^name.say;
camelia T
xinming m: class T is Array { }; my Int @a is T; @a.^name.say;
camelia T[Int]
xinming perl6++
ugexe m: role Foo[$bar] { }; say Foo[Int].new.^name
camelia Foo[Int]
ugexe you can use a role like a class 16:10
xinming and with parameterized roles, We can have only one public attribute 16:10
ugexe no
xinming Will this limitation be removed in the future?
ugexe: It is 16:11
ugexe only one public attribute means you can do `does RoleName(...)` instead of `does RoleName[...]
xinming role T { has $.a; has $.b; };
ugexe whats wrong with that?
xinming ugexe: Yes, Aren't they the same?
does RoleName(...) <--- does RoleName[...] 16:12
ugexe no they are not the same
xinming this makes me confused.
ugexe then just use the second variant
moritz the does RoleName(...) syntax is a shortcut that only works when one attribute is present 16:12
moritz if the role has more attributes, you cannot use it, but you can still use the [] syntax 16:13
ugexe and RoleName[...] does not setup attributes at all, although you can manually use the `...` code to set them
xinming moritz: Yes, I use that. and 'does RoleName[$arr1, $attr2]' will work?
ugexe m: ole Foo[$a, $b] { has $.a = $a, has $.b = $b }; say Foo[1,2].new.a 16:14
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '$a' is not declared
at <tmp>:1
------> 3ole Foo[7⏏5$a, $b] { has $.a = $a, has $.b = $b };
xinming Don't know why does RoleName(...) won't support multiple public attrs.
ugexe m: role Foo[$a, $b] { has $.a = $a, has $.b = $b }; say Foo[1,2].new.a
camelia 1
ugexe how should RoleName(1,2) know which public attributes 1 and 2 go to?
RoleName(1) can assume there is only a single public attribute, and thus doesn't need to know that attributes name 16:15
xinming m: role T { has $.a }; my $x = 1 does T(:a(5)); $x.a.perl.say; 16:16
camelia 5
xinming m: role T { has $.a }; my $x = 1 does T(5); $x.a.perl.say;
camelia 5
xinming ugexe: But with :a(5) in this example, We can request which attr to be initliazed. 16:17
m: role T { has $.a; has $.b; }; my $x = 1 does T(:a(5), :b(3)); $x.a.perl.say;
camelia Cannot invoke this object (REPR: Uninstantiable; T)
in block <unit> at <tmp> line 1
xinming m: role T { has $.a; has $.b; }; my $x = 1 does T[:a(5), :b(3)]; $x.a.perl.say; 16:18
camelia Could not instantiate role 'T':

in any protect at gen/moar/stage2/NQPCORE.setting line 1099
in block <unit> at <tmp> line 1
xinming m: role T[$a, $b] { has $.a; has $.b; }; my $x = 1 does T[:a(5), :b(3)]; $x.a.perl.say;
camelia No appropriate parametric role variant available for 'T'
in block <unit> at <tmp> line 1
xinming m: role T[$a, $b] { has $.a = $a; has $.b = $b; }; my $x = 1 does T[5, 3]; $x.a.perl.say;
camelia 5
xinming m: role T[$a, $b] { has $.a = $a; has $.b = $b; }; my $x = 1 does T[:a(5), :b(3)]; $x.a.perl.say;
camelia No appropriate parametric role variant available for 'T'
in block <unit> at <tmp> line 1
ugexe m: role T { has $.a }; my $x = 1 does T(:z(5)); $x.a.perl.say; 16:19
camelia 5
ugexe that did not set `z`, it set `z`
so you did not request which attr to be initialized
xinming So, it tries to use the pair value to init the public attribute
ugexe well that much seems like a bug. but what its not doing is requesting which attr to be initialized 16:20
i'd expect T(:x(5)) to set $.a to x => 5, but it sets $.a to 5
xinming ugexe: Thanks for the explanation, I thought it was a feature to assign attr value. 16:21
xinming ugexe: so, for `does Role(...)` the content between (...) are all for the single public attribute. 16:22
ugexe yeah, except the seemingly buggy behavior shown with pairs
xinming But that make me curious why can't we make it a capture kind of thing. 16:23
ugexe m: role T { has $.a }; my $x = 1 does T(:z(:y(5))); $x.a.perl.say;
camelia :y(5)
ugexe so a pair inside a pair is fine?
xinming let's say, role Role1 { has $.attr1; has $.attr2; }; $var does Role1(:attr1<value1>, :attr2<value2); 16:24
ugexe: I think the current logic, if it's a pair, it tries to return the value of the pair and use that value to init the role.
xinming Is there any reason to not design the does Role1(:attr1<value1>, :attr2<value2>) like this? 16:26
tbrowder SmokeMachine: i'm assuming the order of attributes or traits for a column{} in a model is not critical so i'm changing your code a small bit to keep my original format.
xinming Just want to know the reason behind the design decision :-) 16:27
xinming anyone would answer that for me? :-D 16:27
tbrowder SmodeMachine: is the order of listing attibutes for a model critical? from the generated sql it doesn't look so.
SmokeMachine tbrowder: nowadays Red ignores the attractive order... github.com/FCO/Red/issues/135
jnthn xinming: It was provided simply as a shortcut for the one-attribute case, to ease adding simple properties to an existing object. There may be further reasoning in S12. 16:28
Forcing writing the attribute name would make it a less useful shortcut, and trying to guess one way or the other would be ambiguous and confusing. 16:29
xinming jnthn: Thanks for the explanation. 16:30
so role Role1 { has $.a }; does Role1(5); is the same as role Role1[$a] { has $.a = $a }; does Role1[5]; right? 16:31
hmm, well, ignore me.
tbrowder ok, thnx. i have to be away for a while, but i am working on your suggesitons and expect to good results!! 😁
*suggestions *get good [stupuid <= keyboard] 16:32
xinming I think they are the same. :-)
ugexe i can say they are probably the same enough for your purposes :P 16:34
ugexe otherwise remember you'll have an `$a` floating around in your role in the second example 16:34
which probably isn't a problem. just pointing out its not exactly the same 16:35
xinming ugexe: I'd like to know deeper.
Geth doc: 4b5032160c | (Elizabeth Mattijsen)++ | doc/Programs/03-environment-variables.pod6
Make sure that environment variables can be searched

And some minor rewording / consistent flowing.
doc: 5b0448dcfd | (Elizabeth Mattijsen)++ | doc/Type/Variable.pod6
Add some more info about "is dynamic"

And how it should probably not be used.
xinming m: role R[$a] { $a //= 5; has $.a = $a; }; my $x = 1 does R(); $x.a.perl.say; 16:38
camelia Cannot mix in non-composable type R(Any) into object of type Int
in block <unit> at <tmp> line 1
xinming m: role R[$a] { $a //= 5; has $.a = $a; }; my $x = 1 does R(3); $x.a.perl.say;
camelia No appropriate parametric role variant available for 'R'
in block <unit> at <tmp> line 1
xinming m: role R[$a] { $a //= 5; has $.a = $a; }; my $x = 1 does R[3]; $x.a.perl.say; 16:38
camelia 3
xinming m: role R[$a] { $a //= 5; has $.a = $a; }; my $x = 1 does R[]; $x.a.perl.say; 16:39
camelia No appropriate parametric role variant available for 'R'
in block <unit> at <tmp> line 1
xinming m: role R[$a] { $a //= 5; has $.a = $a; }; my $x = 1 does R[Nil]; $x.a.perl.say;
camelia Could not instantiate role 'R':

in any protect at gen/moar/stage2/NQPCORE.setting line 1099
in block <unit> at <tmp> line 1
xinming m: role R[$a] { $a = 5; has $.a = $a; }; my $x = 1 does R[0]; $x.a.perl.say;
camelia Could not instantiate role 'R':

in any protect at gen/moar/stage2/NQPCORE.setting line 1099
in block <unit> at <tmp> line 1
xinming ugexe: Is this a bug too? 16:40
m: role R[$a] { $a ||= 5; has $.a = $a; }; my $x = 1 does R[0]; $x.a.perl.say;
camelia Could not instantiate role 'R':

in any protect at gen/moar/stage2/NQPCORE.setting line 1099
in block <unit> at <tmp> line 1
xinming Or, after role is compiled, the param shouldn't be changed? 16:41
ugexe is LTA error message 16:42
m: role R[$a is copy] { $a ||= 5; has $.a = $a; }; my $x = 1 does R[0]; $x.a.perl.say;
camelia 5
xinming Ah, THanks 16:43
jnthn xinming: They work quite differently, though the visible result would indeed about the same. 16:45
xinming m: role R[::X] { has X $.a; }; my $x = 1 does R[Int]; $x.a.perl.say
camelia No such method 'perl' for invocant of type 'X'
in block <unit> at <tmp> line 1
jnthn xinming: Parametric roles are intenred on their positional parameters
Which means that they'll not be GC'd 16:46
So if you do `does R[$value]` for a thousand different Int instances then you'll have a thousand different roles
Whether that's a problem depends on what you're doing 16:47
It might not matter, or it might cause your program to eat huge volumes of memory :)
xinming Thanks for the note.
m: role R[::X] { has X $.a; }; my $x = 1 does R[Int]; $x.a.perl.say
camelia No such method 'perl' for invocant of type 'X'
in block <unit> at <tmp> line 1
xinming m: role R[::X] { has X $.a is rw; }; my $x = 1 does R[Int]; $x.a = 4; $x.a.perl.say 16:48
camelia 4
xinming In this case, it work as expected
No such method 'perl' for invocant of type 'X', Is this desired behaivor?
jnthn Yeah, I think that first issue is already filed; it's failing to handle the default there
jnthn During generic instantiation 16:49
vrurg++ was/is working on that, I think
xinming I thought that we'll always have "perl" method. :-)
jnthn: Got it.
Geth doc: dfd3cdbb55 | (JJ Merelo)++ | 2 files
Eliminates reference to preview and reflow, refs #2687
16:51
uzl It seems repl.it is making some progress towards including Perl 6 as one of its available languages. repl.it/languages/perl6 19:13
yoleaux 17 Mar 2019 19:26Z <jmerelo> uzl: there are several mentors involved usually, just in case someone is busy for some stretch of time. Summer is long...
17 Mar 2019 19:26Z <jmerelo> uzl: we'll definitely do that.
jmerelo uzl: great!
uzl Sure! Just came across this tweet from them: twitter.com/replit/status/11081841...49472?s=20 19:14
uzl weekly: Perl 6 in Repl.it (twitter.com/replit/status/11081841...9472?s=20) 19:16
notable6 uzl, Noted!
uzl * on/in? 19:17
jmerelo uzl: you're good with in.
uzl jmerelo: I don't know why but for some reason "on" sounds more natural to me when talking about websites (i.e., on Github/Youtube/etc.) ;-) 19:20
jmerelo uzl: like "hang it on the web"
uzl jmerelo: sort of... 19:22
jmerelo If you're still interested in GSoC, you should start to prepare a project to submit. 19:23
uzl but there's probably not idiomatic difference when using either "in" or "on" in this case so I'm not really sure.
uzl jmerelo: the thing is I don't have anything in mind and the idea of half-delivering one of the current project ideas (at least, the most approachable to my current skills) makes me shiver... 19:28
jmerelo uzl: we can talk in private if you want so that we can create a good proposal from what it's there. It's going to be limited to what I know, though... 19:29
uzl: going now for dinner. You can reach me at this nick (or jjmerelo) at gmail, if you want.
vrurg jnthn: you mentioned me with regard to parmetrized roles bug. There is a PR already for a similar case – 2731. Though I'd need to check if it fixes xinming's case. Will test later today if get more time. 19:30
uzl jmerelo: I'll do so. Buen provecho! 19:31
niclo hi all, newbie here 19:45
AlexDaniel hello
niclo i'm completely new to perl6 and i'm looking for good reference to use, possibly a book, do you think Learning Perl 6 by O'Reilly can be a good one ? 19:53
to use togheter with online documentation
moritz niclo: do you have experience with other programming languages? 19:57
perl6book.com/ has a flow chart to recommend you a Perl 6 book based on a few questions like that :D 19:58
niclo thank you so much
quipa Yeah that's a really nice and simple graph just saw it a few hours ago on my own learning process 19:59
Geth doc: a948e0648b | cfa++ | doc/Language/modules.pod6
Fix internal modules link (xq++, #perl6)
21:07
abc3354 hi ! 21:24
I have a question
lucs We've got full of answers. Let's hope they match up! 21:26
abc3354 ok ! 21:27
I was building an exemple
can I eval code here ?
moritz yes
lucs m: print 6 * 7
camelia 42
moritz m: say 'Hi, abc3354'
camelia Hi, abc3354
abc3354 m: sub is-valid ($a, $b) { return True; } my @queue = []; my @curr = [0,0]; my @t; for [0,1],[1,0],[0,-1],[-1,0] { @t = [@curr Z+ @_]; @queue.push($(@t)) if is-valid(|@t); say @queue; } 21:28
camelia 5===SORRY!5=== Error while compiling <tmp>
Strange text after block (missing semicolon or comma?)
at <tmp>:1
------> 3sub is-valid ($a, $b) { return True; }7⏏5 my @queue = []; my @curr = [0,0]; my @
expecting any of:
abc3354 how can I eval multiline ?
moritz abc3354: you need to a semicolon after } if there isn't a newline after it
abc3354 ok 21:29
m: sub is-valid ($a, $b) {return True;}; my @queue = []; my @curr = [0,0]; my @t; for [0,1],[1,0],[0,-1],[-1,0] { @t = [@curr Z+ @_]; @queue.push($(@t)) if is-valid(|@t); say @queue; }
camelia [[0 1]]
[[1 0] [1 0]]
[[0 -1] [0 -1] [0 -1]]
[[-1 0] [-1 0] [-1 0] [-1 0]]
abc3354 ok
abc3354 it is not really readable 21:29
moritz we'll manage :-) Just ask your question 21:30
abc3354 there is a link to tio.run
tio.run/##PY7BDoIwEETv/Yo5cCixGLh4...zW9JGOb9Bw
abc3354 so, at the end it says [[-1 0] [-1 0] [-1 0] [-1 0]] 21:30
abc3354 but I want [[0 1] [1 0] [0 -1] [-1 0]] 21:31
And did not figure out why it returns that
any idea ? 21:32
moritz you are pushing references to the same array onto @queue 21:35
and then changing the contents of that array 21:36
@queue.push([@t])
creates a new array every time
abc3354 oh thanks @moritz ! 21:38
moritz abc3354: my slightly simplified version: tio.run/##K0gtyjH7/z@3UsGhsDS1NNWa...sLWWq7//wE
abc3354 thank you !
abc3354 by the way, the is-valid was part of a bigger project 21:40
lucs abc3354: Do you happen to speak French by any chance?
abc3354 hum
yes
x)
lucs Hehe!
abc3354 is my english so bad ?
moritz abc3354: (re is-valid), thought so 21:41
lucs "exemple" and spaces in front of "?" and "!" gave it away :)
Nah, your English is fine.
abc3354 oh ok
lucs est francophone, n'est-ce pas 21:42
moritz francophobe :D
lucs Hey! >:(
lizmat
.oO( a payphone that only takes francs )
21:43
lucs moritz: I hope you mean the language (francophobe usually refers to people).
lizmat: Never thought of that :)
moritz lucs: I'm not phobic of either, really. Just my experience as a foreign speaker in France was... less pleasant than in other countries :D 21:44
lucs Oh, too bad. Come to Québec, we're really nice here :) 21:45
lizmat on parle Français en Québec ?
lizmat ducks
lucs :)
abc3354 hi taeb x) 21:49
theangryepicbana does anyone here think that making a Tk lib for Perl 6 is a good idea?
moritz theangryepicbana: I'm torn between "no, Tk looks horribly old-fashioned" and "it might work for a few years, in contrast to any other GUI toolkit" 21:50
lucs theangryepicbana: I recently used the Perl5 version with Inline::Perl5, so I'd say, sure, why not.
theangryepicbana oh cool
well, I've gotten a thing to work where I use Proc::Async to talk with a Tcl process
and I have gotten it to a point where I can use Tk now 21:51
would anyone be interested in seeing it?
dr_df0 theangryepicbana: sure! go for it 21:54
theangryepicbana you may have to press the "fork" button for it to work, but here it is: repl.it/@theangryepicbanana/P6TK 21:55
theangryepicbana (any feedback would be appreciated btw) 21:56
dr_df0 theangryepicbana: looks pretty cool! although I've some unhandled exceptions 21:59
theangryepicbana thanks
where are the exceptions though?
qwebirc1024151 crap it refreshed 22:02
how do I log back in (first time using freenode) 22:03
dr_df0 Unhandled exception in code scheduled on thread 8
qwebirc1024151 ah
dr_df0 theangryepicbana: No such method 'ast' for invocant of type 'Any' 22:04
in method parse at /home/runner/lib/Tcl/OptionParser.pm6
qwebirc1024151 ok
qwebirc1024151 ok now I can log back in, right? 22:04
ad theangryepicbanana
*as
theangryepicbana ok nice 22:05
theangryepicbana I'll fix the error 22:05
abc3354 buy ! 22:20
bye *
lucs Salut! 22:23
TreyHarris Some 'is' traits can't be applied to multis (they throw `Cannot invoke object with invocation handler in this context`), but work if applied to the proto (e.g., `is cached`); some can be applied to multis, but are useless and don't work unless they're applied to the proto (`is pure`); some only work on the multis and not the proto but don't complain if applied to the proto (`is export`). Could the compiler 22:39
deduce which is which and give a more useful error message (or a warning in the latter cases where it's currently silent)?
tbrowder .tell uzl fwiw i say "on" website most of the time around techies, "at" mostly around non-techies, and 22:52
yoleaux tbrowder: I'll pass your message to uzl.
lizmat TreyHarris: an issue with an overview of what goes wrong / expected, would be appreciated 23:49