IRCloggy #perl6 2017-09-08

Logs Search ←Prev date Next date→ Channels Documentation

Provider of IRC logs since 2005.
WARNING: As Freenode became unjoinable and lost all warnings in topics, we cannot log channels on Freenode anymore.

2017-09-08

itaipu left00:01
mack[m] left00:02
cpage_ joined00:04
mack[m] joined00:14
audiatorix joined00:22
audiatorix Hey dudes. I'm still adjusting to 6's new regex system. Any idea why the following is producing this error?: No such method 'Letter' for invocant of type 'Match'00:23
my regex arg { <Letter>+ }00:24
my regex call { <arg>[\,\s*<arg>]* }00:24
'aa' ~~ /<call>/ # error produced here00:24
raschipi Where is letter defined?00:25
audiatorix It's one of the defaults, no?00:25
Or does it need to be L?00:25
Same error with L00:25
mr_ron joined00:27
mr_ron rakudo: my regex arg { <:Letter>+ }; say so "abc" ~~ /<arg>/00:28
camelia rakudo-moar 347da8: OUTPUT: «True␤»00:28
audiatorix Ah, needs the colon00:28
raschipi Yeah, it's missing the : to be a chaachter class.00:28
audiatorix Right, so char classes need colons and other regexes do not00:29
Thanks00:29
raschipi There's <alpha> without the colon too.00:30
armin_ joined00:30
raschipi as a predefined subrule as you asked for00:30
audiatorix Yeah just saw that00:30
I was just testing out my knowledge before writing something more complicated to parse basically function calls00:31
making a templater00:31
mr_ron left00:31
BenGoldberg joined00:33
armin left00:34
dj_goku joined00:37
RID_1984 joined00:40
RID_1984 left00:41
kyan joined00:41
AlexDaniel switching to another laptop is harder than moving to another place :-S00:41
dj_goku left00:43
margeas left00:49
raschipi audiatorix: remember to call a predefined regex with a dot in front to supress capture:00:54
m: say 'abc' ~~ /<alpha>+/; say 'def' ~~ /<.alpha>+/00:54
camelia rakudo-moar 347da8: OUTPUT: «「abc」␤ alpha => 「a」␤ alpha => 「b」␤ alpha => 「c」␤「def」␤»00:54
konsolebox left00:56
konsolebox joined01:01
b2gills AlexDaniel: I was locked out of my password manager once, because I was using a laptop that I hadn't used recently. (I eventually found a way to get in)01:02
AlexDaniel b2gills: :O01:03
b2gills It required using the /info cmd on IRC to get an IP address to SSH into01:03
AlexDaniel being locked out of your password manager sounds really horrible01:05
I do have backups of my passwords *somewhere*… maybe I should practice the emergency situation :-/01:06
raschipi AlexDaniel: Make sure you can restore from your backups, it's important.01:07
AlexDaniel well, my passwords is the only thing I have to backup. All code I write is in git repos (so also pushed somewhere), everything else I really don't care about01:09
not that I wouldn't be sad for a minute or two if I lose it, but I am not spending my time trying to create backups for it :)01:09
raschipi Buy a strong box and store your passwords there.01:11
dogbert2 left01:11
AlexDaniel alternatively, just upload it to github… then I only have to backup my private key :D01:12
raschipi How to you want to use your private key to access github without it's password?01:13
AlexDaniel it can be a public repo01:14
raschipi Instead make it passwordless, then. Then just keep it safe.01:16
Skarsnik left01:29
audiatorix Any idea why this regex is invalid?: -<[ \$ \, ]>+01:34
What I'm trying to achieve is "anything but literal $ or literal , one or more times"01:34
geekosaur shouldn't that start with <-[ instead of -<[ ?01:35
audiatorix Ah, so it should01:36
What's the logic behind that?01:36
[] on their own simply group01:37
geekosaur same reason an older regex does something different with [-... vs. -[...01:37
<> is a meta-operation of some kind, - prefix means invert, [] is char class. vs. without the <>, [ ] is non-capturing group01:38
audiatorix Ah okay, that's what I was thinking once I saw the answer01:38
geekosaur the first character after a < in a < > is special, - inverts the metaop, . prevents capturing (used with named rules like <ws> or <digit>) etc.01:38
(this is oversimplifying a bit)01:39
audiatorix Cool01:40
So, different question: in a grammar, how do I specify that, in a given place, either token A or token B may appear?01:40
geekosaur A | B01:42
audiatorix <A> | <B> ?01:42
AlexDaniel yea01:42
geekosaur with brackets around if it's part of a larger thing e.g. <foo> [ <bar> | <baz> ] <quux>01:43
AlexDaniel or maybe || if you care about order and not about longest token matching01:43
audiatorix And if I needed to use that more than once, would throwing it in a sub-regex make sense (so that a new token doesn't need to be created for it)01:45
ilbot3 left01:45
AlexDaniel “sub-regex”?01:46
I guess there's no problem with creating another token for it. But I don't know what would be the best practice01:46
audiatorix named regex01:46
I'm thinking if I make another token, it will make the structure more complex where it doesn't need to be01:47
geekosaur um, they all add the same complexity01:47
they just have different default behaviors01:47
(i.e. different default flags on the things they create, like :sigspace or :ratchet etc.)01:48
audiatorix Ah01:48
dang, I was thinking for some reason that `regex` didn't become part of the resulting structure when parsing01:48
geekosaur they're all just specialized variants of methods01:49
cuonglm joined01:49
char_var[buffer] left01:50
geekosaur the closest you get to not adding more structure is an interpolating variable that isn't treated as a literal <$foo> and that has other issues, including performance and potential security concerns01:51
[Coke] n 01:51
~>OA01:51
audiatorix Okay, I'll just have it twice in the TOP token01:52
[Coke] ... weird.01:52
audiatorix not a huge deal01:52
Thanks a ton01:52
francesco_ joined01:52
ilbot3 joined01:54
ChanServ set mode: +v01:54
geekosaur left01:54
raschipi audiatorix: I gave you the answer above, put them into another method but call it with a dot to avoid making the capture more complex.01:55
m: say 'abc' ~~ /<alpha>+/; say 'def' ~~ /<.alpha>+/01:56
camelia rakudo-moar 347da8: OUTPUT: «「abc」␤ alpha => 「a」␤ alpha => 「b」␤ alpha => 「c」␤「def」␤»01:56
Franciman left01:56
geekosaur joined01:57
audiatorix Oh, so you did. My bad01:59
pilne left02:02
noganex_ joined02:17
dj_goku joined02:17
dj_goku left02:17
dj_goku joined02:17
noganex left02:20
wamba left02:23
llfourn joined02:39
geekosaur left02:42
geekosaur joined02:45
Cabanossi left02:55
eliasr left02:55
Cabanossi joined02:57
Actualeyes left03:08
snarkyboojum joined03:13
Cabanossi left03:40
Cabanossi joined03:42
Cabanossi left03:54
Cabanossi joined03:56
AlexDaniel left04:09
dj_goku left04:14
cuonglm left04:14
dj_goku joined04:15
raschipi audiatorix: Did my suggestion work?04:18
cpage_ left04:21
kaare_ joined04:36
Actualeyes joined04:43
cpage_ joined04:58
xtreak joined04:58
skids left05:09
audiatorix left05:12
BenGoldberg left05:19
khw left05:19
audiatorix joined05:19
khw joined05:23
Cabanossi left05:25
Cabanossi joined05:26
kyan left05:33
ufobat joined05:45
snarkyboojum left05:45
lowbro_ joined05:58
lowbro left06:00
ash_gti joined06:07
xtreak left06:14
zakame joined06:25
xiaoyafeng left06:26
leont joined06:26
ChoHag joined06:32
leont left06:42
gigavinyl joined06:44
gigavinyl left06:45
jonas1 joined07:01
raschipi left07:02
ash_gti left07:08
Cabanossi left07:08
Cabanossi joined07:11
nattefrost joined07:12
darutoko joined07:17
Geth ¦ doc/split-and-rephrase-lines-in-footer: c108ce774f | (Zak B. Elep)++ | 2 files07:24
¦ doc/split-and-rephrase-lines-in-footer: Split and rephrase lines in the footer 07:24
¦ doc/split-and-rephrase-lines-in-footer:07:24
¦ doc/split-and-rephrase-lines-in-footer: The first paragraph/line was getting too long, so split it a bit and07:24
¦ doc/split-and-rephrase-lines-in-footer: rephrase to emphasize source location and actions to either report07:24
¦ doc/split-and-rephrase-lines-in-footer: issues and/or edit/fork.07:24
¦ doc/split-and-rephrase-lines-in-footer:07:24
¦ doc/split-and-rephrase-lines-in-footer: Fixes #1535.07:24
¦ doc/split-and-rephrase-lines-in-footer: review: https://github.com/perl6/doc/commit/c108ce774f07:25
¦ doc/split-and-rephrase-lines-in-footer: 4cff7ee700 | (Zak B. Elep)++ | lib/Pod/Htmlify.pm607:25
¦ doc/split-and-rephrase-lines-in-footer: :lipstick: phrasing for "from POD6 at perl6/doc"... 07:25
¦ doc/split-and-rephrase-lines-in-footer:07:25
¦ doc/split-and-rephrase-lines-in-footer: "From POD6 from perl6/doc" sounds odd...07:25
¦ doc/split-and-rephrase-lines-in-footer: review: https://github.com/perl6/doc/commit/4cff7ee70007:25
Sgeo left07:26
leont joined07:35
piojo joined07:39
piojo Have others gotten this error when trying to build?: "Unhandled exception: Unable to allocate an array of 8 elements"07:40
The first instance of the error is:07:42
perl.exe -MExtUtils::Command -e cp 3rdparty\dyncall\dyncallback\\*.h .rakudobrew\moar-blead-nom\install\include\dyncall Unhandled exception: Unable to allocate an array of 8 elements at <unknown>:1 (src/vm/moar/stage0/ModuleLoader.moarvm:) from <unknown>:1 (src/vm/moar/stage0/ModuleLoader.moarvm:<dependencies+deserialize>) from <unknown>:1 (src/vm/moar/stage0/nqp.moarvm:<dependencies+deserialize>)07:42
building on windows, and it worked last time I tried.07:42
raschipi joined07:45
travis-ci joined07:45
travis-ci Doc build passed. Zak B. Elep ':lipstick: phrasing for "from POD6 at perl6/doc"...07:45
https://travis-ci.org/perl6/doc/builds/273197377 https://github.com/perl6/doc/compare/c108ce774f43^...4cff7ee700c107:45
travis-ci left07:45
wamba joined07:48
piojo_ joined07:51
piojo left07:52
piojo_ lemme ask a different question: the *best* way to build, if I'm not lazy, is to set up different directories for each repository and build/install each one separately?08:01
francesco_ left08:02
piojo_ Or do developers also use rakudobrew? It can't tell whether it's versatile enough to find the commit that breaks the build, for example08:02
raschipi I don't think anyone that builds on windows hangs around on IRC...08:04
domidumont joined08:05
zakharyas joined08:06
raschipi piojo_: I think you're the closest thing to a windows expert as there is in Perl6.08:07
El_Che stmuk_builds star on windows as well, so he probably knows more about the win build process08:11
llfourn left08:15
piojo_ raschipi: haha. Someone must have made perl6 run on windows!08:16
raschipi: oh, I see. is stackoverflow a better place to go for windows-specific questions?08:17
dogbert2 joined08:18
raschipi I have no idea where you'll fing perl6-on-windows users to help you, sorry.08:18
piojo_ thanks. forget windows, then08:19
Is the right way to build perl6 to build nqp, moar, and rakudo one at a time?08:19
and to consider them separate projects which should be debugged (and git-bisected) totally separately?08:20
El_Che: is stumuk_ the person who makes star releases for win?08:22
*stmuk_, I mean08:22
tyil is there a zef command I can use to make it install all deps from a given META6.json?08:29
zakame cd to where the META6.json is then `zef install --deps-only .`08:30
tyil thanks :>08:30
ufobat left08:30
zakharyas left08:33
Geth ¦ doc: c108ce774f | (Zak B. Elep)++ | 2 files08:34
¦ doc: Split and rephrase lines in the footer 08:34
¦ doc:08:34
¦ doc: The first paragraph/line was getting too long, so split it a bit and08:34
¦ doc: rephrase to emphasize source location and actions to either report08:34
¦ doc: issues and/or edit/fork.08:34
¦ doc:08:34
¦ doc: Fixes #1535.08:34
¦ doc: review: https://github.com/perl6/doc/commit/c108ce774f08:34
¦ doc: 4cff7ee700 | (Zak B. Elep)++ | lib/Pod/Htmlify.pm608:34
¦ doc: :lipstick: phrasing for "from POD6 at perl6/doc"... 08:34
¦ doc:08:34
¦ doc: "From POD6 from perl6/doc" sounds odd...08:34
¦ doc: review: https://github.com/perl6/doc/commit/4cff7ee70008:34
¦ doc: 3444fe4033 | (Rafael Schipiura)++ (committed using GitHub Web editor) | 2 files08:34
¦ doc: Merge pull request #1541 from zakame/split-and-rephrase-lines-in-footer 08:34
¦ doc:08:34
¦ doc: Split and rephrase lines in the footer08:34
¦ doc: review: https://github.com/perl6/doc/commit/3444fe403308:34
leont left08:36
Cabanossi left08:38
Cabanossi joined08:41
stmuk_ piojo_: yes I build star on Windows every three months, although it's not my main platform of choice08:46
piojo_ stmuk_: by the way, thank you for that service!08:47
stmuk_: so if I want to debug build problems, I should work with 3 separate repositories for nqp, moar, and rakudo?08:47
stmuk_ yes and that applies to all platforms08:48
sumdoc joined08:48
sumdoc how to enabe autocompletion in Perl 6 REPL? Any idea?08:48
Autocompletion08:49
piojo_ stmuk_: thanks. I assume the READMEs in the code are enough, without a lot of custom setup needed? (I'm not thinking modules, just the core perl6)08:50
stmuk_ yes08:50
I use mingw gcc as shipped with strawberry perl or MSVC should also work08:51
raschipi sumdoc: You need linenoise.08:51
stmuk_ at least for 64 bit (I don't think anyone has done a 32 bit build for a while)08:51
raschipi https://github.com/hoelzro/p6-linenoise/#tab-completion08:51
piojo_ stmuk_: thanks, that's what I'm using too. I'll try to get it working, or at least find the bad commit soon08:52
stmuk_ https://ci.appveyor.com/project/rakudo/rakudo/branch/nom/job/m7e6fwo5hwnug90w suggests the windows build is fine08:52
piojo_: I'll also try a build very shortly08:52
piojo_ stmuk_: I think moar is the problem, not rakudo08:52
xtreak joined08:53
sumdoc raschipi linenoise or readline !! Which one better?08:53
stmuk_ yes that's usually the issue08:53
mr-foobar left08:53
raschipi sumdoc: readline doesn't have tab completion.08:54
sumdoc raschipi OK lemme build with linenoise08:54
raschipi what do you say about rlwrap?08:55
mr-foobar joined08:55
raschipi I use rlwrap, but it also doesn't have tab completion.08:56
xtreak left08:57
piojo_ raschipi: does rlwrap interfere with tab completion, if you use rlwrap+linenoise?08:57
raschipi I never tried it.08:58
piojo_ and can linenoise be configured for <esc><backspace> to delete a whole word like it does with readline?08:58
eh, I should just read the docs. I'm sure it's answered somewhere08:58
raschipi zakame: your code is in effect now, go have a look.08:59
zakame thanks raschipi !08:59
zakharyas joined09:01
sumdoc raschipi OK I am going with Linenoise. But what was good about rlwrap than linenoise u r using rlwrap. Just a curiosity!!09:06
raschipi I don't install modules.09:07
AlexDaniel joined09:07
sumdoc raschipi Thanks09:07
armin_armin09:10
rindolf joined09:12
raschipi Oh oh...09:18
https://docs.perl6.org/routine.html has a ton of 404 links...09:19
https://docs.perl6.org/routine/.= for example09:20
telex left09:21
Actualeyes left09:21
telex joined09:21
raschipi left09:23
xtreak joined09:26
ggoebel left09:29
tyil I'm trying to run perl6 on FreeBSD, but I got the error "Missing serialize REPR function for REPR VMException (BOOTException)"09:29
it runs fine on Funtoo09:29
zakharyas1 joined09:31
zakharyas left09:32
ggoebel joined09:42
tyil also, how would I go about running a perl 6 program as a daemon?09:48
zakharyas1 left09:48
zakharyas joined09:49
xtreak_ joined09:50
Skarsnik joined09:51
xtreak left09:52
eroux joined09:53
stmuk_ tyil: I just built using rakudobrew on FreeBSD 11.1 and it worked fine for me09:53
mr-foobar left09:54
tyil hmm09:54
stmuk_ maybe you have stuff hanging around from a older build?09:54
tyil the program I'm trying to run is https://github.com/scriptkitties/musashi, the command Im using to run it is perl6 -I/home/musashi/musashi/lib /home/musashi/musashi/bin/musashi.pl609:55
sumdoc Linenoise build is failing in rakudo Any help?09:55
https://github.com/hoelzro/p6-linenoise/issues/2209:55
xtreak_ left09:55
tyil no, its a new vm with perl 6 built for the first time last night09:55
mr-foobar joined09:55
tyil if it matters, I did not use rakudobrew, but just cloned https://github.com/rakudo/rakudo and ran perl Configure.pl --gen-moar --gen-nqp --backends=moar09:56
sumdoc Are there any dependencies for Linenoise?09:57
stmuk_ sumdoc: just a C compiler09:59
tyil stmuk_: if I run the program as a service (https://github.com/scriptkitties/musashi/blob/master/files/musashi.rc), it starts correctly10:02
but it doesnt run as a background service yet, so that would be my next issue10:02
rindolf left10:04
zakharyas left10:08
rindolf joined10:09
dogbert17_ joined10:11
dogbert17 left10:12
Voldenet left10:12
margeas joined10:12
mattp__ left10:13
mattp__ joined10:15
Voldenet joined10:17
Voldenet left10:17
Voldenet joined10:17
Cabanossi left10:25
ShalokShalom_ joined10:26
Cabanossi joined10:26
stmuk_ piojo_: yes I can reproduce the windows build failure "Unhandled exception: Unable to allocate an array of 8 elements"10:27
ShalokShalom left10:29
NewOne joined10:35
zakame left10:40
ShalokShalom_ShalokShalom10:41
Aaronepower left10:42
HoboWithAShotgun joined10:43
HoboWithAShotgun good day you wonderful people. what's the perl 6 way of constraining a class' attribute?10:44
Skarsnik has Int $.attribute ?10:45
HoboWithAShotgun like i want a "has $.radians" that will only accept values between -pi and + pi10:45
timotimo if you want extra constraints, define a subset type and use that there10:45
m: subset Radians of Real where -pi < * < pi; class A { has Radians $.r }; say try A.new(r => 1); say try A.new(r => 4)10:45
camelia rakudo-moar 347da8: OUTPUT: «A.new(r => 1)␤Nil␤»10:45
Skarsnik fun10:46
TEttinger left10:47
Juerd -pi to +pi? Why not 0 to tau?10:47
timotimo actually, any value between -Inf and Inf is a value in radians :P10:48
sumdoc left10:48
Juerd Sure, but if you're limiting, wouldn't it make sense to limit that to 0 <= r < tau?10:49
timotimo m: say tau10:49
camelia rakudo-moar 347da8: OUTPUT: «6.28318530717959␤»10:49
piojo_ stmuk_: thanks. I intend to do a git rebase, but I won't be able to until monday10:50
xtreak joined10:51
xtreak left10:52
mr-foobar left10:54
notbenh left10:55
notbenh joined10:56
HoboWithAShotgun ah, my code involves triangles, so only values between 0 and 90° make sense10:58
180° sorry10:58
mr-foobar joined11:00
HoboWithAShotgun but it works, thanks. at first tests failed, but then i realized <= instead of <11:00
+ i need11:00
Cabanossi left11:09
ilbelkyr left11:09
Cabanossi joined11:09
ilbelkyr joined11:11
mr-foobar left11:11
cog_ joined11:15
HoboWithAShotgun allright, i now have this class: https://hastebin.com/kinucobije.pl which allows values between -360 and 360 degrees11:16
how do i now derive Angle::Triangle from that wich is identical only so it limits between 180 and -18011:17
mr-foobar joined11:18
cognominal left11:18
HoboWithAShotgun also, can i override the error message that i get when i assign an ivalid value to my subtype?11:20
Skarsnik probably with subset again ?11:20
HoboWithAShotgun goes rtfm11:21
Skarsnik m: class A { has $.x}; subset B of A where $.x < 20; say try A.new( a => 30; say try B.new( B => 30);11:21
camelia rakudo-moar 347da8: OUTPUT: «=== SORRY!=== Error while compiling <tmp>␤Variable $.x used where no 'self' is available␤at <tmp>:1␤------> ss A { has $.x}; subset B of A where $.x < 20; say try A.new( a => 30; say try B ␤ expecting any of:␤ term␤»11:21
Skarsnik m: class A { has $.x}; subset B of A where $.x < 20; say try A.new( x => 30; say try B.new( x => 30);11:21
camelia rakudo-moar 347da8: OUTPUT: «=== SORRY!=== Error while compiling <tmp>␤Variable $.x used where no 'self' is available␤at <tmp>:1␤------> ss A { has $.x}; subset B of A where $.x < 20; say try A.new( x => 30; say try B ␤ expecting any of:␤ term␤»11:21
timotimo https://github.com/zoffixznet/perl6-Subset-Helper11:26
NewOne left11:37
Cabanossi left11:39
Cabanossi joined11:41
timotimo stmuk_: did you see what i wrote in #moarvm?11:48
mr-fooba_ joined11:54
mr-foobar left11:56
stmuk_ timotimo: I have now!12:03
I have to go out shortly but can quickly look now and slowly look later12:04
timotimo OK!12:04
i hope it'll be enlightening12:04
AlexDaniel left12:05
[Coke] (windows) I have a build I run occasionally.12:08
updated rakudo, rebuilding...12:11
(also if you're having a windows build issue, msvc or gcc?)12:12
eroux left12:13
galx joined12:17
esh left12:19
esh joined12:19
sumdoc joined12:23
Cabanossi left12:23
sumdoc I have updated the blog. Added about mounting the folder. https://sumdoc.wordpress.com/2017/09/06/how-to-run-perl-6-notebook/12:24
[Coke] I can't duplicate a win64 failure with strawberry perl, msvc, and nom/master/master12:25
Cabanossi joined12:26
galx how can I use perl6 on WinXP12:27
?12:27
timotimo oh, huh, i don't know if anybody has tried that before12:28
have you tried just building it and seeing where it fails?12:29
galx no, but I can try12:29
[Coke] ... xp?12:29
galx I have an old laptop with winxp installed12:30
i know it's crazy yeah :)12:30
timotimo building rakudo will need more than 1gb of ram12:30
jnthn If it's 64-bit then can always try one of the MSIs12:30
timotimo huh, i wasn't actually aware that windows xp already came in 64bit variants12:31
but i guess 64bit processors are not new at all12:31
galx it's 3212:32
[Coke] https://github.com/rakudo/rakudo/blob/nom/docs/windows.md might help12:32
galx thank you!12:32
[Coke] ... you may not have a version of VS2017 you can install; it is possible to build just using strawberry perl's toolchain.12:33
cgfbee left12:33
jast windows xp x64 is fairly rare12:33
timotimo we don't require a very new visual studio12:33
[Coke] (ugh, also my MD formatting is wonky there, if anyone wants to try to clean that, I'd appreciate it. :|12:33
timotimo: right, 2017 was just the one available in the demo copy of windows I grabbed.12:34
cgfbee joined12:41
astj left12:50
astj joined12:51
astj left12:55
cdg_ joined13:01
okl joined13:02
astj joined13:02
astj left13:07
Cabanossi left13:09
Ptolemarch joined13:11
Cabanossi joined13:11
galx left13:12
AlexDaniel joined13:12
itaipu joined13:14
okl left13:18
eliasr joined13:19
AlexDaniel left13:26
sumdoc --13:38
mr-foobar joined13:40
mr-fooba_ left13:41
radvendii joined13:42
radvendii left14:04
Cabanossi left14:09
Cabanossi joined14:11
wamba left14:18
Kyo91_ joined14:22
sumdoc Is there a perl 6 package to work with web API?14:35
moritz HTTP::UserAgent14:39
Cabanossi left14:40
Cabanossi joined14:41
moritz back from vacation14:42
lowbro_ left14:48
cdg_ left14:52
cdg joined14:52
cdg left14:57
cdg_ joined14:57
itaipu_ joined15:01
timotimo also WWW and the curl bindings15:02
itaipu left15:04
b2gills .ask TimToady I would like your input on a document for implementors of Perl 6 dialects since there are currently 2 that I know of https://gist.github.com/b2gills/7e2781dfd781368b63337c59bd75111515:05
yoleaux b2gills: I'll pass your message to TimToady.15:05
setty1 joined15:05
donaldh joined15:05
domidumont left15:06
itaipu_ left15:08
itaipu joined15:08
donaldh left15:09
Cabanossi left15:09
kubrat_kubrat15:10
Cabanossi joined15:11
itaipu_ joined15:22
geekosaur left15:23
itaipu left15:25
geekosaur joined15:31
cdg_ left15:32
cdg joined15:33
cdg left15:37
mr-fooba_ joined15:40
Cabanossi left15:40
HoboWithAShotgun I managed to create a Num variable that contains 10 which is not equal to 1015:40
Cabanossi joined15:41
jeek left15:41
timotimo cool, what's your num - 10?15:41
mr-foobar left15:42
HoboWithAShotgun 1.77635683940025e-1515:47
but then why does it print as 10?15:47
p6: my $l = sqrt(2) * 10; my $d = 45; my $r = $d / 360 * tau; my $y = sin( $r ) * $l; my $x = sqrt( $l**2 - $y**2 ); say $x == $y;15:48
camelia rakudo-moar e5a600: OUTPUT: «False␤»15:48
HoboWithAShotgun the trig functions and tau probably produce rounding errors15:49
p6: my $l = sqrt(2) * 10; my $d = 45; my $r = $d / 360 * tau; my $y = sin( $r ) * $l; my $x = sqrt( $l**2 - $y**2 ); say $x; say $y;15:53
camelia rakudo-moar e5a600: OUTPUT: «10␤10␤»15:53
tbrowder .tell nine I just filed issue #101 with Inline::Perl5; failure using Expect::Simple15:53
yoleaux tbrowder: I'll pass your message to nine.15:53
HoboWithAShotgun see? outputs as 10 even though x is 10.00000000...whatver15:53
half an hour wasted15:54
pyrimidine joined15:55
cdg joined15:57
cdg left15:58
cdg joined15:58
HoboWithAShotgun .tell mum I gonna be late for dinner15:58
yoleaux HoboWithAShotgun: I'll pass your message to mum.15:58
piojo2 joined16:00
cdg left16:02
mr-foobar joined16:04
skids joined16:07
kaare_ left16:08
mr-fooba_ left16:08
kaare_ joined16:08
Cabanossi left16:10
Cabanossi joined16:11
HoboWithAShotgun left16:13
kaare_ left16:16
cdg joined16:16
cdg_ joined16:18
cdg left16:18
cdg_ left16:18
cdg joined16:18
sumdoc left16:20
cdg left16:20
astj joined16:27
itaipu_ left16:28
astj left16:32
ilmari tbrowder: works for me16:33
This is Rakudo version 2017.08-79-g4b02b8aad built on MoarVM version 2017.08.1-110-gab28683b216:34
kerframil joined16:34
cdg joined16:36
ilmari how do you get the version of a loaded module in perl6? like perl5's Foo->VERSION or $Foo::VERSION?16:38
ugexe in perl6 its just $*REPO.need(CompUnit::DependencySpecification.new(:short-name<Foo>)).distribution.meta<ver>16:39
Skarsnik 'just'16:41
ilmari ah, so intuitive16:41
very discoverable16:41
moritz we might want a shortcut for that :-)16:41
ugexe also it only works for ::Installable repos, ::FileSystem ones dont set a CompUnit.distribution16:42
https://github.com/rakudo/rakudo/pull/1132 would allow it to work with ::FileSystem however.16:43
the short-cut would be to somehow hook up META6.json info to ::Foo.^ver16:44
ilmari huh, doesn't perl6's -M take an import list?16:46
ugexe i dont think our -M does anything but take the short name16:47
e.g. `-M "Test:ver<6.c>"` does not work while `-e 'use Test:ver<6.c>` does16:49
ilmari wanted to write a V module like perl5 has16:49
ilmari perl5 -MV=Foo # shows all versions of Foo in @INC16:49
ugexe all versions of Foo in @INC doesn't mean the same thing as in perl6 though16:51
ilmari all versions in $*REPO.repo-chain?16:53
ugexe let me rephrase: it wouldnt suffice for determining which version of something will get used16:54
i guess thats the same as @INC though with use lib, so nm16:55
zakharyas joined16:56
ingy I just noticed that: perl6 -e 'say "ok" while True' | head16:57
doesn't terminate like perl5 does16:58
ilmari Unhandled exception: Failed to write bytes to filehandle: Broken pipe16:58
but exit status zero?!17:00
ingy that's bash17:00
the exit code of head17:00
ilmari doh17:00
ugexe m: say $*REPO.repo-chain.map(*.?installed()).grep(*.defined).map(*.Slip).grep({ .meta<name> eq "Test" || (.meta<provides>{"Test"}:exists) }).map(*.meta<ver version>.first); # this is the logic part anyway17:00
camelia rakudo-moar e5a600: OUTPUT: «(v6.c)␤»17:00
ingy I don't get the broken pipe17:01
it just hangs17:01
ilmari yes, with set -o pipefail (not popefail, as I first typed) it shows exit status 1 from perl617:01
which version?17:01
This is Rakudo version 2017.08-79-g4b02b8aad built on MoarVM version 2017.08.1-110-gab28683b217:01
ingy python -c 'while True:print("ok")' | head # gives a broken pipe17:01
yes | head # seems like nice behaviour17:02
This is Rakudo version 2017.04.3 built on MoarVM version 2017.04-53-g66c6dda17:02
on mac17:02
ilmari perl5 exits with status 141 but no message17:02
ingy so does `yes` !17:03
14117:03
that's a 1317:03
141 - 12817:03
ilmari which is SIGPIPE17:04
but now, pubtime!17:04
pyrimidine left17:04
TimToady left17:05
ingy so that's probably what perl6 should do17:05
if anyone cares17:05
pyrimidine joined17:05
TimToady joined17:07
Cabanossi left17:08
Cabanossi joined17:11
domidumont joined17:18
bdmatatu joined17:35
espadrine joined17:36
Cabanossi left17:38
Cabanossi joined17:41
piojo2 left17:44
jonas1 left17:48
pyrimidine left17:51
pyrimidine joined17:55
pmurias joined17:58
zakharyas left17:58
pyrimidi_ joined17:59
pyrimidine left17:59
pyrimidi_ left18:03
pyrimidine joined18:04
pyrimidine left18:08
Cabanossi left18:10
Cabanossi joined18:11
pyrimidine joined18:12
astj joined18:12
mr-foobar left18:16
pyrimidine left18:16
astj left18:17
mr-foobar joined18:20
pyrimidine joined18:20
pyrimidine left18:25
BooK I'm testing radical changes to Bool by taking all concerned lines from src/Perl6/Metamodel/BOOTSTRAP.nqp and in src/core/Bool.pm and s/Bool/Foo/ to test them faster, and in isolation, without needing to recompile between attempts18:25
is that something that could work?18:25
Right now, I get: Type 'stub' is not declared. Did you mean 'Sub'?18:26
so I assume I need to load some definition for stub18:26
jnthn For code in CORE.setting it's often a fine approach18:26
For something that is so bootstrap-sensitive, there's a very high chance of things not working when put back later18:26
`stub` is actually a non-standard language extension only in NQP, for the sake of the bootstrap. It doesn't exist in real Perl 6.18:27
So that bit can't really be copied out, but you could simulate it with a stub class in full Perl 618:27
my class Foo { ... }18:27
cdg_ joined18:27
BooK ok18:28
the line I was replacing was: my stub Bool metaclass Perl6::Metamodel::EnumHOW { ... };18:29
so just dropping the stub would do it18:30
cdg left18:31
cdg_ left18:32
notbenh left18:32
cono is there any way to define alternation in regexp with backtracking ?18:36
yoleaux 6 Sep 2017 12:43Z <Zoffix> cono: the latest and greatest Rakudo has a fix for your issue. You should be getting your Any again: https://github.com/rakudo/rakudo/commit/d0d105b8b618:36
cono already seen this, thanks :)18:37
pecastro left18:37
cono https://gist.github.com/cono/30bd6392856626771c747ddaa29471b0 so, I want if <number> fails it backtrack and tries <tree-op> token18:38
| - longest, || - left associated, I want some "\\" which going to be left associated but with backtracking, so if first token in alternation fails, it tries next one18:41
kaare_ joined18:42
cono in this case: 1 + 2 + 3, will be something like expr( tree-op(tree-op(number(1), op('+'), number(2)), op('+'), number(3)) )18:44
ash_gti joined18:48
andrzejku joined18:49
pecastro joined18:50
jnthn cono: Are you writing this in a token/rule?18:51
ah, you linked code and I missed it :)18:51
Geth ¦ doc/molecules-patch-2: 65cf7b1d1b | (Christopher Bottoms)++ (committed using GitHub Web editor) | doc/Type/IO/Socket/Async.pod618:51
¦ doc/molecules-patch-2: Fixed three space indent 18:51
¦ doc/molecules-patch-2: review: https://github.com/perl6/doc/commit/65cf7b1d1b18:51
BooK how can I initialize a sigilless version of Bool to do the equivalent of the stub in npq? I think my \Bool2 := ...; and then I can call the stuff found in bootstrap on that new name, the first of which would be Bool2.HOW.set_base_type(BooK, Int);18:53
Aaronepower joined18:53
kaare_ left18:54
BooK etc18:54
kaare_ joined18:54
BooK I want to first build a Bool2 identical to the regular Bool, and then tweak it so that it can do the Enumeration role, and we can remove the duplication18:54
jnthn BooK: Probably something like Metamodel::EnumHOW.new_type(:name('Bool2'))18:55
cono: The thing is that token (and rule) mean that backtracking state should *not* be retained18:55
cono: || if a regex will indeed backtrack18:55
cono: If you replace token with regex in the first 3 rules it seems to work out18:55
moritz or maybe my \Bool2 = Bool but Enumeration;18:56
Geth ¦ doc: d15be280c7 | (Christopher Bottoms)++ (committed using GitHub Web editor) | doc/Type/IO/Socket/Async.pod618:56
¦ doc: Does this resolve #1538? 18:56
¦ doc:18:56
¦ doc: Does simply removing the `if` statement resolve #1538?18:56
¦ doc: review: https://github.com/perl6/doc/commit/d15be280c718:56
¦ doc: 65cf7b1d1b | (Christopher Bottoms)++ (committed using GitHub Web editor) | doc/Type/IO/Socket/Async.pod618:56
¦ doc: Fixed three space indent 18:56
¦ doc: review: https://github.com/perl6/doc/commit/65cf7b1d1b18:56
¦ doc: c0596fe916 | (Jonathan Worthington)++ (committed using GitHub Web editor) | doc/Type/IO/Socket/Async.pod618:56
¦ doc: Merge pull request #1540 from perl6/molecules-patch-2 18:56
¦ doc:18:57
¦ doc: Does this resolve #1538?18:57
¦ doc: review: https://github.com/perl6/doc/commit/c0596fe91618:57
BooK moritz: the plan is to test writing a different implementation of Bool, without having to recompile every time I change a thing18:57
so writing Bool2 without depending on Bool explicitely, just copy-pasting18:57
jnthn bbl18:58
skids left19:00
BooK m: BEGIN { use nqp; my \Bool2 := Metamodel::EnumHOW.new_type(:name<Bool2>, :base_type(Int)); Bool2.HOW.set_base_type(Bool2, Int); }19:00
camelia rakudo-moar e5a600: OUTPUT: «=== SORRY!=== Error while compiling <tmp>␤An exception occurred while evaluating a BEGIN␤at <tmp>:1␤Exception details:␤ === SORRY!=== Error while compiling ␤ Base type has already been set for Bool2␤ at :␤»19:00
cono jnthn: thanks! :)19:01
BooK m: BEGIN { use nqp; my \Bool2 := Metamodel::EnumHOW.new_type(:name<Bool2>); Bool2.HOW.set_base_type(Bool2, Int); }19:02
camelia rakudo-moar e5a600: ( no output )19:02
BooK mmm19:02
I think that failed later19:03
astj joined19:04
Actualeyes joined19:05
domidumont left19:05
smls joined19:06
darutoko left19:06
astj left19:08
BooK right, it gave me: getstaticcode requires a static coderef19:09
grqung joined19:09
BooK I guess I'm now deep in the guts, and my only operation tool knowledge relates to a spoon19:10
perlpilot left19:10
skids joined19:11
moritz if you install methods with add_method or so, you might needs to wrap the code in nqp::getstaticcode()19:11
pmurias_ joined19:13
lancew joined19:15
BooK moritz: the error comes from this line: Bool2.HOW.add_method(Bool2, 'key', nqp::getstaticcode(sub ($self) { nqp::getattr_s(nqp::decont($self), Bool2, '$!key'); }));19:19
tbrowder ilmari: my bad, my Inline::Perl5 was too old--an upgrade fixed it. I think I'll add a cron job to upgrade all modules every week or so...19:19
BooK so I guess the question is "how do I make that sub a static coderef?19:19
tbrowder .tell nine my version was too old, closing issue 10119:19
yoleaux tbrowder: I'll pass your message to nine.19:19
BooK (going to lose network soon, the plane is about to take off)19:21
moritz BooK: looks good to me, assuming that $!key is set up correctly first19:24
lancew left19:27
lancew joined19:27
notbenh joined19:29
pyrimidine joined19:31
zakharyas joined19:31
Cabanossi left19:38
pyrimidine left19:38
jcallen left19:38
pyrimidine joined19:39
lancew left19:40
Cabanossi joined19:41
jcallen joined19:41
Cabanossi left19:47
Cabanossi joined19:48
eliasr left19:49
ash_gti left19:49
zakharyas left19:50
domidumont joined19:50
astj joined19:55
nightfrog left19:58
astj left19:59
kerframil left20:03
moritz how do I access the actions object inside a grammar?20:03
Semp__ joined20:05
itaipu joined20:06
domidumont left20:09
Semp__ left20:11
Kyo91_ left20:12
perlpilot joined20:13
moritz ah, self.actions20:13
Geth ¦ doc: 9826038dd1 | (Moritz Lenz)++ | doc/Type/Cursor.pod620:17
¦ doc: Document Cursor.actions 20:17
¦ doc: review: https://github.com/perl6/doc/commit/9826038dd120:17
andrzejku left20:21
kerframil joined20:22
Geth ¦ doc: c65e01f3a8 | (Moritz Lenz)++ | doc/Type/Match.pod620:24
¦ doc: Document Match.actions 20:24
¦ doc: review: https://github.com/perl6/doc/commit/c65e01f3a820:24
moritz book-driven development20:24
Cabanossi left20:24
TEttinger joined20:25
Cabanossi joined20:26
itaipu left20:35
ShalokShalom left20:44
bdmatatu left20:44
smls left20:45
astj joined20:46
Cabanossi left20:48
Cabanossi joined20:49
astj left20:50
kerframil left20:52
BooK while in the plane I played around with IO::Socket::INET, and got this strange behaviour20:55
This code: say "Accepted {IO::Socket::INET.new(:localhost<localhost>, :localport(4444), :listen).accept}";20:55
does what's expected when running `telnet localhost 4444`, but hangs with `nc localhost 4444`20:56
Skarsnik does localhost is ipv6?20:56
BooK more importantly, nc dies this: localhost [127.0.0.1] 4444 (?) : Connection refused20:56
the default for INET is ipv420:57
Skarsnik connect does not pass the Inet family for example20:57
I would not be surprised listen does not the then xD20:58
setty1 left20:59
Skarsnik yep it's ignored21:00
ugexe :localhost<127.0.0.1>21:01
BooK Skarsnik: so telnet is doing ipv6 and nc ipv4 ? and perl6 defaults to ipv6 ?21:01
Skarsnik moar does not use the sa-family from Rakudo at all21:01
BooK, moar will get what is the first sa family the system return for localhost21:02
itaipu joined21:02
geekosaur actually that would be a bit odd because telnet6 is not quite the same protocol21:02
Skarsnik for me it's ipv621:02
geekosaur hm, looks like linux's does merge them these days though21:03
so you'd want to verify with: telnet -4 ...21:03
skids left21:04
Skarsnik not sure if that should be fixed or just documented x)21:04
BooK you're saying that the socket new gets the famiky from the name rsolution?21:06
Skarsnik yes21:06
https://github.com/MoarVM/MoarVM/blob/master/src/io/syncsocket.c#L302 and https://github.com/MoarVM/MoarVM/blob/master/src/io/syncsocket.c#L27021:07
BooK so even if I passed an explicit family it would overriden by the one from the resolution21:07
Skarsnik yes, since it's never used21:08
Kyo91_ joined21:08
BooK well if name resolution returns several candidates, it could look at the family and pick21:08
Skarsnik I think IO::Socket::INET is not really the focus but more IO::Socket::Async21:08
BooK I think it should be vonsidered a bug and will try to write it up21:10
Skarsnik I could patch up since I already added stuff in that (to add source address and source port in connect)21:11
galx joined21:12
Kyo91_ left21:14
rindolf left21:15
galx m:21:23
I have a problem21:25
https://pastebin.com/vMvRFr8M21:25
I want `a` token to match "abc def" and `b` token to match "etc."21:26
but it fails anyway21:26
how to do that correctly?21:26
itaipu left21:31
dogbert2 left21:37
Danishman joined21:41
Cabanossi left21:42
AlexDaniel joined21:43
BooK Skarsnik: reading your links now21:44
oh so it's in MoarVM?21:45
Cabanossi joined21:45
okl joined21:46
BooK where is the link between rakudo and moarvm done? nqp?21:46
Skarsnik probably rakudo/core/io/Socket/INET.pm6 ?21:48
there is no nqp side for connect21:48
MasterDuke BooK: generally yes, nqp:: ops are implemented by moarvm21:49
cono m: grammar Grammar { regex TOP { ^^ <a> <ws> <b> $$ }; regex a { <word>+ % <ws> }; token word { <alpha>+ }; regex b { <alpha>+ "." }; }; Grammar.parse("abc def etc.").say21:49
camelia rakudo-moar 591b93: OUTPUT: «「abc def etc.」␤ a => 「abc def」␤ word => 「abc」␤ alpha => 「a」␤ alpha => 「b」␤ alpha => 「c」␤ ws => 「 」␤ word => 「def」␤ alpha => 「d」␤ alpha => 「e」␤ alpha => 「f」␤ ws => 「 」␤…»21:49
cono galx: ^^21:49
Skarsnik buggable, find listen21:50
cono by doing <alpha>+ % "something> you are asking to make <alpha> "something" <alpha> "something" up to infinity21:50
Skarsnik don't remember wich bot allow to grep in the code x)21:50
BooK right, https://github.com/rakudo/rakudo/blob/nom/src/core/IO/Socket/INET.pm#L122 and https://github.com/rakudo/rakudo/blob/nom/src/core/IO/Socket/INET.pm#L13221:50
so in there, there is a default of PIO::PF_INET i.e. IPv421:52
cono and rule also should be changed to regex, to make backtracking mechanism possible21:52
MasterDuke Skarsnik: greppable6 searches all the ecosystem modules21:52
BooK but the name resolution is not done there21:52
Skarsnik yeah and moar does not get this info21:52
BooK note sure what $PIO is here: https://github.com/rakudo/rakudo/blob/nom/src/core/IO/Socket/INET.pm#L11721:52
MasterDuke s: IO::Socket::INET.new, 'listen'21:52
SourceBaby MasterDuke, Something's wrong: ␤ERR: Type check failed in binding to parameter '&code'; expected Callable but got Nil (Nil)␤ in sub do-sourcery at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 42␤ in sub sourcery at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 33␤ in block <unit> at -e line 6␤␤21:52
BooK s: IO::Socket::INET.new, :listen # I think21:53
SourceBaby BooK, Something's wrong: ␤ERR: ===SORRY!=== Error while compiling -e␤Unable to parse expression in argument list; couldn't find final ')'␤at -e:7␤------> <BOL><HERE><EOL>␤21:53
BooK s: IO::Socket::INET.new( :listen ) # better21:53
SourceBaby BooK, Something's wrong: ␤ERR: ===SORRY!=== Error while compiling -e␤Unable to parse expression in argument list; couldn't find final ')'␤at -e:7␤------> <BOL><HERE><EOL>␤21:54
MasterDuke s: IO::Socket::INET.new, \(:listen)21:54
SourceBaby MasterDuke, Something's wrong: ␤ERR: Earlier failures:␤ Nothing given for new socket to connect or bind to. Invalid arguments to .new?␤ in block <unit> at -e line 6␤␤Final error:␤ Cannot resolve caller sourcery(Failure, Capture); none of these signatures match:␤ ($thing, Str:D $method, Capture $c)␤ ($thing, Str:D $method)␤ (&code)␤ (&code, Capture $c)␤ in block <unit> at -e line 6␤␤21:54
BooK anyways21:54
Kyo91_ joined21:54
galx left21:56
BooK https://github.com/perl6/nqp/blob/master/src/vm/moar/QAST/QASTOperationsMAST.nqp#L2047 # this is where the link is made, right?21:58
Exodist left21:58
Cabanossi left21:58
Exodist joined21:59
Cabanossi joined21:59
Kyo91_ left21:59
BooK Skarsnik: https://github.com/MoarVM/MoarVM/blob/master/src/io/syncsocket.c#L231-L233 # this look interesting22:01
perlpilot cono: I dunno ... using token like that is a good habit to get into. It's only the `a` rule that really needs backtracking.22:01
cono BooK: you can look to my series of ticket to add get_port op: https://github.com/MoarVM/MoarVM/pull/602, there is a cross links between moar nqp and rakudo22:01
perlpilot: a and TOP22:02
b should token, agree22:03
should be*22:03
Skarsnik BooK, na it's just to tell you the returned type for this function is not good if you get a ipv6 stuff, but it kinda work since the 2 struct for ipv4/ip6 start the same22:04
anyways, time for bed ^^22:05
perlpilot m: grammar G { rule TOP { <a> <b> }; regex a { <word>+ % <.ws> }; token b { <word> \. }; token word { <.alpha>+ }; }; say G.parse("abc def etc.");22:05
camelia rakudo-moar 591b93: OUTPUT: «「abc def etc.」␤ a => 「abc def」␤ word => 「abc」␤ word => 「def」␤ b => 「etc.」␤ word => 「etc」␤»22:05
pyrimidine left22:05
Skarsnik left22:05
BooK cono: well, I'm not wanting to add a new op, just fix this one22:06
pyrimidine joined22:06
cono perlpilot: heh, thanks. works indeed22:07
BooK well, I disagree with Skarsnik: MVM_io_resolve_host_name is what returns the socket to be used, and if the Perl6 IO::Socket::INET gave a family, that should be a hint on which to pick when there's a choice22:08
https://github.com/MoarVM/MoarVM/blob/master/src/io/syncsocket.c#L242 # result here is a linked list22:09
but moar just picks the first item in the list22:09
espadrine left22:09
BooK I'd say that family should be passed, and the first item in the list that match the family spec is return22:10
and still the first is no family is given22:10
cdg joined22:10
BooK do I make sense ?22:10
struct addrinfo has this as its last item: struct addrinfo *ai_next;22:12
"The items in the linked list are linked by the ai_next field."22:12
luckily, MVM_io_resolve_host_name is not used it too many places22:13
cdg left22:15
pmurias_ left22:15
pmurias left22:15
shadowpaste left22:19
okl left22:19
dogbert2 joined22:22
shadowpaste joined22:24
wamba joined22:40
astj joined22:44
astj left22:49
Sgeo joined22:59
Danishman left23:04
cdg joined23:10
raschipi joined23:13
cdg left23:15
BenGoldberg joined23:15
BooK writing a moarvm bug report for the issue23:18
the problem is that it requires a signature change, I think23:18
https://github.com/MoarVM/MoarVM/issues/683 # I hope this makes sense23:24
raschipi BooK: Makes sense, but can't it be solved by having a multi? If one uses the old call, and if they send the list they would ge the new one?23:28
cdg joined23:28
BooK raschipi: in which language? nqp?23:29
rakudo should definitely use the new call, because it's supposed to ask for a specific family23:30
I understand changing the signature of MVM_io_resolve_host_name creates some compatibility problems, but I'm not versed enough in C or MoarVM to propose a good solution to that23:31
cdg left23:33
BooK https://design.perl6.org/S32/IO.html#IO%3A%3ASocket%3A%3AINET # I see this was not the most fleshed out part of the design docs23:37
raschipi I have to mention there's a RIGTH THING™ to do when picking an AF_INET family to communicate: happy eyebals, RFC 655523:41
geekosaur left23:49
Lac joined23:56
grqung left23:57
geekosaur joined23:59

Logs Search ←Prev date Next date→ Channels Documentation