🦋 Welcome to Raku! raku.org/ | evalbot usage: 'p6: say 3;' or /msg camelia p6: ... | irclog: colabti.org/irclogger/irclogger_log/raku Set by ChanServ on 14 October 2019. |
|||
00:02
lucasb left
|
|||
SmokeMachine | What do you guys think of something like this? gist.github.com/FCO/b5ff6f7470ecc1...2dbe00a4ef | 00:17 | |
Xliff | SmokeMachine: I don't understand it. | 00:22 | |
SmokeMachine: What is #post? Where does it come from? Why does $session-id not have a "!"? | 00:23 | ||
Same with #get and #post. | |||
It seems like your example is only a part of what you want evaluated. | |||
SmokeMachine | Xliff: Is a way I'm writing to do a "event pattern recognition"... | 00:24 | |
#get and #post are ids.. | |||
Xliff: #get and #post are ways of getting values from different events... | 00:25 | ||
Xliff | Ah. Would be nice to see the whole thing. | 00:26 | |
Is it large? | |||
Looking around, I find this: github.com/FCO/EventExpressionLanguage | 00:27 | ||
And the temperature+humidity example is also confusing. | |||
00:28
titsuki joined
|
|||
Xliff | So where is the link between event temperature and #temp? | 00:28 | |
Is it because the attribute is called $temperature? | |||
If you have established $temperature, why do you need #temp? | 00:29 | ||
SmokeMachine | Xliff: $temparature is a attribute of the fire-risk event... #temp is a identifier for the temperature event... | 00:32 | |
Xliff | OK, so how have you established the relationship between #temp and event temperature? | 00:36 | |
Is that what is done in the match section? | |||
SmokeMachine | Xliff: you can see `event fire-risk { ... }` as a class definition and `has $temperature = #temp.value` is the attribute temperature of the event `fire-risk`. the match block would be the equivalent of an `TOP` token on a grammar, `event-name()` is equivalent to `<event-name>` on grammar, and `temperature(#temp)` is equivalent to `$<temp>=<temperature>` or `<temp=.temperature>`... | 00:38 | |
00:38
wamba left
00:39
mowcat left
|
|||
SmokeMachine | Xliff: when you match a event, you can "give it a name" with `#my-name`... | 00:39 | |
Xliff | OK. Still, I have a little problem with that because the definitions are muddied by the match section./ | 00:40 | |
You define #temp here: "temperature(#temp, value > 40, ?area == #hum.area )" | |||
But #hum isn't defined until the next line... | 00:41 | ||
humidity(#hum, value < 20, ?area == #temp.area) | |||
And both #temp and #hum are used before their definition! | |||
That makes things very confusing. | |||
At least for me. | |||
SmokeMachine | Xliff: that's why I use an `?` on `?area == #hum.area` | ||
Xliff | Ah. OK. | 00:42 | |
However I still prefer my declarations to be clear. | |||
Could you consider a way of making the link between the events and the #-vars more explicit? | 00:43 | ||
SmokeMachine | Xliff: any idea? | ||
Xliff | Hrm. Sorry. Not at the moment. I am taking a break from my own projects, atm. | 00:44 | |
See github.com/Xliff/p6-Clutter/tree/glib-split | |||
SmokeMachine | Xliff: isn't explicit enough using it inside of the match? | 00:45 | |
Xliff | No | ||
At least not for me. | |||
Explicit, would be declaring the link between event temperature and #temp before #temp is ever used. | 00:46 | ||
Again, that's just my preference. | |||
But that is matched by most languages, even Raku | |||
SmokeMachine | Xliff: but if you want to match more than one `temperature` event, how to differentiate it? | 00:47 | |
Xliff | How would you do that, now? | ||
SmokeMachine | `temperature(#temp1) temperature(#temp2)` | ||
Xliff | OK, so consider that to be the way you link a event to a #-var. | 00:48 | |
So your example might look something like this: pastebin.com/adpykGnU | 00:49 | ||
OR could look like this: pastebin.com/TxsMqY39 | 00:50 | ||
Ah. missed it, but also assume a "my humidity #hum;" in there. | 00:52 | ||
SmokeMachine | I prefere the second one... but I don't see that as necessary... | 00:54 | |
Xliff | SmokeMachine: Well, you asked for opinions, so I've given you mine. Good luck with it. | 00:56 | |
rypervenche | [Coke]: Thanks (about .clone) | ||
Xliff | And for the record, I do see it as necessary, if only for new users understanding. You could make it optional... | ||
SmokeMachine | Xliff: yes, and thank you very much! | ||
Xliff | You're welcome. | 00:57 | |
SmokeMachine | Xliff: making it optional makes a lot of sense... | ||
Xliff | :) | ||
SmokeMachine | Xliff: but you think it difficult to know where it was declared? | 00:58 | |
Xliff | Yes | 01:00 | |
01:05
Kaiepi left
01:06
Kaiepi joined
01:14
hungrydonkey joined
|
|||
Geth | doc: coke self-assigned xt/examples-compilation.t - can't see error github.com/Raku/doc/issues/3188 d12ac69b4f | Coke++ | xt/examples-compilation.t * for both solo and inline example compilation * remove diag that was just showing a boolean if an error happened. Closes #3188 |
01:19 | |
01:33
sena_kun joined
01:35
Altai-man_ left
01:37
__jrjsmrtn__ joined,
_jrjsmrtn left
01:44
hungrydonkey left
01:55
Maylay left
01:58
aborazmeh left
02:05
lostinfog joined
02:20
Kaiepi left,
Kaiepi joined,
Maylay joined
02:21
squashable6 left
02:23
squashable6 joined
02:24
molaf left
02:25
titsuki left
|
|||
[Coke] | given a try with no catch block, what would a CATCH block that mimicked that functionality look like? | 02:31 | |
... nevermind. I can just deal with $! after the block. | 02:34 | ||
02:37
molaf joined
|
|||
linkable6 | DOC#3188 [closed]: github.com/Raku/doc/issues/3188 [xt] xt/examples-compilation.t - can't see error | ||
03:32
Altai-man_ joined
03:34
sena_kun left
04:08
El_Che left
04:09
El_Che joined
04:23
eseyman left
04:25
eseyman joined
04:35
darkstardev13 joined,
raven__ left
04:54
hungrydonkey joined
04:57
lostinfog left
05:18
rindolf joined
05:33
sena_kun joined
05:35
Altai-man_ left
06:09
jmerelo joined
06:10
|Sno| left
06:12
Doc_Holliwood joined
|
|||
Geth | doc: f9f1dce50f | (Ben Davies)++ | 2 files Document how `when` can be used in `for` loops |
06:13 | |
doc: d8a382cd89 | (Juan Julián Merelo Guervós)++ (committed using GitHub Web editor) | 2 files Merge pull request #3224 from Kaiepi/for-when Document how `when` can be used in `for` loops |
|||
06:48
|Sno| joined
07:02
sauvin joined
07:10
kensanata joined
07:16
stoned75 left
07:31
reach_satori_ left
07:32
Altai-man_ joined
07:34
sena_kun left
07:37
jmerelo left
07:40
reach_satori joined
07:51
rindolf left,
wamba joined
08:35
poga joined,
Black_Ribbon left
08:36
rindolf joined
08:59
abraxxa left,
abraxxa joined
09:08
robertle left
09:12
Doc_Holliwood left
09:25
Doc_Holliwood joined
09:27
ufobat joined,
pecastro joined
09:33
sena_kun joined
09:34
aluaces left
09:35
Altai-man_ left
|
|||
cpan-raku | New module released to CPAN! HTTP::API::MusicBrainz (0.0.1) by 03TYIL | 09:51 | |
09:53
daxim left
09:54
kensanata left
09:59
daxim joined,
wamba left
10:03
wamba joined
10:06
Doc_Holliwood left
|
|||
lizmat clickbaits rakudoweekly.blog/2020/02/17/2020-...eblessing/ | 10:21 | ||
10:25
Doc_Holliwood joined
10:31
titsuki joined
10:37
libertas joined
10:42
reach_satori left
10:45
dakkar joined
10:50
kensanata joined
11:09
Doc_Holliwood left
11:10
pmurias joined
11:29
Doc_Holliwood joined
11:32
Altai-man_ joined
11:34
reach_satori joined,
sena_kun left
11:36
wamba left
11:37
pmurias left
11:38
pmurias joined
11:46
pmurias left
12:09
wamba joined
12:24
Doc_Holliwood left
12:29
wamba left
12:39
kktt007 joined
12:54
kktt007 left
12:55
kktt007 joined
13:02
pmurias joined
|
|||
SmokeMachine | Sorry for insisting on it, but does anyone have any thoughts about [this](github.com/FCO/EventExpressionLanguage)? | 13:13 | |
I’m developing this currently, and if someone find any problems at this early stages it would be much better than if I find it after done... | 13:16 | ||
13:16
squashable6 left
13:17
squashable6 joined,
squashable6 left,
kktt007 left
13:18
kktt007 joined
13:20
squashable6 joined
|
|||
SmokeMachine | I think I’m agreeing with Xliff ‘s comment about the problem of using identifiers before declaring them... | 13:21 | |
But I couldn’t find a good solution for that yet... | 13:22 | ||
13:29
aluaces joined
|
|||
SmokeMachine | But the fact is, the new event is only created as the last step of the chain, and that’s where those identifiers are used... but I like to have the event attributes at the beginning of the definition... it makes it easier to understand the events... | 13:30 | |
13:33
sena_kun joined
|
|||
SmokeMachine | And I think (and that who it’s being implemented) the `#myId.myAttr` as a closure that will return that that wasn’t declared yet... | 13:33 | |
13:34
aborazmeh joined,
aborazmeh left,
aborazmeh joined
|
|||
SmokeMachine | And at some point, the parser will throw an error if you never declare a used id... | 13:35 | |
13:35
Altai-man_ left
13:36
reach_satori left,
MasterDuke left
|
|||
SmokeMachine | Xliff: ^^ | 13:36 | |
13:37
kktt007 left,
kktt007 joined
|
|||
rypervenche | Where does the & at the end of someone saying they're going afk come from? | 13:46 | |
SmokeMachine | rypervenche: is it putting it into background? | 13:49 | |
[Coke] | yah, shell job control | 13:50 | |
sena_kun | rypervenche, shell background task | ||
[Coke] | fg # now I'm back | ||
rypervenche | Ah ok, I wasn't sure if it was something else. | ||
[Coke] | though I never see anyone 'fg'. :) | ||
13:55
Xliff left
13:56
lucasb joined,
squashable6 left
13:58
squashable6 joined
14:05
mowcat joined
14:17
kktt007 left
14:24
dogbert17 joined
14:51
aborazmeh left
15:13
mowcat left
|
|||
uzl[m] | o/ | 15:15 | |
Question: old.reddit.com/r/rakulang/comments...iners_and/ | |||
Voldenet | SmokeMachine: why "A | B" is "A XOR B" instead of "A OR B" | 15:16 | |
15:18
mowcat joined
|
|||
Voldenet | also, there's no "NOT" which I find a bit weird | 15:18 | |
jnthn | uzl[m]: `has BinaryNode $.left is rw` so that you get an rw container back from it, perhaps? | 15:19 | |
15:20
cpan-raku left,
cpan-raku joined,
cpan-raku left,
cpan-raku joined
|
|||
Voldenet | uzl[m]: docs say that `is rw` works only on a class docs.raku.org/language/typesystem#trait_is_rw | 15:30 | |
jnthn | oh, I didn't even notice the `is rw` at the package level; I pretty much never use it... :) | ||
Voldenet | …but it indeed does not work ;) | 15:31 | |
15:32
Altai-man_ joined
|
|||
Voldenet | m: role X is rw { has $.x; }; (X.new.x = 4).say | 15:32 | |
camelia | Cannot modify an immutable 'Any' type object in block <unit> at <tmp> line 1 |
||
Voldenet | m: class X is rw { has $.x; }; (X.new.x = 4).say | ||
camelia | 4 | ||
jnthn | Interesting... | ||
I don't think that was intended | 15:33 | ||
Yeah, looks like it's not working by mistake, and nobody ever noticed yet :) | |||
Please open an issue | 15:34 | ||
15:34
sena_kun left
|
|||
SmokeMachine | Voldenet: how should a NOT be implemented? | 15:36 | |
15:37
hungrydonkey left,
hungrydonkey joined
|
|||
Voldenet | SmokeMachine: as ! probably | 15:39 | |
15:42
wamba joined
|
|||
SmokeMachine | Voldenet: I mean, when I do `event(bla == 42)` I store a query for `{ type => ("==" => "event"), bla => ("==" => 42) }` on my query storage. What should I do on `NOT event(bla == 42)` case? I've being thinking on storing a query like: `{ type => ("!=" => "event") }, { bla => ("!=" => 42) }`, but I'm not really sure... | 15:45 | |
15:47
ZZZzz joined
|
|||
Voldenet | somewhat terse explanation, of `is rw` problem, but probably nothing more is needed github.com/rakudo/rakudo/issues/3495 | 15:47 | |
jnthn | It's fine; thanks | 15:48 | |
Voldenet | SmokeMachine: !(a == b) may not always is equivalent to (a != b) though, especially in three-valued logic | 15:59 | |
SmokeMachine | Voldenet: on this case, `a == b` means something like `%storage<a><b>` | 16:01 | |
Voldenet: for now, `==` uses a hash and any other thing (`>`, `<`, `>=`, `<=`) uses a btree... | 16:03 | ||
16:05
Doc_Holliwood joined
16:07
pmurias left
16:21
kensanata left
16:30
hungrydonkey left,
hungrydonkey joined
|
|||
Voldenet | SmokeMachine: after reconsidering, it's possible to negate all queries just by using reversed operators | 16:31 | |
16:33
jmerelo joined
|
|||
jmerelo | releasable6: status | 16:33 | |
releasable6 | jmerelo, Next release in ≈4 days and ≈2 hours. 5 blockers. 0 out of 234 commits logged | ||
jmerelo, Details: gist.github.com/d10a9d0164819200c7...1d5ef8d2f2 | |||
Voldenet | SmokeMachine: however, it would be nice if it was possible to express "if we didn't get a specific event in the last 5 minutes" | 16:42 | |
16:42
hungrydonkey left,
rindolf left
|
|||
discord6 | <もふもふいつ撫でも (Mofu MOFO)> Can a kind gentleman explain this prototype to me? perl proto sub trait_mod:<is>(Mu $, |) {*} I guess the $ means it expects a Scalar. But what does the pipe | mean. Same with {*}. Please help babby that is me. | 16:42 | |
16:42
hungrydonkey joined
16:43
hungrydonkey left,
hungrydonkey joined
|
|||
Voldenet | | means "anything else" in prototypes, {*} is a standard syntax for them - docs.raku.org/language/functions#proto | 16:47 | |
16:47
rindolf joined
16:48
wamba left
|
|||
discord6 | <Highlander> Normally | slurps named and positional args into Capture (whose name would come after the pipe), but in the case of a proto sub it means candidates for that sub are allowed to take any additional parameters they like | 16:50 | |
<もふもふいつ撫でも (Mofu MOFO)> Thanks, that halps. Now time to wrack my brain over how to apply this sexyness. | 16:57 | ||
<もふもふいつ撫でも (Mofu MOFO)> So many features to learn. I'm crying/dying. | 16:58 | ||
16:58
|Sno| left
|
|||
Voldenet | SmokeMachine: is it possible to dynamically define type names? For example: `warning-humidity` or `warning-temperature` by saying `event :: { has $type = #ev.type; match { [ temperature(#ev, value > 40) ^ humidity(#ev, value < 20) ] }` | 17:00 | |
uh, more like: event :: { has $type = "warning-" ~ #ev.type; match { [ temperature(#ev, value > 40) ^ humidity(#ev, value < 20) ] } | 17:02 | ||
17:07
titsuki left
|
|||
Voldenet | SmokeMachine: another thing that's probably mising is ability to write arbitrary raku code, so you could express :temperature-average((%state<#temp-now><value> + %state<#temp><value>) / 2) | 17:10 | |
17:13
lostinfog joined
17:15
aborazmeh joined,
aborazmeh left,
aborazmeh joined,
aindilis left
|
|||
SmokeMachine | Voldenet: you'll be able to do something like: `has $temperature-average = #temp-now.value + #temp.value / 2;` | 17:16 | |
Voldenet | oh, ok | ||
I'm not sure if counting events wouldn't be useful | |||
17:17
aindilis joined
|
|||
Voldenet | "event ban-ip { has $ip = #login.remote-ip; match { [ invalid-login(#login) ** 10 ] 5min }" | 17:18 | |
SmokeMachine | Voldenet: something like: `has $temperature-average = #temp.all.sum / #temp.all.count` But I have no idea of how to represent that... | ||
Voldenet | SmokeMachine: actually, I was not expecting actual average, just average of captured 2 events in this case | 17:19 | |
SmokeMachine | Voldenet: maybe if using * ou + it becomes an array? | ||
Voldenet: as we do with tokens... | 17:20 | ||
17:21
pecastro left
|
|||
Voldenet | it would make sense, then it'd be possible to actually get 5min average from stream of events by using `match { [ temperature() * Inf ] 5min` | 17:22 | |
SmokeMachine | m: grammar Bla { token a {"a"}; token TOP { <a>+ } }; class BlaAction { method TOP($/) { say $<a>.^name } }; Bla.parse: "aaa", :actions(BlaAction) | ||
camelia | Array | ||
SmokeMachine | Voldenet: yes... good idea! | 17:23 | |
17:33
sena_kun joined
17:35
Altai-man_ left
17:37
domidumont joined
17:38
domidumont left
17:48
chloekek joined
|
|||
Voldenet | SmokeMachine: I've just noticed that in the "event ban-ip" example I've forgotten to write a filter for 'group by ip', but it'd be pretty fun idea to implement fail2ban in EventExpressionLanguage | 17:50 | |
SmokeMachine | Voldenet, Xliff: Now I'm thinking... if we do array for multiple times event, we don't REALLY need ids... we can call that by the event type..., so `bla() ble() bla()`, we could access it's values as `#bla[0]`, `#ble` and `#bla[1]`... | 17:52 | |
Voldenet: yes, it would! :) | 17:53 | ||
`event ban-ip { has $ip = #login.remote-ip; match { [ invalid-login(#login, ?remote-ip == #login.remote-ip) ** 10 ] 5min }` | 17:54 | ||
or? | 17:56 | ||
Voldenet | it looks quite nice, especially considering that 'invalid-login' can be emitted by filtering supply constructed from 'journalctl -f' | ||
SmokeMachine | `event ban-ip { has $ip = #login.remote-ip; match { [ invalid-login(#login, ?remote-ip == #login.last.remote-ip) ** 10 ] 5min }` | ||
Voldenet | #login.remote-ip definitely | 17:59 | |
SmokeMachine | Voldenet: or should `#id.array-operation` use #id as array and `#id.item-operation` use the last value on `#id`? | ||
Voldenet | it'd be more practical to filter by last event just by writing `#id.field` | 18:00 | |
SmokeMachine | `#id.sum`, `#id.average`, `#id.count`, etc use all events matched by `#id` and `#id.value`, `#id.any-other-thing` use the last value | ||
should be possible to `#id[3]`? | 18:01 | ||
*it | |||
Voldenet | yeah, but more like: `#id[-1]` | ||
or `#id[*-1]` if we use raku syntax | |||
SmokeMachine | I mean if you want the 4th... | ||
Voldenet | I agree that indices should work | 18:02 | |
in fact: `event ban-ip { has $ip = #login.remote-ip; match { [ invalid-login(#login, ?remote-ip == #login[0].remote-ip) ** 10 ] 5min }` | 18:03 | ||
SmokeMachine | I'm also thinking on changing it's name... I'm not sure if EEL is a good idea... | ||
18:03
hungrydonkey left
|
|||
Voldenet | all messages should be filtered using first known ip, not last, obviously | 18:03 | |
SmokeMachine | Voldenet: but if you filter by the last, (since you are using ?) the first time will not filter, the 2nd time it will filter by the first, the third will filter by the second that is equal to the first, etc... | 18:05 | |
so, `#login[0].remote-ip` would behave the same `#login[*-1].remote-ip`... | 18:07 | ||
18:07
aluaces left
|
|||
Voldenet | uh, what about: `event ban-ip { has $ip = #login.remote-ip; match { [ invalid-login(#last) && invalid-login(#login, ?remote-ip == #last.remote-ip) ** 10 ] 5min }` | 18:08 | |
it's more explicit where #last is stored then | 18:09 | ||
SmokeMachine | Voldenet: in that case you wouldn't need the `?` on `?remote-ip`... | ||
Voldenet | the idea is that every first "invalid login" would get captured into the store, then next invalid-login events will be only captured into #login array if they use the same ip as the first one | 18:11 | |
SmokeMachine | Voldenet: that's what the other codes would do either... | 18:12 | |
Voldenet: it gets the values from the last event and creates new queries with that values... | 18:14 | ||
Voldenet: so if the invalid-login has remote-ip as 127.0.0.1, it will add on query-storage a query like: `{ :type("==" => "invalid-login"), :remote-ip("==" => "127.0.0.1") }` | 18:15 | ||
Voldenet | Okay, I guess that this makes sense: `event ban-ip { has $ip = #login.remote-ip; match { [ invalid-login(#login, ?remote-ip == #login.last.remote-ip) ** 10 ] 5min }` | 18:19 | |
SmokeMachine | Voldenet: but if `#id.not-list-operation` means `#id.last.not-list-operation` then, you don't need that `.last` there... | 18:20 | |
every new code I see/write makes me think that's a good idea... | 18:21 | ||
18:23
MasterDuke joined
|
|||
Voldenet | yeah, the only filters that usually make sense in this context is 'last', maybe 'current' in rare cases, hardly ever it'd access all the previous values | 18:23 | |
18:25
aborazmeh left
18:27
dakkar left
18:29
reach_satori joined
18:30
dansolo42 left
|
|||
Voldenet | there might be a need to express 'group of fields that must be the same like in the previous event' | 18:31 | |
SmokeMachine | Voldenet: why the `attr == #id.something-else` isn't good for that? | 18:33 | |
Voldenet | `event smart-rising { has $val = #v.value; has $id = #v.id; has $device = #v.device; match { [ smart-value-change(#v, ?device == #v.device, ?value > #v.value, ?id > #v.id) ** 5 ] 10min }` | ||
uh | |||
`event smart-rising { has $val = #v.value; has $id = #v.id; has $device = #v.device; match { [ smart-value-change(#v, ?device == #v.device, ?value > #v.value, ?id == #v.id) ** 5 ] 10min }` | |||
it's not very obvious what it does | |||
18:34
natrys joined
|
|||
SmokeMachine | device changing price? | 18:35 | |
18:35
dansolo42 joined
|
|||
Voldenet | it's emitting hard disk values from smart | 18:35 | |
18:36
aluaces joined
|
|||
Voldenet | but the problem is that there's a need to monitor it by-device and by the property (temperature_celsius is not error_count) | 18:36 | |
I propose shorter syntax: `event smart-rising { has #v; match { [ smart-value-change(#v, ? == #v, ?value > #v.value) ** 5] 10min }` | 18:37 | ||
"current #v must be exactly like previous one, but value must be rising" | 18:38 | ||
SmokeMachine | Voldenet: does that mean everything but value are equal? | 18:39 | |
Voldenet | Yeah, exactly | ||
and that it emits the same attributes that event it received, but with different type | |||
SmokeMachine | Voldenet: but what about timestamp? every event has timestamp... and they will not be the same... | 18:40 | |
Voldenet | hm, and in fact event may have 4 fields being a compound key and 10 fields not being a key | 18:41 | |
`event smart-rising { has #v; match { [ smart-value-change(#v, ?<device id> == #v<device id>, ?value > #v.value) ** 5] 10min }` | 18:42 | ||
SmokeMachine | Voldenet: what about `?[device, id] == #v.[device, id]`? | ||
:) different postcircumfixes... :P | |||
Geth | advent: tmtvl++ created pull request #47: Add tmtvl to the list for 2020 |
||
Voldenet | I guess it's pretty intuitive, then | ||
18:43
squashable6 left
|
|||
SmokeMachine | Ive preferred yours... | 18:43 | |
what about `?*<device id> == #v<device id>` ? | |||
Voldenet: (have you seen the `*`?) | 18:44 | ||
18:44
squashable6 joined
|
|||
jmerelo | m: "abc" ~~ /$<foo> = (\w+)/; say $<foo> | 18:46 | |
camelia | 「abc」 | ||
Geth | advent: a8cd879511 | (Tim Van den Langenbergh)++ | raku-advent-2020/authors.md Add tmtvl to the list for 2020 |
||
advent: 240e37d013 | Altai-man++ (committed using GitHub Web editor) | raku-advent-2020/authors.md Merge pull request #47 from tmtvl/tmtvl/add-me-to-schedule Add tmtvl to the list for 2020 |
|||
jmerelo | m: "abc" ~~ /$<foo> = (\w+)/; my $key = "foo"; say $<$key> | ||
camelia | Nil | ||
Voldenet | SmokeMachine: that'd work only if that syntax would also be valid: smart-value-change(#v, *.device == #v.device) | ||
jmerelo | m: "abc" ~~ /$<foo> = (\w+)/; my $key = "foo"; say $<"$key"> | 18:47 | |
camelia | Nil | ||
jmerelo | m: "abc" ~~ /$<foo> = (\w+)/; my $key = "foo"; say $<"foo"> | ||
camelia | Nil | ||
SmokeMachine | Voldenet: you have a point... | ||
jmerelo | m: "abc" ~~ /$<foo> = (\w+)/; my $key = "foo"; say $/{$key} | ||
camelia | 「abc」 | ||
Voldenet | SmokeMachine: in fact, having * in place of current element may enable future syntax additions | 18:49 | |
jmerelo | m: grammar Foo { token TOP { <bar> }; token bar { .+ }}; say Foo.parse( "bar" ) | ||
camelia | 「bar」 bar => 「bar」 |
||
jmerelo | m: grammar Foo { token TOP { <bar> }; token bar { .+ }}; class FooAction { method TOP($/) { make $<bar>.made }; method bar($/) { make ~$/} }; say Foo.parse( "bar" ) | 18:50 | |
camelia | 「bar」 bar => 「bar」 |
||
jmerelo | m: grammar Foo { token TOP { <bar> }; token bar { .+ }}; class FooAction { method TOP($/) { make $<bar>.made }; method bar($/) { make ~$/} }; say Foo.parse( "bar", :actions( FooAction.new ) ) | 18:51 | |
camelia | 「bar」 bar => 「bar」 |
||
jmerelo | m: grammar Foo { token TOP { <bar> }; token bar { .+ }}; class FooAction { method TOP($/) { make $<bar>.made }; method bar($/) { make ~$/} }; say Foo.parse( "bar", :actions( FooAction.new ) ).made | ||
camelia | bar | ||
SmokeMachine | Voldenet: maybe `#` instead of `*`? `#.<device id> = #v.<device id>` and `#.device == #v.device` | ||
jmerelo | m: grammar Foo { token TOP { <bar> }; token bar { .+ }}; class FooAction { method TOP($/) { my $key = "bar"; make $/{$key}.made }; method bar($/) { make ~$/} }; say Foo.parse( "bar", :actions( FooAction.new ) ).made | ||
camelia | bar | ||
jmerelo | Cool | 18:52 | |
Voldenet | SmokeMachine: it just occured to me, that # may be "default id" for the event, so: smart-value-change(*.device == #.device) | 18:53 | |
SmokeMachine | Voldenet: Sorry, I got lost... | ||
Voldenet | SmokeMachine: # instead of #v, so smart-value-change(#, ?<device id> == #<device id>, ?value > #.value) ** 5] | 18:54 | |
in which case, # could be dropped to be default: smart-value-change(?<device id> == #<device id>, ?value > #.value) | 18:55 | ||
if * was used: smart-value-change(?*<device id> == #<device id>, ?value > #.value) | |||
or rather: smart-value-change(?*<device id> == #<device id>, ?*.value > #.value) | 18:56 | ||
SmokeMachine | Voldenet: so, the `#` would be the last matched event of the same type as th current? | 18:57 | |
Voldenet | yes | ||
SmokeMachine | Voldenet: that makes sense... (and will be hard to explain/documente...) | 18:58 | |
Voldenet: I think all this is hard to explain not explaining internal behaviour... | 18:59 | ||
19:03
aindilis left
|
|||
Voldenet | #type = event-type(filters…) ** count, filters are boolean expressions separated by `,`, * - current event hash, # - previous event of current type hash, ? true or unknown | 19:03 | |
in the meanwhile, different #id syntax | 19:04 | ||
jmerelo | twitter.com/PerlConferences/status...9577671684 | 19:05 | |
^^^ | |||
19:05
aindilis joined
|
|||
Voldenet | SmokeMachine: I think examples are going to be a lot more useful than docs | 19:08 | |
SmokeMachine | Voldenet: I agree... | 19:09 | |
Voldenet: `#` is more complex than `last from the same type`, but last from the same matcher... | 19:10 | ||
Voldenet: `bla(attr = 42) bla(attr = #.attr)` is that valid? I don't think `#.attr` on the 2nd one should be 42... | 19:12 | ||
Voldenet: I think `#` should only be valid inside a quantified matcher... | |||
Voldenet | Right, because otherwise you have nothing to compare to | 19:13 | |
19:15
aborazmeh joined,
aborazmeh left,
aborazmeh joined
|
|||
Voldenet | btw, regarding #ids I'm not sure if this syntax wouldn't be better: `#temp = temperature(value > 40, ?area == #hum.area) & #hum = humidity(value < 20, ?area == #temp.area)` | 19:15 | |
it's more raku-ish | 19:16 | ||
and then `#old = bla(*.attr == 42, ?*.attr > #old.attr)` makes more sense, because #old is being set when it's matched | 19:17 | ||
…in which case `#old = bla(?*.attr > #old.attr) ** 2` looks weird | 19:18 | ||
oh well, bbl, but interesting language idea nonetheless | 19:19 | ||
19:20
jmerelo left
19:21
Kaiepi left
19:22
sauvin left
|
|||
SmokeMachine | Voldenet: that was one of my first attempts... for some reason I've changed my mind... but Im ok of trying it again... | 19:22 | |
19:27
Kaiepi joined
19:32
Altai-man_ joined
19:35
sena_kun left
19:45
molaf left
19:58
rindolf left
20:17
aborazmeh left
|
|||
guifa | o/ | 20:26 | |
20:34
|oLa| joined
|
|||
rypervenche | Are there Camelia plushes for sale anywhere? And if not, will there be any at the Perl and Raku Conf in Houston? | 20:42 | |
20:42
AlexDaniel joined
20:43
AlexDaniel left,
AlexDaniel joined
20:44
hacktor left
20:46
[Sno] joined
|
|||
MasterDuke | i think liz and wendy have the only stock of them, but they aren't planning to go to houston. don't know if they're planning to send any with someone else | 20:46 | |
lizmat: ^^^ | |||
lizmat | no plans either way at this moment | ||
although we might actually start taking online orders at some point | 20:47 | ||
if there is enough demand :-) | |||
20:51
mowcat left,
pecastro joined
20:53
lbns joined
|
|||
cpan-raku | New module released to CPAN! Pg::Notify (0.0.5) by 03JSTOWE | 20:54 | |
20:58
pmurias joined
20:59
|oLa| left
21:00
wamba joined
21:02
hacktor joined
21:09
lbns left
21:33
sena_kun joined
21:35
Altai-man_ left
21:41
Black_Ribbon joined
21:45
molaf joined
21:56
chloekek left
21:58
hacktor left
22:22
hacktor joined
22:34
mowcat joined
22:47
wamba left
|
|||
SmokeMachine | m: my $s = Supplier.new; $s.Supply.lines.map({ .&from-json }).tap: *.ⅆ $s.emit: q"{}\n"; say "after"; $s.emit: q"{}\n"; say "after"; $s.emit: q"{}\n"; say "at the end" | 22:50 | |
camelia | after after at the end |
||
SmokeMachine | should this(^^) be printing the empty hashes between this prints? | 22:51 | |
22:53
natrys left
|
|||
SmokeMachine | m: my $s = Supplier.new; $s.Supply.lines.map({ .&from-json }).tap: *.ⅆ $s.emit: qq"\{}\n"; say "after"; $s.emit: qq"\{}\n"; say "after"; $s.emit: qq"\{}\n"; say "at the end" | 22:53 | |
camelia | Hash %result = {} after after at the end Hash %result = {} Hash %result = {} Saw 1 occurrence of deprecated code. ================================================================================ Sub from-json (from GLOBAL) seen at: … |
||
SmokeMachine | m: use JSON::Fast; my $s = Supplier.new; $s.Supply.lines.map({ .&from-json }).tap: *.ⅆ $s.emit: qq"\{}\n"; say "after"; $s.emit: qq"\{}\n"; say "after"; $s.emit: qq"\{}\n"; say "at the end" | 22:54 | |
camelia | 5===SORRY!5=== Error while compiling <tmp> Could not find JSON::Fast in: inst#/home/camelia/.raku inst#/home/camelia/rakudo-m-inst-2/share/perl6/site inst#/home/camelia/rakudo-m-inst-2/share/perl6/vendor inst#/home/cameli… |
||
SmokeMachine | m: use JSON::Fast; my $s = Supplier.new; $s.Supply.map({ .&from-json }).tap: *.ⅆ $s.emit: qq"\{}\n"; say "after"; $s.emit: qq"\{}\n"; say "after"; $s.emit: qq"\{}\n"; say "at the end" | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Could not find JSON::Fast in: inst#/home/camelia/.raku inst#/home/camelia/rakudo-m-inst-2/share/perl6/site inst#/home/camelia/rakudo-m-inst-2/share/perl6/vendor inst#/home/cameli… |
||
SmokeMachine | m: $*IN.Supply.tap: *.say | 22:56 | |
camelia | »Wann treffen wir drei wieder zusamm?« »Um die siebente Stund‘, am Brückendamm.« »Am Mittelpfeiler.« »Ich lösche die Flamm.« »Ich mit« »Ich komme vom Norden her.« »Und ich vom Süden.… |
||
SmokeMachine | m: $*IN.Supply.lines.tap: *.say | ||
camelia | »Wann treffen wir drei wieder zusamm?« »Um die siebente Stund‘, am Brückendamm.« »Am Mittelpfeiler.« »Ich lösche die Flamm.« »Ich mit« »Ich komme vom Norden her.« »Und ich vom Süden.… |
||
SmokeMachine | m: $*IN.Supply.lines.tap: *.say; say "before closing" | 22:57 | |
camelia | »Wann treffen wir drei wieder zusamm?« »Um die siebente Stund‘, am Brückendamm.« »Am Mittelpfeiler.« »Ich lösche die Flamm.« »Ich mit« »Ich komme vom Norden her.« »Und ich vom Süden.… |
||
elcaro | lizmat: count me in as wanting 1 (or 2). Camelia plushies. I'm in Australia, and won't get a chance to go to any international conferences | 23:02 | |
23:06
pmurias left
|
|||
libertas | Hi, what is '-> ' syntax meaning in my @fibo = 0, 1, -> $a, $b { $a + $b } ... *; lazy infinite list? | 23:26 | |
23:26
titsuki joined
23:32
Altai-man_ joined
23:34
pecastro left,
pmurias joined
23:35
sena_kun left
23:37
Doc_Holliwood left,
Doc_Holliwood joined
|
|||
jnthn | libertas: "lambda" - that is, a piece of code that takes two parameters, $a and $b, and then adds them together | 23:41 | |
23:46
lucasb left
|
|||
elcaro | libertas: as jnthn said, it's just a lambda | 23:54 | |
m: my &add = -> $a, $b { $a + $b }; say add(3, 5); | 23:55 | ||
camelia | 8 | ||
23:55
aborazmeh joined,
aborazmeh left,
aborazmeh joined
|