Zoffix huggable: release commits 00:01
huggable Zoffix, ./perl6 -e 'my @releases = map {sprintf "%d-%02d", .year, .month}, (Date.new(:2015year :12month), *.later(:month) ... Date.new: :2017year, :4month); for @releases.map(*.split("-").join: ".").rotor: 2 => -1 { print qqx/printf "\e\e%s - %-7s: \e" {.[0]} {.[1]}; git log --oneline "{.[0]}...{.[1]}" | wc -l/ };'; printf "\e"
Zoffix There fixed version with perl 6 as glue :) 00:02
ah, I forgot HEAD now -_- 00:05
Zoffix gives up
BenGoldberg If you throw your hands up in the air, what will you catch them with? 00:06
japhb BenGoldberg: If you throw your hands up in the air, then clearly you just don't care. 00:18
TimToady what if you just throw them up a little in your mouth? 00:25
BenGoldberg Actually, I've got these retracting keyreel things to pull my hands back to my wrists, to convince the other Creatures that I'm like, telekinetic, or something. 00:28
I got the idea from a book, "Messing With Monster."
AlexDaniel Zoffix: is it supposed to say “use smartmatch with junctions”? github.com/perl6/doc/commit/860333...1633ece6ec 00:29
ah no, I got the idea 00:30
nevermind
timotimo ugh, why am i doing stuff with bar charts in the terminal again 00:47
oh. my. word. 00:59
@output[0] ~= color("red on_blue") - "but i want to put it in front, not at the end! - "oh, no problem!" - @output[0] [R~]= color("red on_blue")
<3
imgur.com/a/wD42N 01:03
those are some very split bars!
though it looks like it's wrong 01:04
ah, but of course
well, i ought to sleep 01:08
ugexe lizmat: i.imgur.com/TVP5PMe.jpg 01:16
Zoffix :O 01:18
ugexe: what does it do when you press it? 01:19
ugexe i dont want to think of all the button variants zoffix would think of
nothing because i havent bothered to learn that much of this app 01:20
Zoffix heh
ugexe maybe have some set to different releases of perl6, so i can just click different camelias to quickly change env 01:21
BenGoldberg So like perlbrew, but clickable? 01:29
ugexe and colorful 01:30
[Tux] This is Rakudo version 2017.04.3-280-gf3f99b3ac built on MoarVM version 2017.04-64-g6d5ea042 06:23
csv-ip5xs 2.502 06:24
test 12.841
test-t 4.315 - 4.352
csv-parser 12.841
lizmat . 08:44
Zoffix tadzik: yes, I meant asap. why wait 10:01
just to get a ton of merge conflicts
tadzik %)
why wait! www.youtube.com/watch?v=Fe4qEschyCQ 10:02
Zoffix uhh... 10:11
that's the weirdest video 10:12
tadzik it's a part of ASDF movie 10:14
(which, as the name suggests, is a series)
can seem odd if you're not into absurd humour though :)
jnthn
.oO( I like trains! )
10:15
timotimo i like when i trains 10:26
lizmat i like when it rains 10:33
actually, not really :-)
timotimo imgur.com/a/wD42N - immediately after going to bed i noticed i actually didn't even use the eighths block thingies 10:43
now i do and it looks a little better
tadzik timotimo: wow, what's that :) 10:55
lizmat stops banging her head on System::Info for now 10:56
RT #131324
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=131324
timotimo tadzik: you know those partial blocks that unicode defines? 10:57
jnthn lizmat: You forgot to export it?
timotimo u: LEFT BLOCK
unicodable6 timotimo, U+2589 LEFT SEVEN EIGHTHS BLOCK [So] (▉)
timotimo, U+258A LEFT THREE QUARTERS BLOCK [So] (▊)
timotimo, 7 characters in total: gist.github.com/280194f245df11f120...30442ca134
jnthn lizmat: Would need to be my class A is export { }
tadzik timotimo: ye
timotimo this is "simply" bar graphs made with these blocks
the next step that'll be necessary is splitting it across lines 10:58
lizmat jnthn: A is not composable, so B cannot compose it :-(
timotimo because we can only have one split per character in the terminal
jnthn lizmat: wat...but you didn't try to...
That error would be for "also does"... :S 10:59
lizmat no, I added the "is export"
argh
yup
lizmat is clearly not recovered yet
jnthn Many eyes make at least the occasional bug shallow :) 11:02
lizmat hehe yup
jnthn lunch, then plan to do some Perl 6 bits this afternoon :) 11:05
bbiab
lizmat hmmm.. still doesn't solve my System::Info issue 11:06
lizmat steps away from the keyboard for a while
Geth rakudo: CurtTilmes++ created pull request #1084:
Replace panda with zef in README
11:28
rakudo/nom: e89ba827ce | (Curt Tilmes)++ (committed by Moritz Lenz) | README.md
Replace panda with zef in README
11:32
masak .oO( the panda is deprecated, long live the zef ) 11:49
lizmat masak: see also "The End Of An Era" section in p6weekly.wordpress.com/2017/05/16/...-the-alps/ 11:50
afk again& 11:51
masak aye, I read it :) lizmat++ tadzik++ 11:52
tadzik :] 11:53
another fun blast from the past: look what github.com/perl6/modules.perl6.org is forked from :P 11:54
masak oooouuuh 12:25
masak .oO( pro tip: if you want your prototype not to live forever like a zombie, put "proto" in the name ) 12:26
jnthn
.oO( proto tip )
Zoffix m: package Foo { our $*t is export = 42 }; import Foo; dd $*t 12:28
camelia Any $*t = Any
Zoffix Any way to make it export the value as well?
[Coke] tadzik++ #panda 12:29
Zoffix solves it with exporting a normal var and doing ($*Tester//$Tester) instead 12:46
m: role Foo { method !bar {…} }; class Bar does Foo {} 12:52
camelia ( no output )
Zoffix m: role Foo { method bar {…} }; class Bar does Foo {}
camelia 5===SORRY!5=== Error while compiling <tmp>
Method 'bar' must be implemented by Bar because it is required by roles: Foo.
at <tmp>:1
Zoffix would've thought the same syntax would've required to implement a private method too 12:53
m: role Foo { method !bar {…} }; class Bar does Foo { method meow { self!bar } }.meow
camelia Stub code executed
in method bar at <tmp> line 1
in method meow at <tmp> line 1
in block <unit> at <tmp> line 1

Actually thrown at:
in block <unit> at <tmp> line 1
Zoffix m: role Foo { method !bar {…} }; class Bar does Foo { method meow { self!bar.so } }.meow
camelia ( no output )
Zoffix m: role Foo { method !bar {…} }; class Bar does Foo { method meow { self!bar.so } }.meow.sayt
camelia No such method 'sayt' for invocant of type 'Bool'
in block <unit> at <tmp> line 1
Zoffix m: role Foo { method !bar {…} }; class Bar does Foo { method meow { self!bar.so } }.meow.say
camelia False
Zoffix ^ had this bug in my code because it didn't :(
timotimo private methods are not part of an object's API, roles are about API, that's the reasoning behind that 12:54
Zoffix m: role Foo { method !bar {!!! ::?CLASS.^name ~ ' must implement !bar' } }; class Bar does Foo { method meow { self!bar.so } }.meow 12:55
camelia Bar must implement !bar
in method bar at <tmp> line 1
in method meow at <tmp> line 1
in block <unit> at <tmp> line 1
Zoffix goes with that...
timotimo: feels like an excuse rather than reasoning. 12:56
m: role Foo { method meow { self!bar }; method !bar { say "hi" } }; class Bar does Foo { }.meow 12:58
camelia hi
Zoffix A role can require implementation of functionality that doesn't need to be part of object's public API 12:59
role IO::UFO { method !fetch-chunk { … }; method get { self!fetch-chunk.get }; method lines { self!fetch-chunk.lines }; method slurp { self!fetch-chunk.slurp } }; class IO::Web does IO::UFO { has $.url; method !fetch-chunk { use WWW; get $!url } } 13:01
timotimo mhm 13:05
jnthn wonders why we have the IO::Socket role 13:09
The only thing that does it is IO::Socket::INET
And it's not clear how it could be successfully implemented/used in userspace 13:10
mst jnthn: because one day somebody's going to implement IO::Socket::UNIX
(this is a guess and maybe it isn't worth keeping the role for the moment even if I'm right) 13:11
jnthn If so, there's further confusion still 'cus a lexical module listing constants sat inside of IO::Socket::INET has PF_LOCAL and PF_UNIX defined... 13:12
But yeah, that is a good reason to keep the role :) 13:13
The sync socket code seems quite unloved
Geth rakudo/nom: 541597b82d | (Elizabeth Mattijsen)++ | src/core/Compiler.pm
Make System::Info info fetch a bit more picky
timotimo tadzik: github.com/timo/p6profiler-tools/b...ed_bars.p6 - terrible code 13:16
tadzik I love terrible code! 13:17
lizmat commute to Cologne&
timotimo annoyingly, it's not possible to display every kind of graph, even when i split graphs across lines 13:18
because there could be pieces that are shorter than a character, and there's no unicode characters for that
so ... sixel it is! :P
Geth rakudo/refactor-socket-encoding: d6fd249138 | (Jonathan Worthington)++ | 2 files
Moving encoding and line ending bits to IO::Socket

