»ö« 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.
hankache hello #perl6 01:21
lookatme_q hi hankache 01:22
hankache hi :)
.seen stmuk 01:23
yoleaux I saw stmuk 8 Nov 2018 22:20Z in #perl6: <stmuk> I think the meaning of "refrains" has been overloaded!
AlexDaniel heh, debian unstable is in a very interesting state right now 02:13
blender segfaults on start, python3-opencv can't even be installed because python is too new or something… 02:14
AlexDaniel what's the right way to use react/whenever with $*IN ? 04:03
Woodi AlexDaniel: unstable is allowed to have packages without deps. just get blender from testing 04:10
AlexDaniel Woodi: not exactly, no… blender installs fine, but segfaults when you attempt to start it 04:11
IIRC downgrading blender to the version in testing didn't help, it's some dependency that is at fault
there's a “resolved” ticket in debian but I have no idea what it means because it's not resolved
Woodi AlexDaniel: give them few days :) 04:12
AlexDaniel now, if we're talking about python3-opencv, then I cannot get that from testing also
because I already have python 3.7 installed 04:13
so I'd need to downgrade that somehow
(it can't be installed because it depends on python ≤3.6)
AlexDaniel I mean, I'm on *unstable*, I understand that, I'm not complaining :) 04:14
Xliff \o 04:14
Woodi AlexDaniel: you can 'pin' some version in /etc/apt/preferences
AlexDaniel yes but I already have it installed… 04:15
Xliff Is there a blog write-up on how to do optional tests?
Woodi Xliff: 'optional test' ? 04:16
Xliff Yes. I'd like to run extra tests if a specific module is present. 04:17
m: say (try require ::('Color')) ~~ Failure 04:21
camelia False
Xliff m: say (try require ::('XXX')) ~~ Failure
camelia False
Xliff m: say (try require ::('XXX')) ~~ Failure)
camelia 5===SORRY!5=== Error while compiling <tmp>
Unexpected closing bracket
at <tmp>:1
------> 3say (try require ::('XXX')) ~~ Failure7⏏5)
Xliff m: require ::('Color')); say ::('Color') ~~ Failure 04:22
camelia 5===SORRY!5=== Error while compiling <tmp>
Unexpected closing bracket
at <tmp>:1
------> 3require ::('Color')7⏏5); say ::('Color') ~~ Failure
Xliff m: require ::('Color'); say ::('Color') ~~ Failure
camelia Could not find Color at line 0 in:
/home/camelia/.perl6
/home/camelia/rakudo-m-inst-2/share/perl6/site
/home/camelia/rakudo-m-inst-2/share/perl6/vendor
/home/camelia/rakudo-m-inst-2/share/perl6
CompUnit::Repository::Absol
Xliff m: tru require ::('Color'); say ::('Color') ~~ Failure
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared routines:
require used at line 1
tru used at line 1
Xliff m: try require ::('Color'); say ::('Color') ~~ Failure
camelia True
Woodi .t files are in Perl... but you guessed probably... 04:23
yoleaux Woodi: Sorry, I don't know what timezone that is. If in doubt, see en.wikipedia.org/wiki/List_of_tz_d...time_zones for a list of options.
Woodi m: (try require Foo) === Nil and say "Failed to load Foo!";
camelia Failed to load Foo!
Woodi from : docs.perl6.org/language/modules 04:24
Geth ecosystem: 33f7dc477f | Xliff++ | META.list
Add RandomColor to ecosystem

See github.com/Xliff/p6-RandomColor
04:29
holyghost I have a WAV file parser for 16,24 and 32 bits, tomorrow I'll start on the WAV player IIRC 04:36
It needs to be debugged though 04:37
Xliff holyghost++ 04:43
Geth perl6-lwp-simple: f5699dcba0 | (JJ Merelo)++ | README.md
Extends README.md

Also closes #12 since it does not seem to be reproducible now.
06:36
perl6-lwp-simple: 8cd50e71e5 | (JJ Merelo)++ | t/get-w3-redirect.t
Eliminates comment

And tests that test page. w3 has been eliminated everywhere, and this page keeps working. There's going to be the same problem with any other page like eu.httpbin.org, which is used elsewhere, so this closes #26
Geth perl6-lwp-simple: a6e0906f72 | (JJ Merelo)++ | t/socket-sanity.t
Removes unneeded test closes #6
06:38
Geth perl6-lwp-simple/master: 4 commits pushed by (JJ Merelo)++ 07:02
Geth perl6-lwp-simple: 566761a157 | (JJ Merelo)++ | t/getstore.t
Revises #13

