|
🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). Log available at irclogs.raku.org/raku/live.html . If you're a beginner, you can also check out the #raku-beginner channel! Set by lizmat on 6 September 2022. |
|||
| Voldenet | my thoughts github.com/FCO/Red/issues/15#issue...1984826416 | 00:18 | |
| I'm not sure on `Red-*` methods, it's just an idea | 00:19 | ||
| SmokeMachine | looking, thanks! | ||
| Voldenet | created-on could use unix timestamp too | ||
| in fact, I could add that as a comment too | 00:31 | ||
|
00:36
jpn joined
00:41
jpn left
01:25
Summer left,
Summer joined
|
|||
| Voldenet | defending that `keep model changes instead of model snapshot` approach is going to be hard to defend | 01:28 | |
| ngl, it sounds cool, but nothing else | 01:31 | ||
| SmokeMachine | Voldenet: I have added there an option to your migration "class"... github.com/FCO/Red/issues/15#issue...1984905771 | 01:49 | |
| Voldenet | > User.^migration: *.drop-column("type"); | 01:56 | |
| doesn't this require `User` entity to exist? | |||
| what if it gets removed in the future? | |||
| aruniecrisps | @SmokeMachine you're suggesting that we use a .sqlite file to house the migration plan right? | 02:07 | |
| SmokeMachine | That's a reason I'm thinking in not only store the model representation but all model classes to each version | ||
| aruniecrisps: not the plan, but the history... | 02:08 | ||
| aruniecrisps: but after Voldenet's comment, I'm rethinking it... | |||
| aruniecrisps | Yea didn't voldenet suggest using git diffs? | 02:09 | |
| Voldenet | well, depends | ||
| if we store snapshot, you can use diffs to extract differences | |||
| if we store differences in migrations, we have diffs and we reconstruct snapshots | 02:10 | ||
| though diffs are not useful in terms of frameworks | |||
| tbh. entity framework simply stores whole model in every migration | 02:12 | ||
| it gets beyond gigantic | |||
| so I'm sure what to avoid | 02:13 | ||
| aruniecrisps | What do you think? | 02:14 | |
| I wonder what Rails and Phoenix do | |||
| SmokeMachine | I think my preferred way is storing all models for each version... that was we can get the difference between models and we are able to use them on migrations... | ||
| Voldenet | that could work | 02:15 | |
| SmokeMachine | by diff, I don't mean git diff, but something like: Model1.diff: Model2 | ||
| something like this: github.com/FCO/Red/blob/3e318994d1...akumod#L68 | 02:16 | ||
| (this example uses diff from DB to model...) | |||
| aruniecrisps | I'm assuming for that though you would need something like sqlite to store thee full model | 02:17 | |
| SmokeMachine | no, file | ||
| just copy the model file | 02:18 | ||
| aruniecrisps | Doesn't that lead to what voldenet was talking about? | ||
| SmokeMachine | what? | 02:19 | |
| aruniecrisps | Where if you store the whole model in every migration it gets way out of hand? | ||
| Or am I misunderstanding something | |||
| Voldenet | Hmm, what if entities were only stored on change and otherwise old versions would be used | 02:20 | |
| SmokeMachine | sorry... I didn't get it... | ||
| Voldenet | the project gets large if you maintain it long enough | ||
| SmokeMachine | Voldenet: | 02:21 | |
| > Hmm, what if entities were only stored on change and otherwise old versions would be used | |||
| I was thinking about that too... | |||
| Voldenet | it would require some per-entity versioning and having the list of entities used in model | 02:22 | |
| sounds horrible, but shouldn't be that tough to maintain | |||
| aruniecrisps | what would that look like though? | ||
| what do you mean by per-entity versioning | 02:23 | ||
| SmokeMachine | we just increment the version of a model if it changed on that migration... | ||
| s/just/only/ | |||
| Voldenet | `/migrations/entities/User/1/entity.raku: model User is rw { … }` | 02:24 | |
| and then in the migration `/migrations/1/initial-migration.raku: use User:ver<1>` or something similar | 02:25 | ||
| aruniecrisps | ah okay that makes sense | ||
| I'm not familiar enough with extended identifiers in Raku to figure how to pull out the version number if needed | 02:26 | ||
| SmokeMachine | maybe we could use a custom CompUnit::Repository... | 02:27 | |
|
02:28
kylese left,
kylese joined
|
|||
| SmokeMachine | or maybe just add all of them on META6.json? | 02:28 | |
| aruniecrisps | I don't like the second idea | ||
| SmokeMachine | why? | 02:29 | |
| Voldenet | project shouldn't be referencing other versions | ||
| aruniecrisps | wait do you mean by add all of them to META6.json, what field would they go under | ||
| what voldenet said, and i feel that is the ability to get unwieldy very quickly | 02:30 | ||
| SmokeMachine | provides | ||
| maybe the custom CompUnit::Repository then... | |||
| Voldenet | consider this: `use lib <entities/User/1 entities/Roles/3 entities/Scores/2>; use User; use Roles…` | 02:31 | |
| something like that sounds a bit awful | |||
| aruniecrisps | Yea, that's what I'm thinking, I don't think the business logic should be directly referencing version numbers | 02:32 | |
| Voldenet | but it's a storage optimization for migrations then | ||
| SmokeMachine | maybe return with this old idea: github.com/FCO/Red/issues/7 | 02:33 | |
|
02:36
Summer left,
Summer joined
|
|||
| aruniecrisps | I think this idea might be better | 02:37 | |
| What are your thoughts @Voldenet? | |||
| Voldenet | sounds nice, the only limit is that it has to be parsed | 02:38 | |
| with CompUnit::Repository only specific entities could need to be loaded | 02:39 | ||
| so, out of 100 entities in 4 versions, the latest necessary migration may only load 4 files (each 50b in size) instead of one being 20kb in size (I'm assuming 50b per entity) | 02:40 | ||
| it's not horrible though | 02:41 | ||
| aruniecrisps | So basically @SmokeMachine if i'm getting you correctly the idea is to implement schema as a CompUnit::Repository? | 02:45 | |
| SmokeMachine | I'm thinking on something like: `use lib "RedSchema#User:ver<1>#Model2:ver<3>#Model3:ver<5>"` | ||
| aruniecrisps | That feels like the same as use lib <entities/User/1 entities/Roles/3 entities/Scores/2> | 02:48 | |
| SmokeMachine | but you don't need to know where they are.. | 02:49 | |
| but yes... | |||
| aruniecrisps | you don't need to know where they are, but they're still referencing version numbers | ||
| SmokeMachine | yes, and that's what we need on the migration, right? | 02:50 | |
| Voldenet | in normal code there wouldn't be any need for that, so either way it's managable | 02:52 | |
| aruniecrisps | @SmokeMachine oh you mean for the migration | 02:53 | |
| i thought this use lib "RedSchema#User:ver<1>#Model2:ver<3>#Model3:ver<5> was for the business logic | |||
| SmokeMachine | better, we could have a Schema.rakumod inside each migration dir and have: | 02:55 | |
| class Schema:ver<2> does RedSchema { has @.models = ( Model1:ver<1>, Model2:ver<3>, Model3:ver<5>) } | |||
| and then, when we `use RedSchema` it would import all those Models... | |||
| I mean for migration, yes... but this last idea could also be used on normal code (with no versions...) | 02:56 | ||
| aruniecrisps | I like this idea | ||
| SmokeMachine | RedSchema would be just a simple `sub EXPORT` with the logic to se what models and what versions to load and just return a map with them... | 02:57 | |
| (sorry, @.models would be strings... not the types) | 02:58 | ||
| the only problem with these ideas is to split files if there are more than 1 model on that... | 02:59 | ||
| 3am... sorry I need to go now... | 03:00 | ||
| Voldenet | productive night either way | ||
| 4am here | |||
| aruniecrisps | See you guys later! | 03:01 | |
| SmokeMachine | We need to add that last suggestion on the thread... | 03:02 | |
| Voldenet | I've added something | 03:06 | |
| basically a very brief summary | |||
|
03:06
Summer left
03:07
Summer joined
|
|||
| SmokeMachine | thnks! I was doing that too... I replaced the class with a sub call (I think that makes more sense)... github.com/FCO/Red/issues/15#issue...1984964871 | 03:07 | |
| Voldenet: ^^ | |||
| Voldenet | and no thought was lost | 03:09 | |
| SmokeMachine | github.com/FCO/Red/issues/15#issue...1984966702 | ||
| Thank you very much you 2! | |||
| I'm going to sleep | |||
|
03:15
kylese left,
kylese joined
03:37
Summer left
03:38
Summer joined
04:08
Summer left,
Summer joined
04:39
Summer left,
Summer joined
05:06
MasterDuke joined
05:09
Summer left
05:10
Summer joined
05:40
Summer left,
Summer joined
06:11
Summer left,
Summer joined
06:32
MasterDuke left
06:41
Summer left
06:42
Summer joined
07:11
kst left
07:12
Summer left,
Summer joined
07:17
kst joined
07:34
jpn joined
07:39
jpn left
07:43
Summer left,
Summer joined,
Sgeo left
08:13
Summer left
08:14
Summer joined
08:44
El_Che left,
Summer left,
Summer joined
08:54
merp left
08:59
haxxelotto joined
09:01
merp joined,
jpn joined
09:08
sena_kun joined
09:53
sena_kun left
10:42
ACfromTX left
11:13
hudo__ joined
11:17
hudo_ left
11:20
mark22k left
11:21
mark22k joined
11:23
mark22k left
11:24
mark22k joined
11:26
mark22k left
11:27
mark22k joined
11:33
haxxelotto left
|
|||
| dutchie | what's the best way to make ascii-only regexes? | 12:14 | |
| i.e. i don't want \w etc to match non-ascii characters. or would it be better just to check my string is ascii separately from whether it matches the regex | 12:15 | ||
| lizmat | m: say "aa" ~~ / <:ascii>+ / | 12:36 | |
| camelia | 「aa」 | ||
| lizmat | m: say "b👍a" ~~ / <:ascii>+ / | 12:38 | |
| camelia | 「b」 | ||
| lizmat | m: say "b👍a" ~~ / ^ <:ascii>+ $ / | ||
| camelia | Nil | ||
| lizmat | m: say "ba" ~~ / ^ <:ascii>+ $ / | ||
| camelia | 「ba」 | ||
| lizmat | m: say "b👍a" ~~ / <-:ascii>+ / | 12:39 | |
| camelia | 「👍」 | ||
| lizmat | ^^ dutchie | ||
|
12:53
MasterDuke joined
12:57
jpn left
|
|||
| dutchie | ah :ascii, couldn't find that in the docs anywhere | 12:59 | |
| lizmat | m: say "b👍a".contains( / <-:ascii> /' | 13:20 | |
| camelia | ===SORRY!=== Error while compiling <tmp> Unable to parse expression in argument list; couldn't find final ')' (corresponding starter was at line 1) at <tmp>:1 ------> say "b👍a".contains( / <-:ascii> /⏏' expecting any of:… |
||
| lizmat | m: say "b👍a".contains( / <-:ascii> / | ||
| camelia | ===SORRY!=== Error while compiling <tmp> Unable to parse expression in argument list; couldn't find final ')' (corresponding starter was at line 1) at <tmp>:1 ------> say "b👍a".contains( / <-:ascii> /⏏<EOL> |
||
| lizmat | m: say "b👍a".contains( / <-:ascii> / ) | 13:21 | |
| camelia | True | ||
| lizmat | m: say "ba".contains( / <-:ascii> / ) | ||
| camelia | False | ||
| lizmat | that's a quick way to ensure that a string contains any non-ascii grapheme | ||
| [Coke] | dutchie - if you could be so kind as to open a raku/doc ticket about what you were trying to find. I just tried to search for :ascii itself and couldn't find it, but someone trying to answer your question wouldn't start with that. (but we should probably have all the regex :classes indexed for search.) | 13:22 | |
| If not, no worries | |||
| tbrowder__ | hi | 13:32 | |
| hi | 13:33 | ||
| hi | 13:35 | ||
| lizmat | tbrowder__ o/ | 13:36 | |
| tbrowder__ | hi, lizmat. i'm still blind to my msgs | 13:37 | |
| i'm working on a module that looks for the user to set a certain value by one of three mean: | 13:39 | ||
| *means: config file, env var, or CLI. i usually expect the priority for programs to check in order first to last: cli, env var, config. | 13:42 | ||
| i would appreciate other opinions as to the best way to do that. maybe POSIX has an answer | 13:43 | ||
|
13:45
jpn joined
|
|||
| tbrowder__ | [Coke]: any problem with a merge of my File::Temp PR? | 13:48 | |
|
13:59
jpn left
14:13
jpn joined
|
|||
| [Coke] | tbrowder__: I only had an issue with the sha items in the changelog, but am fine if they go in. | 14:15 | |
| I can't address the "meat" of the changes. | 14:16 | ||
| tbrowder__ | ok, thnx, maybe lizmat could take a look when time permits | 14:22 | |
|
14:22
haxxelotto joined
14:28
xinming left
14:29
xinming joined
15:02
jmcgnh left
15:35
haxxelotto_ joined,
haxxelotto left
15:49
Sgeo joined
16:37
vlad joined
16:48
vlad left,
vlad joined
17:05
El_Che joined
|
|||
| _grenzo | From a US/Pacific time point of view, rakoons (raccoons?) are crepuscular | 17:08 | |
|
17:08
vlad left,
vlad joined
|
|||
| jdv | trash pandas? | 17:10 | |
| _grenzo | Sure, as long as they use Raku | 17:11 | |
|
17:51
haxxelotto_ left,
haxxelotto joined
18:11
haxxelotto left
18:21
vlad left
18:47
jpn left
|
|||
| antononcube | @grenzo Visual aid: | 19:12 | |
| cdn.discordapp.com/attachments/633...80191& | |||
| tbrowder__ | hi | 19:30 | |
| humbug! | 19:31 | ||
|
19:34
jpn joined
|
|||
| _grenzo | Curious, do images work across the irc bridge? | 19:34 | |
|
19:38
jpn left
19:39
haxxelotto joined
20:01
abraxxa-home joined
20:02
abraxxa-home left
20:04
abraxxa-home joined
20:27
ericst joined
20:28
jpn joined,
ericst left
20:32
kst left,
jpn left
20:39
kst joined
20:43
jpn joined
20:48
jpn left
20:57
abraxxa-home left
21:23
jpn joined
21:28
jpn left
|
|||
| japhb | _grenzo: We get a link to a WebP file on cdn.discordapp.com | 21:42 | |
|
21:44
jpn joined
21:46
haxxelotto left
21:48
jpn left
22:00
haxxelotto joined
22:08
sena_kun joined
22:11
jmcgnh joined
22:12
MasterDuke left
22:24
ponycat joined
|
|||
| ponycat | does raku have an equivalent to this? docs.python.org/3/library/os.path.....path.join | 22:26 | |
| antononcube | @ponycat Yes, docs.raku.org/type/IO/Path | 22:29 | |
| ponycat | thanks, it looks like the add method is what I was looking for in particular | 22:30 | |
| aruniecrisps | @SmokeMachine does .^save return the id of the new record when you're saving a new record? | 22:33 | |
| SmokeMachine | No, but you can .^refresh to repopulate your object (if you are using the refresh experimental) | 22:35 | |
| (If I remember it well… let me take a look) | 22:36 | ||
| Sorry, I was wrong, .^save DOES return stuff: github.com/FCO/Red/blob/master/lib...kumod#L481 | 22:42 | ||
|
22:44
jpn joined
22:45
MasterDuke joined
|
|||
| aruniecrisps | It does return something, question is what does it return :cameliathink: | 22:46 | |
|
22:49
jpn left
|
|||
| SmokeMachine | In Pg we return * | 22:55 | |
| For SQLite, I think it doesn’t return anything useful… but I have no access to a computer to be sure now… | 22:57 | ||
| But why are you using .^save instead of .^create? | |||
| aruniecrisps | @SmokeMachine I'm thinking about a good way of doing validations | 22:58 | |
| SmokeMachine | What kind of validation? | 22:59 | |
| aruniecrisps | form data validation, checking to see whether or not the form data is good or not | ||
| so say i'm trying to check to see whether or not a value that is entered into a field is valid | 23:00 | ||
| the way i have it is I just validate this data directly and accumulate the errors to show to the client | |||
| if you look at what i'm doing for begumpura you'll see what i mean | |||
| SmokeMachine | You could do validations on type `subset Name of Str where 0 < *.chars <= 30; has Name $.name is column{ :type<varchar(30) };` | 23:04 | |
| But I think form validations should be done before data gets to the model… | 23:05 | ||
| aruniecrisps | That's probably a good call | ||
| SmokeMachine | As I do on this HTML::Component example: github.com/FCO/HTML-Component/blob...akumod#L32 | 23:07 | |
| And that’s common to a form validation be different to the model validation… | 23:08 | ||
|
23:08
haxxelotto left
23:09
haxxelotto joined
|
|||
| SmokeMachine | aruniecrisps: make sense? | 23:19 | |
|
23:36
sena_kun left
23:45
jpn joined
23:51
jpn left
|
|||