These are general rather than specific to a particular type of socket.
13:24
rakudo/refactor-socket-encoding: 75693b0b3a | (Jonathan Worthington)++ | src/core/IO/Socket/INET.pm
Toss IO::Socket::INET.ins.

The ins method for counting the number of lines read in is long gone from IO::Handle; this is a relic of when it was there. It was neither tested nor documented.
rakudo/refactor-socket-encoding: 187dea004d | (Jonathan Worthington)++ | src/core/IO/Socket.pm
Fix leftover of when \n was not always \x0A.
rakudo/refactor-socket-encoding: 9cec940808 | (Jonathan Worthington)++ | 2 files
Move get and lines to IO::Socket role.

These also will be generic over different kinds of socket. Means they now sit with read and recv.
13:28
timotimo (except almost no terminal supports sixel so far) 13:30
Geth rakudo/refactor-socket-encoding: fb9b15701e | (Jonathan Worthington)++ | src/core/IO/Socket.pm
Use consistent code style.
13:37
rakudo/refactor-socket-encoding: 12d31e3614 | (Jonathan Worthington)++ | src/core/IO/Socket.pm
Provide configuration nl-out on sync sockets.
rakudo/refactor-socket-encoding: eb50e7472c | (Jonathan Worthington)++ | src/core/IO/Socket.pm
Do encoding of socket writes in Perl 6 space.