The code has drifted away, so it's impossible to know what exactly caused the problem. It might have been some combination of testing website and Rakudo changes, but this problem no longer exists, so this closes #6.
Also, now http redirects to https, so eliminates a few tests that actually do the same.
07:10
perl6-lwp-simple: 5a57b49cfa | (JJ Merelo)++ | t/getstore.t
Clarifies tests closes #13
07:11
Geth doc: albertferrico++ created pull request #2478:
Fix for issue #2476
08:41
andrzejku .seen araraloren 08:57
yoleaux I saw araraloren 21 Nov 2018 13:25Z in #perl6: <araraloren> not araraloren; just clearing the bot
lookatme_q :)
andrzejku, what's up ?
andrzejku oh shit you are here :D
I thought I miss you
that's fine
lookatme_q haha
I am off work soon 08:58
andrzejku I just was looking for you, haven't see you for the long long time
lookatme_q oh, I was a little busy
andrzejku well me too :D
lookatme_q Ley 08:59
Let's talk when I am home :)
andrzejku Ok :)
keep working
lookatme_q About 1 hours later
andrzejku I will 2 hours later 09:00
for 1 hour I am going for lunch
lookatme_q okay 09:01
mornfall hm... regex syntax has changed from p5? :\ i guess there's no equivalent of man perlre either? 09:22
(how do i do a lookahead?)
jnthn <?before foo> 09:24
masak m: say so "lookahead" ~~ / "look" <?before "ahead"> /; say so "look, a three-headed monkey!" ~~ / "look" <?before "ahead"> / 09:24
camelia True
False
mornfall yeah, took me a while to figure out it's literally '?before' 09:25
Altreus I have code along the lines of $some-supply.emit(some-function()) and I *think* some-function is dying, but the error is being swallowed 09:26
I'm not quite sure how to figure out what's happening
I do seem to keep accidentally losing errors when dealing with async
but normally it's because I don't resolve a promise properly
mornfall is there a way to get offline docs for p6 (man pages), like it was with p5? i really don't like going to the browser for basic stuff :(
jnthn Altreus: Are you using supply/react/whenever? Becuase "don't lose errors" is one of the many things they help with :) 09:27
Altreus I am using react and whenever, but I create a supply object rather than using supply 09:27
sec
github.com/shuppet/p6-api-discord/...d.pm6#L173 09:28
I'm pretty sure I broke inflate-message (specifically, Message::from-json), based on print-debugging
but it just sort of does nothing
mornfall okay this is going to take a while... how is m,stuff, not a regex :( 09:29
Altreus not in this commit, I might add - in my working dir
yes I definitely broke it because when I got the syntax right it worked 09:30
jnthn m: say 'blah stuff blah' ~~ m,stuff, 09:31
camelia 「stuff」
jnthn Looks like one to me. But note that m is *immediate* evaluation of the regex against $_
mornfall jnthn: i tried passing m,..., to split and it told me 'Use of uninitialized value of type Any in string context.' (nothing much else) 09:32
Altreus > immediate 09:32
methinks you passed the result of m
mornfall Altreus: oh, so ~~ changes $_ locally? 09:33
(before the immediate bit hits, anyway)
jnthn Yes
mornfall anyway, rx,..., does what i want 09:34
jnthn YOu'd just pass /stuff/ to `split`
Or rx if you want adverbs :)
Or a non-/ separator
uh, quoter
mornfall jnthn: i hate / as quotes because it makes matching paths really awkward :p 09:35
jnthn Ah, yes, if matching paths it does indeed 09:37
Altreus hmm OK I've got an understanding gap
jnthn Though at least in Perl 6 regex you can quote them like '/' which looks a bit nicer the the backslash :) 09:37
Altreus [].map(anything) returns ()
And then I pass that into a constructor where the object expects an array and I get [()] 09:38
Altreus github.com/shuppet/p6-api-discord/...e.pm6#L176 09:39
Altreus Right, I get a Seq even if the JSON had stuff in it 09:45
so say the docs 09:46
What's the right way of making this another array?
moritz add a .Array after the .map call 10:09
it's the map returns a Seq
m: say ([].map({}).^name
camelia 5===SORRY!5=== Error while compiling <tmp>
Unable to parse expression in parenthesized expression; couldn't find final ')' (corresponding starter was at line 1)
at <tmp>:1
------> 3say ([].map({}).^name7⏏5<EOL>
expecting any of:…
moritz m: say ([].map({})).^name
camelia Cannot map a Array to a Hash.
Did you mean to add a stub ({...}) or did you mean to .classify?
in block <unit> at <tmp> line 1
moritz m: say ([].map({;})).^name
camelia Seq
moritz m: say ([].map({;}).Array).^name 10:13
camelia Array
mornfall okay stupid question... how do i get length of an array? tried scalar, length, size, len in various combinations without success :( 10:15
or rather, length of a Seq
also can anyone point me to some form of downloadable/offline docs? because my internet connection often isn't the best and looking stuff up is really painful on docs.perl6.org 10:16
Altreus lemme try 10:17
mornfall 5to6 just says that 'scalar' is "very" gone
Altreus now I have an array with an array in it :s 10:18
Altreus not quite sure why 10:19
jnthn notable6: .elems 10:20
notable6 jnthn, I cannot recognize this command. See wiki for some examples: github.com/perl6/whateverable/wiki/Notable
jnthn oops
mornfall: .elems
I think one can install p6doc
Altreus so when I do this, if %constructor<mentions> contains an array, that array becomes the first element of @.mentions, instead of becoming @.mentions github.com/shuppet/p6-api-discord/...e.pm6#L182 10:21
not sure I understand why
m: class A { @.arr } my $a = A.new(arr => [ 'array' ]); say $a.arr; 10:23
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable @.arr used where no 'self' is available
at <tmp>:1
------> 3class A { @.arr7⏏5 } my $a = A.new(arr => [ 'array' ]); sa
expecting any of:
term
Altreus oops
m: class A { has @.arr } my $a = A.new(arr => [ 'array' ]); say $a.arr;
camelia 5===SORRY!5=== Error while compiling <tmp>
Strange text after block (missing semicolon or comma?)
at <tmp>:1
------> 3class A { has @.arr }7⏏5 my $a = A.new(arr => [ 'array' ]); say
expecting any of:
infix
in…
Altreus m: class A { has @.arr }; my $a = A.new(arr => [ 'array' ]); say $a.arr;
camelia [array]
Altreus m: class A { has @.arr }; my %c = arr => ['adfsdfasdf']; my $a = A.new(|%c); say $a.arr;
camelia [[adfsdfasdf]]
Altreus excuse me 10:24
this was not expected
scimon Two things. Has anyone used the Redis module recently who can help out on Stackoverflow? stackoverflow.com/questions/534953...for-output I'm stuck and don't have time to get Redis up and running to test it. 10:35
And I think I might have a topic for at least 1 advent calendar entry. rotor just looks fun... :) 10:36
Altreus hey we're also failing to use the redis module :D 10:46
I'll share
mornfall jnthn: thanks 10:48
scimon I took a look a noticed it's a wee bit stale. Might just be it needs a going over. 10:49
Geth doc: 1cbbed17fb | Alberto++ (committed by Lucas Buchala) | htmlify.p6
Update htmlfy.p6 (#2478)

Making changes suggested in the following issue:
  github.com/perl6/doc/issues/2476
10:49
Altreus scimon: apparently we can't run it because we don't have a liberedis.so 10:51
But I can't figure out what that is
mornfall what's the opposite of slurp? 10:52
El_Che spurt 10:53
mornfall oh, spurt perhaps 10:54
\o/
jnthn Altreus: There's also a Redis::Async module, and the stuff by its author tends to work nicely, so might also be worth trying instead
Altreus ah! 10:57
righto
oh wait
that is what we're using!
jnthn: since you're nearby could you cast an eye over my evals in scrollback? 10:58
Altreus not sure if it's me or perl doing it wrong 10:58
scimon jnthn: I'll mention Redis::Async on the SO page. 10:59
jnthn Altreus: It's you. The values of a hash are scalar containers (that is, items) 11:01
Altreus: Bind instead of assign, or just do |%a.Map when calling .new 11:02
Altreus righto! I still have to fully grok this container concept :) 11:04
Altreus worked perfectly :o 11:24
My "first" impressions of Perl6 are that once you know what's happening it's pretty sweet, but there are *way* more traps and pitfalls caused by internal functional decisions that make it to the surface 11:25
Than perl5
this container-vs-value thing tends to bite me, as does the where-did-my-error-go async problem
lizmat Altreus: care to elaborate on the container-vs-value thing that's biting you ? 11:27
Altreus there's an example above courtesy of the bot
A.new(x => [...]) vs A.new(|%hash) 11:28
You have to do |%hash.Map to get the equivalent
I can manage the 5-to-6 transition of %hash to |%hash, but in fact there are two levels of knowledge required to get this right 11:29
So although I *can* just forget containers exist, I can't do semi-advanced things without them showing up
lizmat Feels to me you're more getting bitten by flattening behaviour... but yeah: that's one of the things you have to get used to when coming from Perl 5 where everything is always flattened 11:34
m: { our sub foo() { "bar" } }; say foo; 11:49
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared routine:
foo used at line 1
lizmat moritz masak jnthn TimToady_ ^^^ is it intentional that this doesn't work or not ?
m: { our $foo = 42 }; say $foo # similarly 11:52
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '$foo' is not declared
at <tmp>:1
------> 3{ our $foo = 42 }; say 7⏏5$foo # similarly
Geth doc: c743f2614f | (JJ Merelo)++ | META6.json
Eliminates LWP::Simple and IO::Socket::SSL which are not used here. Closes #2472
12:07
lucasb In '{ our $foo = 42 }', isn't "our $foo" a lexical declaration of a package variable? (In P5 terms :) 12:10
if it's lexical, I expect it not to be available outside its scope, the block 12:11
Altreus hmm
m: class A { has @.arr }; my $array = ['sfasdadf']; my $a = A.new(arr => $array); say $a.arr 12:12
camelia [[sfasdadf]]
Altreus ^ this is what I was getting bitten by
Altreus m: class A { has @.arr }; my @array = 'sfasdadf'; my $a = A.new(arr => @array); say $a.arr 12:12
camelia [sfasdadf]
Altreus it's not so much flattening behaviour as what was being stored in the first place
🤔 what about ...
m: class A { has @.arr }; my @array = 'sfasdadf'; my %c = arr => @array; my $a = A.new(|%c); say $a.arr 12:13
camelia [[sfasdadf]]
Altreus hum
lizmat lucasb: the docs on "our" are not very clear on that 12:15
lucasb I just assumed the behavior was similar to P5
lizmat in any case, it is unexpected behaviour to me
lucasb I was just thinking about the scalar variable "{ our $foo }" 12:16
lizmat but it is not ?
lucasb but the our sub, indeed, is a interesting question :-)
lizmat { our $a = 42 }; say $a # 42 in Perl 5
lucasb change $a to something else? :-)
{ our $A = 42 }; say $A 12:17
Variable "$A" is not imported at - line 5.
moritz lizmat: re our foo, I think that's intentional, yes
lizmat argh
lizmat { our $foo = 42 }; say $foo # gives 42 for me with Perl 5 lucasb 12:18
lucasb ah, under use strict 12:19
it gives an error :-)
lizmat { use strict; our $foo = 42 }; say $foo # Global symbol "$foo" requires explicit package name
yeah, funny
so at compile time it can't find it, and at runtime it could 12:20
moritz: what's the rationale ?
andrzejku lookatme_q ping 12:23
.ping
yoleaux There is no ping command; nor can this be construed as a response.
andrzejku .ping lookatme_q
yoleaux There is no ping command; nor can this be construed as a response.
moritz lizmat: our installs into the lexical and into the package scope simultaneously 12:44
lizmat: so that non-qualified accesses like $foo and &foo only have to look into the lexical scope
lizmat: and since lexical scopes are immutable at runtime, this allows use to catch missing symbols at compiel time 12:45
lizmat ah, ok, yeah, makes sense # moritz++
sena_kun
jnthn lizmat: Yes, intentional. Lookup of subs, unless they are explicitly qualified of course, is always lexical. 12:52
ah, I see moritz++ answered too, with more detail :)
jnthn was still in backlog :)
Altreus is there a shorter way of saying await x, that looks more chainable? 13:01
(await (await x).y).z is ... um
lizmat Altreus: maybe Object::Delayed's "catchup" is something for you :-) 13:02
jnthn x.&await.y.&await.z
Altreus ketchup? Is that like sugar?
lizmat modules.perl6.org/dist/Object::Delayed
jnthn But also consider putting a method on `x` that does those 13:03
OO designs that involve digging deep into things are a refactoring nuisance
lizmat "The catchup subroutine allows you to transparently run code asynchronously that creates a result value. If the value is used in any and the asychronous code has not finished yet, then it will wait until it is ready so that it can return the result."
Altreus I can use apostrophes can't I
So I could have x and x'
lizmat spots a typo in the pod 13:04
Altreus oh slack for lazy properties is nice 13:04
that's got to be the third or fourth alternative to that I've seen
lizmat Altreus: in Perl 6 ? If so, which one? 13:06
Altreus it's been a while since I looked but um 13:07
I have commented out 'will lazy ...' on one of my properties
And that wasn't the first one I came across to do that 13:08
but I forgot what I found when I looked
lizmat fwiw, "has $.foo = slack { ... }" works as intended
and hopefully expected :-) 13:09
Altreus The reason I forgot is I'm not in a position to bother with lazy stuff yet :) 13:13
Altreus But this seems like a version that Just Works so I'll try it when I do 13:14
ah looks like I can't end a method name with an apostrophe
Altreus shame, I thought I could use it as prime 13:14
although... 13:17
nah, I can't come up with a convention I'm happy with, except to just add more words 13:19
I really want to use punctuation :P
oh
I can!
I made it $message.channel(:now) 13:24
I couldn't see a way of doing anything like $message.channel! or $message.channel` 13:27
lizmat there's a slang that allows ! at the end of identifiers 13:28
modules.perl6.org/dist/Slang::Pier...hub:FROGGS
afk for a few hours& 13:29
Altreus that's amazing and I love it 14:04
not convinced it covers my use case so I'd have to test 14:05
I just realised why I prefer that 14:07
It's because the methods no longer return Promise
they return It Depends
Altreus :O it works 14:12
When I tried before it got confused by « !. » in « self.channel!.etc() » but it doesn't now
Altreus Slang::Piersing breaks boolean adverbs 14:15
method pinned-messages($force?) → Variable '$force' is not declared. Did you mean '$force?'? 14:16
I suppose I don't *need* that ?
timotimo oh whoops 14:16
well, you can always make parameters optional by supplying a default value instead
Altreus I just realised that was supposed to be :$force anyway 14:17
Altreus Secondarily, you have to use it in consuming code too 14:20
Makes sense but I was hoping it would bleed over
timotimo not absolutely necessary 14:21
you can call the method with quotes 14:22
$foobar.'hello!'()
Geth doc: 0852a84ab4 | Coke++ | xt/braces.t
angle brackets is also a thing
15:01
doc: d201389198 | Coke++ | 3 files
prefer non-hyphenated
doc: 5f93731c5b | Coke++ | xt/braces.t
Find some bracket variants
Altreus seems worse :P 15:02
ufobat p6: say 1 15:20
camelia 1
ufobat p6: my %h = gather { take "foo" => 1; take "bar" => 2}; say %h
camelia {bar => 2, foo => 1}
ufobat this is intentional, right?
because docs.perl6.org/syntax/gather%20take just talked about arrays
moritz it's the %h = that turns it into a hash 15:21
the return value from gather/take is still a Seq
ufobat ah okay
i am still unhappy with the documentation because i almost discarded my idea of using gather/take for a hash 15:22
Kaiepi m: my %foo is Map = {a => 1}; say %foo 15:30
camelia Map.new((a => 1))
Kaiepi i had no idea is could be used like that
Geth doc/master: 5 commits pushed by Coke++ 15:57
jmerelo squashable6: status 16:24
squashable6 jmerelo, ⚠🍕 Next SQUASHathon in 3 days and ≈17 hours (2018-12-03 UTC-12⌁UTC+14). See github.com/rakudo/rakudo/wiki/Mont...Squash-Day
jmerelo Almost there!
TreyHarris I'm confused... if I open a handle like `my $h = $f.open;` in a routine, if I include the line `LEAVE try $h.close;` anywhere after that point, then attempts to read the file fail with `Cannot do 'get' on a handle in binary mode`, but if I leave the LEAVE out, everything works fine (except the file doesn't get closed). 16:32
moritz TreyHarris: are you trying to read in the same scope as the LEAVE statement? 16:33
TreyHarris moritz: Yes 16:34
jnthn And you're completing the read in that scope (e.g. not returning .lines, which is lazy)?
TreyHarris it's `return $h.lines; LEAVE try $h.close;`
moritz TreyHarris: ah, that explains a lot
TreyHarris: $h.lines is lazy 16:35
so, you return a lazy list, currently empty
then you close the file handle
and then the caller tries to consume the lazy list, and finds the file handle broken
s/broken/closed/
TreyHarris moritz: but why binary? If I got an file closed exception, I would have immediately known this was this issue
moritz TreyHarris: that does look weird 16:36
there are two possible solutions
one is to return an eager list
the other is to explictly close after it has been consume, for example
sub my-lines($filename) { my $f = open $filename; return gather { take $_ for $f.lines(); $f.close } } 16:37
Xliff TreyHarris: "return $h.lines.Array; LEAVE try $h.close;"
But it's better to listen to moritz. He knows more. ;) 16:38
moritz TreyHarris: IMHO the misleading error message warrants a bug report though
Xliff: not at all. What you wrote was my option one, return an eager list
TreyHarris to do that, though (explicitly close after consume), I must assign to a global or return the handle, right? Or in the above gather { } case, it will only close if I read the last line, correct? If I never read the last line, even if the return goes out of scope, the close won't happen? 16:39
TreyHarris hm, the docs mention a "will leave trait", but rakudo says "leave not implemented yet, sorry" 16:40
moritz well, if the caller discards the reference to the lazy list, and the GC eventually gets the file handle, it closes it
TreyHarris (Not sure that would be any different than the LEAVE try $h.close though)
TreyHarris Xliff: I know how to make it eager, but I was under the misimpression that if you returned a lazy, LEAVE didn't phase in until the lazy was exhausted 16:41
Xliff Ah! 16:42
moritz TreyHarris: would not be different, no
TreyHarris hm, Trait::IO has a 'does auto-close' trait that... is all in NQP land, so I guess I need to try it to see what its behavior is
Looks to me it would be identical to the gather one though, if I'm reading these nested levels right? github.com/zoffixznet/perl6-Trait-...ait/IO.pm6 16:43
TreyHarris Is this exception a rakudo bug or a perl6 bug? 16:46
ufobat I've got a yml configuration file which i read with YAMLish, but I am wondering if there is a module that helps me to ensure that all required configuration parameres are actually provided
ther is no such thing as "ypath", similar to xpath for xml? 16:48
jnthn ufobat: No, but you can use JSON::Schema if the YAML deserializes into just hashes and arrays 16:49
ufobat: We're doing that on a $dayjob project for validating YAMLs
TreyHarris: the bad close error would be a Rakudo bug 16:50
ufobat ah thank you jnthn 16:51
TreyHarris jnthn: Okay, thanks. On another note, is it a bug that rakudo-star latest says "v6.c"? I thought I saw an announcement that it was v6.d
moritz the Star that defaults to v6.d hasn't been released yet, I believe 16:52
jnthn TreyHarris: No, the 6.d language spec has been released, but a compiler supporting it not yet (though probably will be today, but then a Rakudo Star supporting it will be a bit longer)
moritz we're still looking for a release manager for that
TreyHarris jnthn: ah-hah, yes... looks like the release notes I saw it in was a PDF for some reason, and my email doesn't search inside PDF's. 16:53
jnthn moritz: I think a couple of folks volunteered :) 16:54
clarkema Speaking of which, I was one of them 16:57
What's the process?
TreyHarris Hmm, is the final example in docs.perl6.org/routine/dir that is introduced with, "A lazy way to..." actually supposed to be lazy? It doesn't appear to be in rakudo-star 2018.10 at least. 16:58
(Or maybe "a lazy way" was meant metaphorically, in which case the word should probably be changed?)
sena_kun jmerelo, ping? 16:59
jmerelo sena_kun: pong? 17:03
sena_kun jmerelo, \o/
jmerelo sena_kun: hi :-)
moritz clarkema: on github.com/rakudo/star/issues/124 stmuk posted a link to the release guide
clarkema: I've also sent you some invitations to github organisations which you should accept, and commented something about SSH public keys 17:04
clarkema moritz: got it -- I'll start having a play around with the process to get famililar with it and get an environment set up
sena_kun jmerelo, I have two questions, first is about Advent, second one about academia with Perl 6, I think I can, probably, make you a bit happier and ask for some advices, though I wonder if I can PM you now || if it will be comfortable.
b2gills TreyHarris: use `return $h.lines( :close )` rather than `LEAVE $h.close; return $h.lines()`
moritz clarkema: if you need shell access to a Linux box for the generic .tar.gz, I can also help you
sena_kun: if they are general question about p6 Advent, I can also try to answer 17:05
clarkema moritz: thanks -- I should be ok unless I it's something that requires a particular environment or keys etc
I've got a pretty hefty linux workstation here
moritz clarkema: no, just a bog-standard Debian box :)
sena_kun moritz, well, I think I need to create an account at wordpress to get an ID out of it, then post it. 17:06
>all my usual nicknames are already taken, no posts at those accounts 17:07
heh
moritz sena_kun: /msg me your email address (or wordpress.com account name), and I'll send you an invitation
ufobat jnthn, with JSON::Schema i can write my json-schema in yaml, right? thats funny. like JSON::Schema.new(schema => load-yml($yaml-string))
sena_kun moritz, ok, thanks!
jnthn ufobat: Heh, yeah, I guess you can :) 17:09
jmerelo sena_kun: please do that 17:10
moritz ufobat: we use that at $work
mostly because YAML can be much more concise, and adding comments is so much easier
ufobat exactly! 17:11
jnthn There's also a JSON::Path module
moritz sena_kun: oh, maybe by email is easier (moritz.lenz@gmail.com), privmsg get lost on freenode due to anti-spam measures
jmerelo Just a reminder that there are still a few slots open: github.com/perl6/advent/blob/maste...8/schedule 17:12
(and that the page has moved to a new repo) 17:13
(I'll keep track of both anyway)
(Oh, the previous one has disappeared...)
sena_kun moritz, sent one. 17:16
ufobat p6: with $*DOESNOTEXIST { .say }
camelia ( no output )
ufobat p6: with $DOESNOTEXIST { .say }
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '$DOESNOTEXIST' is not declared
at <tmp>:1
------> 3with 7⏏5$DOESNOTEXIST { .say }
ufobat p6: say $*DOESNOTEXIST
camelia Dynamic variable $*DOESNOTEXIST not found
in block <unit> at <tmp> line 1
ufobat is the first one a bug? 17:17
moritz sena_kun: invitation sent
jnthn ufobat: I don't see any bug; $*DOESNOTEXIST evaluates to a Failure, which is not .defined 17:29
ufobat ah a failure
ufobat because accidently used the wrong sigil like $*ENV, and with 'with' it's harder to spot my mistake 17:30
sena_kun moritz, an invitation letter was in spam for some reason, but accepted the invitation! Thanks. 17:43
moritz ufobat: you might want to 'use fatal;' 17:44
ufobat moritz, oh cool. thank you 17:46
tyil I'm trying to use Proc::Async, and the big example block of code at the top says I should be able to use .exitcode, but that method doesnt appear in the list of methods in the docs 17:52
it also doesnt seem to appear in Proc::Async.^methods
timotimo i think it is in the Proc object that you get returned at the end? 17:53
tyil also, can I place a tap on the stdout and get it per-line
timotimo the stdout supply spits out characters (or bytes) but you can just use .lines on the supply to get a supply that emits lines individually
moritz timotimo++ 17:54
tyil ah, there's a Proc returned by the promise from .start
I can work with that
and $async-proc.out.lines.tap?
stdout*
timotimo yeah, but i'd always recommend trying to work with react or supply blocks 17:55
jnthn `whenever $async-proc.start { if .exitcode > 0 { note "oh noes" } } 17:57
tyil thanks, I should be able to continue again
:>
timotimo thumbs up
loops Why does p6 think this is an error: sub x() {}; with x { } and require it to be written as: sub x() {}; with x() { } 18:08
shouldn't the sub x() ... definition with empty parameter list indicate that no block is expected as a parameter?
jnthn loops: No, the signature of the sub has no impact on how its arguments are parsed. 18:10
loops jnthn: interesting, thanks. 18:11
timotimo (since subs can be post-declared) 18:31
(alternatively: in order for subs to be post-declarable)
mornfall what is the preferred way to run programs? 18:44
El_Che mornfall: can you give some context? 18:45
mornfall well, one thing would be running a program and capturing its output... possibly set a timeout; along the lines of p5 IPC::Run 18:46
cono Proc::Async
El_Che ok, from within your program
yes, Proc::Async because of the timeout. For simpler cases there is 'run' and 'shell' 18:48
mornfall i'll look, thanks (gotta get off train, bbiab) 18:50
El_Che see you!
mornfall so... http client and a json parser? O:-) i guess i'll have to go to CPAN for those 19:04
tobs eco: WWW 19:06
buggable tobs, WWW 'No-nonsense, simple HTTPS client with JSON decoder': github.com/zoffixznet/perl6-WWW 5 other matching results: modules.perl6.org/s/WWW
tobs mornfall: all-in-one
mornfall can i somehow fetch docs with zef? 19:09
(or build) 19:10
mornfall tries zef install p6doc 19:11
but man, zef is super slow :( 19:12
19 seconds to 'zef info p6doc' 19:13
can i ask zef to install p6doc into ~/.perl6? died with Failed to create directory '/usr/local/share/perl6/site/doc' (i installed other things and those worked?) 19:16
moritz you can ask it lots of things... :D 19:20
mornfall moritz: any hint on why? googling didn't bring up anything :( 19:26
or rather, how
maybe i need newer rakudo
moritz don't know 19:27
mornfall well, it did something if i zef install --force p6doc... i have a binary now, but p6doc -l gives me a backtrace :\ 19:29
let's try fetching rakudo star instead, something is obviously wrong with this late-2017 rakudo from ports 19:35
lizmat mornfall: yeah, you want a more recent rakudo for sure! 19:39
mornfall well, i vaguely remember startup time getting a lot better, and there's a noticeable delay now between running a script and something actually happening... that's a little annoying :p 19:40
btw. is pugs still a thing?
sena_kun no 19:43
mornfall p6doc \o/ it's doing stuff 20:00
mornfall but neither JSON::Path nor WWW have any documentation? :\ 20:07
moritz there's documentation in the README: github.com/jnthn/json-path#readme 20:08
mornfall so zef look?
lizmat
.oO( that's what I like about App::Mi6: it creates a README from the pod )
20:15
[Coke] m: #` 21:46
camelia ( no output )
SmokeMachine is there already defined any default to create modules that will run on browser and interact with js? 22:10
I am thinking of writing one... I am testing on 6pad... 22:11
Im trying to write a "inline dom"...
here is my poc: perl6.github.io/6pad/#3d9c7dd4834c...9011ab6420
Geth advent: 0b42e35fb0 | (Tom Browder)++ (committed using GitHub Web editor) | perl6advent-2018/schedule
update title
22:44
AlexDaniel huggable: advent 22:51
huggable AlexDaniel, Sign up to write an Advent blog post: github.com/perl6/mu/blob/master/mi...8/schedule
loops Is there any way to arrange for an object a callback when it falls out of scope? DESTROY only gets called on garbage collection. 23:07
jnthn loops: No, but you can write a scope exit handler with LEAVE
loops Or what is the idiomatic way to release some external resource acquired inside an object when it is created? 23:08
jnthn, yeah, was coming to the conclusion that it has to be left in the hands of the caller to manually release the object rather than expecting it to happen automatically. 23:10
gfldex m: my class C { die "I'm still alive!" }; my $c = C.new; { my $d := $c; LEAVE $d.die }; 23:11
camelia I'm still alive!
in block <unit> at <tmp> line 1
loops gfldex: i'm not sure what that is demonstrating. 23:13
(sorry, pretty new to P6)
gfldex loops: objects can't keep track where and how often they are referenced (here with binding via := ). 23:14
loops: they can't know if they are still needed
loops gfldex, how is anything garbage collected ever then? 23:15
gfldex because the runtime knows 23:16
loops: what recource do you want to free? 23:17
loops glfdex, well in this particular case, it's not a big deal, I am just arranging to make sure the terminal is restored to cooked mode from raw 23:18
gfldex loops: then an ENTER/LEAVE pair seams fitting 23:18
loops glfdex, yeah for sure. I was just thinking it could be arranged by the class itself to clean things up when the scope died 23:19
rather than having to put a LEAVE term.clean
but it's not a big deal, was just a curiosity. 23:20
Xliff gfldex: Isn't that die a compile time drop? 23:22
gfldex Xliff: it is :)
Xliff o_O
OK! ;)
Geth advent: 47b106ab16 | (Jonathan Worthington)++ (committed using GitHub Web editor) | perl6advent-2018/schedule
Claim a spot
23:23
gfldex Xliff: I already stashed it away in my riddles.p6 file :-> 23:24
Xliff gfldex: What were you expecting to happen? :)
It looks like when class C is compiled, you die. You don't go any further. 23:25
Compare that, to this:
m: my class C { say "OOP!"; method die { say "ERP!" }; }; say "erp!"; my $c = C.new; { say "Hi"; my $d := $c; LEAVE $d.die };
camelia OOP!
erp!
Hi
ERP!
gfldex Xliff: I was surpries to output anything. My guess was a big NOP. 23:26
Xliff m: my class C { say "OOP!"; method die { say "ERP!" }; }; INIT { say "erp!" }; my $c = C.new; { say "Hi"; my $d := $c; LEAVE $d.die }; 23:27
camelia erp!
OOP!
Hi
ERP!
gfldex There are quite a few BEGIN-phasers in Perl 6 that are hard to spot. :)
Xliff m: my class C { say "OOP!"; method die { say "ERP!" }; }; CHECK { say "erp!" }; my $c = C.new; { say "Hi"; my $d := $c; LEAVE $d.die };
camelia erp!
OOP!
Hi
ERP!
Xliff m: my class C { die "ERP!" }; CHECK { say "erp!" }; my $c = C.new; { say "Hi"; my $d := $c; LEAVE $d.die }; 23:28
camelia erp!
ERP!
in block <unit> at <tmp> line 1
jnthn Class bodies run just where they are in the code. Role bodies run when the role is composed.
m: say 1; class C { say 2 }; say 3
camelia 1
2
3
gfldex Is that doced? 23:29
Xliff jnthn: Assuming they aren't pre-empted by a phaser. ;)
gfldex Looks like this is a ENODOC. 23:30
gfldex files issue
Xliff Heh! .oO( ENODOC... LOL! ) 23:32
jnthn No idea; role is the only exception to the rule, though. All other packages work as with `class` 23:34
(Which is because a role is generic) 23:35
Xliff jnthn: What would be the best way to implement a generic List? 23:41
I've always understood generics as being tied to the object? The way Perl6 does Generics it almost sounds like I'd need to implement all of the List functions in the role and use that. 23:42
timotimo roles can supply methods for you, too
Xliff I know. 23:43
My problem is that the information I want is tied to the class, not the role.
So how can role methods apply to a type attribute?
timotimo the role can access stuff from the class, though
a type attribute?
Xliff s/type/class/
timotimo not sure what "apply to" means in this context? 23:44
Xliff Say I haved a CStruct with a pointer in it. I want to be able to extract that as a native type, but I won't know what that is until run-time. How would that work?
And yes... there are GLib applications to this. :) 23:45
timotimo you mean you want to have like a MyStruct[int] that will have a few attributes and then a native int attribute? 23:45
Xliff Yeah. 23:47
timotimo you'd put that attribute in the role, though i can see why you'd have a problem with that, since attribute order actually matters there 23:47
so, you can put all attributes in the role
Xliff For a repr('CStruct') ? 23:48
timotimo i don't think roles have reprs
Xliff Right, but in this case, MyStruct is currently CStruct
Just with a generic Pointer as one of the attributes that can be any native type. 23:49
Makes getting to the data a little problematic.
timotimo you can give MyStruct a parameterize method that applies the role for you
Xliff Got an example? 23:50
Currently I'm doing this: github.com/Xliff/p6-GtkPlus/blob/m...st.pm6#L37 23:52
But would really like it if I could do this using a parameterized role.
timotimo m: class MyStruct is repr<CStruct> { method ^parameterize(|c) { say "parameterizing with arguments ", c.perl; } }; MyStruct[int]; MyStruct[uint16]; 23:53
camelia 5===SORRY!5=== Error while compiling <tmp>
Class MyStruct has no attributes, which is illegal with the CStruct representation.
at <tmp>:1
Xliff Native type object is specified in new
timotimo m: class MyStruct is repr<CStruct> { has int $.foo; method ^parameterize(|c) { say "parameterizing with arguments ", c.perl; } }; MyStruct[int]; MyStruct[uint16];
camelia parameterizing with arguments \(MyStruct, int)
WARNINGS for <tmp>:
parameterizing with arguments \(MyStruct, uint16)
Useless use of constant integer MyStruct[uint16] in sink context (line 1)
Useless use of constant integer MyStruct[int] in sin…
timotimo where in the struct is the attribute that can have different native types?
Xliff $.data 23:54
timotimo i don't see a $.data there 23:54
Xliff Yeah. Here's the def: github.com/Xliff/p6-GtkPlus/blob/m...s.pm6#L112 23:55
timotimo so what you want is actually a GList[int] or GList[num] or something like that?
Xliff Yeah.
timotimo that's going to be a bit more difficult, hmm. 23:56
Xliff Heh. Yeah. Tell me about it! :)
timotimo however, since you're already accessing it via accessors anyway, you can only mix in the accessor via the role 23:57
Xliff Right. That was my initial thought. I ended up just passing the type object in new
timotimo so mix in something like "role DataOfType[Type] { method data(--> Type) { return nativecast($!data, Pointer[Type]) } }
"
Xliff .... 23:58
/o\
That makes sense. Thanks!
timotimo YW :)
Xliff $.data would then need to be $!data, then. 23:59
Or can role methods override class methods?
timotimo they can