This eliminates the use of VM-level string output on sockets.
13:44
rakudo/refactor-socket-encoding: cb404c4370 | (Jonathan Worthington)++ | src/core/IO/Socket.pm
Toss NYI IO::Socket.poll method.

There's no meniton of it in docs nor tests, and having it show up in introspection when it only throws to say it's NYI is unhelpful. Plus, there's IO::Socket::Async for doing non-blocking socket stuff in a more scalable way.
13:48
rakudo/refactor-socket-encoding: f911ce1c6b | (Jonathan Worthington)++ | src/core/IO/Socket.pm
Remove JVM workaround in IO::Socket.recv.

For the binary path, recv should really mean a single call down to the networking libraries to recv something. The string path is about to be refactored to use the streaming string decoder (which, yes, needs work on JVM; that will be done before this branch is merged).
13:59
rakudo/refactor-socket-encoding: 0a7c7b6d60 | (Jonathan Worthington)++ | 2 files
Re-work IO::Socket.recv to use decode stream.

This means it doesn't use VM-level string I/O any more. Doing this also shows up that the semantics of .recv in chars mode need a more careful look, as it seems it's possible that it could end up trying to decode parts of multi-byte sequences (which will then blow up). The semantics here match what we were already doing in the VM, keeping the test suite happy. It's worth considering if there are better semantics we could adopt that would keep it similarly happy.
15:19
jnthn Well, there's a start. :) 15:34
jnthn goes for some rest 15:35
Zoffix Hm, the page for release stats has a unidinasaur puking up a rainbow: perl6.fail/release/stats 15:39
Zoffix wonders if it's a bad omen :)
NeuralAnomaly: blockers 15:48
NeuralAnomaly Zoffix, There are 2 release blockers. See perl6.fail/release/blockers
Zoffix, perl6.fail/131306 : Incorrect results with `uint32` types after +> was made to handle large ints
Zoffix, perl6.fail/131247 : )> in regex results in stuff being matched wrongly ( /)> . <(/ )
Zoffix I marked perl6.fail/131306 as a blocker because it breaks Digest and that's used by a bunch of modules. If there's still no fix by release, I'm gonna revert 6409ee582ee58 and ef29bb9f41aa, re-adding a bug with +> giving wrong results for +32 shifts 15:50
m: sub rotr(uint32 $n, uint32 $b) { $n +> $b +| $n +< (32 - $b) }; say rotr 1652322944, 18; my $x; for ^1000 { $x = rotr 1652322944, 18 }; say $x
camelia 27071659120799
229376
Zoffix the bug is that ^ somewhere "spesh" gets things wrong. MVM_SPESH_DISABLE makes the bug disappear 15:51
Zoffix tests to see whether reverting those two commits actually hides the bug
and the other ticket, well, I marked it as a blocker 'cause I wanted to write more tests for captures, but haven't got the chance yet. Gonna do tomorrow, to see if any serious issue exists. 15:52
Zoffix can't wait to finish the IO grant and be free again 15:53
yup, reverting both fixes the spesh issue 15:54
(but adds the shift issue...)
NeuralAnomaly: status 15:55
NeuralAnomaly Zoffix, [✘] Next release will be in 1 day and 12 hours. Since last release, there are 38 new still-open tickets (13 unreviewed and 2 blockers) and 307 unreviewed commits. See perl6.fail/release/stats for details
Zoffix m: use MONKEY-TYPING; augment class Promise { my @ps; END { say "ending" }; method sink { $ = @ps.push: self; 42 } }; start { sleep 2; say "hi" }; say 42 16:54
camelia 42
ending
Zoffix m: use MONKEY-TYPING; augment class Promise { my @ps; END { $ = await @ps }; method sink { $ = @ps.push: self; 42 } }; start { sleep 2; say "hi" }; say 42
camelia 42
hi
Zoffix oh, nevermind 16:55
This `Promise.new` line and other similar instances should probably use `self.new`, eh? github.com/rakudo/rakudo/blob/5415...se.pm#L212 17:00
m: class Promise::AutoAwait is Promise { my @ps; END { $ = await @ps }; method sink { @ps.push: self } }; dd WHAT Promise::AutoAwait.start: { sleep 2; say "hi" }; say 42
camelia Promise
42
Zoffix ^ cause it makes the wrong object when you use subclasses 17:01
dogbert17 m: Lock.^methods(:local) 19:11
camelia ( no output )
dogbert17 m: say Lock.^methods(:local)
camelia (lock unlock protect condition)
dogbert17 m: say Match.^methods(:local)
camelia No such method 'gist' for invocant of type 'NQPRoutine'
in block <unit> at <tmp> line 1
dogbert17 is this in fact a bug? 19:15
commit: 2016.12 say Match.^methods(:local)
committable6 dogbert17, ¦2016.12: «(new ast prematch postmatch caps chunks make WHICH Str Numeric Bool ACCEPTS perl gist orig from to CURSOR made)»
dogbert17 commit: HEAD say Match.^methods(:local) 19:16
committable6 dogbert17, ¦HEAD(f3f99b3): «No such method 'gist' for invocant of type 'NQPRoutine'␤ in block <unit> at /tmp/pFcejqDaJb line 1␤ «exit code = 1»»
Zoffix didn't think so the first time after seeing that 19:19
dogbert17 and why is that? 19:20
Zoffix That came in as part of uncurse IIRC. Match is pretty low-level so some of the methods aren't Perl 6 routines, but NQP ones
c: 2017.04~50 say Match.^methods(:local)
committable6 Zoffix, ¦2017.04~50: «Cannot test this commit (Commit exists, but a perl6 executable could not be built for it)»
Zoffix c: 2017.04~100 say Match.^methods(:local)
committable6 Zoffix, ¦2017.04~100: «(new ast prematch postmatch caps chunks make WHICH Str Numeric Bool ACCEPTS perl gist orig from to CURSOR made)»
Zoffix yeah
And now Match and Cursor got merged 19:21
dogbert17 so they were rewritten as part of uncurse then?
Zoffix And recalling my work on Perl 6 Routine Map this is not the only object that has this caveat
dogbert17 commit: HEAD say Map.^methods(:local) 19:22
committable6 dogbert17, gist.github.com/b5c640a37cc9b946be...e21a3448ff
dogbert17 zofbot: is Zoffix right? 19:23
Zoffix m: say Match.^methods(:local).map({(try .gist) ?? $_ !! .^name })
camelia (STR MATCH CURSOR_NEXT CURSOR_OVERLAP CURSOR_MORE INTERPOLATE CALL_SUBRULE DYNQUANT_LIMITS OTHERGRAMMAR INDMETHOD INDRULE RECURSE BUILD clone Bool prematch postmatch caps chunks NQPRoutine NQPRoutine NQPRoutine NQPRoutine NQPRoutine NQPRoutine NQPRoutine…
dogbert17 cool
Geth nqp/master: 7 commits pushed by pmurias++ 19:28
Zoffix ZofBot: I've got some chocolate coints, would you like some? 22:05
ZofBot Zoffix, Str
Zoffix OK then
timotimo the bot wants a whole string of 'em
jnthn wonders if that's a typo, or really the dual of an int...
Oh dear, I mentioned category theory. It's probably bed time. :) 22:06
Zoffix oh, no, I got coins :) hah 22:08
timotimo aaah, a co-int 22:09
geekosaur :) 22:11
robertle wouldn't it be cool if Buf had index/rindex? obviously with needle being a Buf as well... 22:25
timotimo i'd like that 22:26
Zoffix would it be "cool" or would it be "useful"? :) 22:28
robertle useful. why are you ever using a Buf? because it is raw data from a file or a socket or so 22:29
Zoffix robertle: and why do you need an index? 22:30
robertle you will need to do something with it before you can relly use it. pack/unpack if you know the structure, decode, or ... chop into pieces at delimiters
Zoffix m: my $b1 = Blob.new: 'foobar'.encode; my $b2 = Blob.new: 'bar'.encode; dd $b1.decode('latin1').index: $b2.decode('latin1')
camelia 3
robertle so having index/rindex would allow you to do one of the three things you typically want to do more easily. currently you have to kinda resort to [] 22:31
plus it should be really easy to implement if the "needle" is a compatible buffer: strstr() will do
Zoffix robertle: IMO a feature should be added to core when there's a clear case many users will benefit from it. The "wouldn't it be cool" ideas are best first implemented as modules IMO
Like the Die module 22:32
robertle agreed in principle. what I am arguing is that this is a typical use case for a Buf...
Zoffix buggable: eco Die
buggable Zoffix, Die 'Perl 5 like die routine for note + exit': github.com/zoffixznet/perl6-Die
Zoffix Wouldn't it be cool if &note had an :exit argument that made it exit with the specified exit code?
robertle I get your point about "cute" functionality that should not be in core 22:33
but let's look at a few cases: if you want to read data from a HTTP socket, you don't know the necoding until you have read the header. so you need to read octets for a while, and you need to find the end of the header in these 22:34
same if you read an XML file
well, not quite due to that weird stuff at the beginning that marks 16bit encodings 22:35
Zoffix More exactly my point is that if you make a module and feature sucks you can change it any way you want. If we add it to core, we're stuck with it for basically forever. And having the feature available as a module instead of a core is not a big burden on the users.
robertle right, unless there is a significant performance overhead
not sure that is the case here though :)
especially not for the HTTP case as the needle is really short and silly, so knuth-morris or whatever doesn't reeally save much 22:36
over iterating and [] access 22:37
so point taked
taken
timotimo there's modules out there that want to split an http header section from the body section and they want to find a \r\n\r\n 22:41
robertle yeah, that was one use case I was thinking of 22:42
you can do some weird search by hand by only checking every 4th octet and then backtracking as appropriately ;) 22:44
but I guess iteration + [] access is still way slower than strstr()
and also less clear
I was also wondering if Buf should have a concatenate, but it turns out that ~ does the trick. but the docs say otherwise: "Coerces both arguments to Str and concatenates them." 22:48
timotimo m: say Buf.new(1, 2, 3).Stringy.perl 22:55
camelia Cannot use a Buf as a string, but you called the Stringy method on it
in block <unit> at <tmp> line 1
timotimo sounds like a doc bug
robertle m: buf8.new([1]) ~ buf8.new([2]) 22:57
camelia WARNINGS for <tmp>:
Useless use of "~" in expression ".new([1]) ~ buf8.new([2])" in sink context (line 1)
robertle m: say buf8.new([1]) ~ buf8.new([2])
camelia Buf[uint8]:0x<01 02>
robertle github.com/perl6/doc/issues/1314
Zoffix Buf *is* Stringy, so I'd expect .Stringy on it to just return self
m: Buf.^roles.say
camelia ((Blob[T]) (Positional[T]) (Stringy))
Zoffix Is that how it's meant to work?
timotimo i haven't the slightest >_< 22:58
Zoffix s: Blob.new, 'Stringy', \()
SourceBaby Zoffix, Sauce is at github.com/rakudo/rakudo/blob/5415...uf.pm#L115
timotimo heh. 22:59
that's just fantastic
Zoffix github.com/rakudo/rakudo/commit/21...45a748d9e8
timotimo This is meant to fix RT #122600 and RT #122827. 23:00
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=122600
Link: rt.perl.org/rt3/Public/Bug/Display...?id=122827
Zoffix Oh, well, I see utf8 ones convert to Str, so I guess it makes sense for it to die
Ah ok, s/I\'d expect.+// 23:01
robertle: dude, why did you make that an issue instead of a proper commit :D 23:03
robertle: I've sent you an invite to perl6 github org, so you should be able to commit directly to most Perl 6 repos 23:04
timotimo somehow the end of the sentence about both arguments being Buf is gone
unless the whole sentence is supposed to be "If both arguments are L<Buf>, a combined buffer"
robertle I am totally not qualified for that! and I don't quite know how this stuff is meant to work on github: fork+PR seems rather heavy for small changes... 23:05
timotimo once you're in the perl6 org, you can just hit the little pen icon at the top right of any file and do your change right there in the browser 23:06
no fork, no pr (unless you want to make one, which the tool also offers)
Zoffix .ask jnthn should Blob.Stringy be dying (as it does right now)? We don't have any cases of .Numeric dying. .Stringy on `utf*` types coerces them to Str, which also feels wrongish. If we follow the Stringy for stringy is like Numeric for numerics, then .Stringy on all Blobs should just return `self` 23:08
yoleaux Zoffix: I'll pass your message to jnthn.
Zoffix robertle: don't worry about being qualified. If you mess something up, we can easily revert it. And yeah, you can just find the right file in the repo, click the pencil ( i.imgur.com/IQQNUtt.png ) make the change and click submit. 23:12
\o/ 23:13
tho then we'd have an ambiguity with `Blob ~ Str` which isn't present in Numerics 23:17
m: dd 'foo' ~ Buf.new(1, 2, 3)
camelia Cannot use a Buf as a string, but you called the Stringy method on it
in block <unit> at <tmp> line 1