|
jesus
|
# ? May 6, 2017 01:46 |
|
|
# ? May 27, 2024 04:11 |
|
fleshweasel posted:how does event sourcing play with changing schema over time the event tables hold the payloads in unstructured blobs*, so they don't change beyond maybe adding more metadata columns for the state tables, you're golden because even if - let's say - you change literally everything about them, worst case you just wipe them, create the new schema, and reprocess all your event tables using your updated code that supports the new schema usually that ain't gonna be necessary if you're just adding a few new columns or tables to support a new feature, but it's good to have the failsafe available * this isn't as much of a horror as it sounds, and as I originally thought, because if your application uses the internet at all then chances are you will receive events in the form of an unstructured xml/json blob anyway, so you don't have to do any more de/serializing than you already would NihilCredo fucked around with this message at 02:48 on May 6, 2017 |
# ? May 6, 2017 02:45 |
|
"gee, I wonder if there's a way you could automate that process no, no, that would be too complicated. better just sit here and wallow in my own rancid poo poo" - rob pike
|
# ? May 6, 2017 04:26 |
|
|
# ? May 6, 2017 04:30 |
|
oooooh the GS compactflash hard drive card is a clone of a card from the '90s made by the guy who makes all the other apple 2 enhancement hardware well i got one on the way so go me
|
# ? May 6, 2017 05:44 |
|
everything I ever see about go is
|
# ? May 6, 2017 05:48 |
|
Finster Dexter posted:lmao what does a masters level class in "advanced" javascript even look like? yeah. it's a new offering. apparently the class just getting you started using a couple of JavaScript frameworks. like angular, and backbone. and one other one I can't think of off the top of my head right now.
|
# ? May 6, 2017 06:07 |
|
|
# ? May 6, 2017 06:06 |
|
Star War Sex Parrot posted:Masters in what software engineering
|
# ? May 6, 2017 06:09 |
|
|
# ? May 6, 2017 06:26 |
|
nern posted:yeah. it's a new offering. apparently the class just getting you started using a couple of JavaScript frameworks. like angular, and backbone. and one other one I can't think of off the top of my head right now. Scala as hard as you possibly can.
|
# ? May 6, 2017 06:56 |
|
nern posted:angular, and backbone.
|
# ? May 6, 2017 07:46 |
|
fleshweasel posted:how does event sourcing play with changing schema over time So far pretty good, alter the schema, make changes to the projection code (and/or events if they want to start capturing more data) & move on, but like NihilCredo said it's nice to have the option to burn it all down and rebuild knowing you won't lose any data, unless you torch your event store NihilCredo posted:* this isn't as much of a horror as it sounds, and as I originally thought, because if your application uses the internet at all then chances are you will receive events in the form of an unstructured xml/json blob anyway, so you don't have to do any more de/serializing than you already would this is one of the few times a document database would be a good use case if for whatever reason you wanted to keep your write model completely separate from your read model, but dbo.EventStore is plenty good enough
|
# ? May 6, 2017 08:31 |
|
|
# ? May 6, 2017 08:43 |
|
Potassium Problems posted:So far pretty good, alter the schema, make changes to the projection code (and/or events if they want to start capturing more data) & move on, but like NihilCredo said it's nice to have the option to burn it all down and rebuild knowing you won't lose any data, unless you torch your event store do you ever have to blow away a projection and start from scratch? or create a new projection from scratch? how do you handle bootstrapping them from the beginning of time?
|
# ? May 6, 2017 15:04 |
|
it's really nice that i have a supportive dad who takes an interest in me starting a computer-toucher career. like today he sent me a link for a big nasa bounty initiative https://www.theverge.com/2017/5/4/15549276/nasa-hpfcc-fun3d-fluid-simulation-fortran-challenge on the other hand it's hard to explain to him things like "i got a C in calculus" and "i post in this thread"
|
# ? May 6, 2017 17:14 |
|
lmao. go users are so stupid
|
# ? May 6, 2017 17:54 |
|
Lutha Mahtin posted:it's really nice that i have a supportive dad who takes an interest in me starting a computer-toucher career. like today he sent me a link for a big nasa bounty initiative quote:The system is used internally at NASA, as well as by companies like Boeing and Lockheed, to develop and optimize new vehicles and engines. lol yeah lemme just work for boeing and lockheed, for free, in my spare time
|
# ? May 6, 2017 18:04 |
|
AWWNAW posted:do you ever have to blow away a projection and start from scratch? or create a new projection from scratch? how do you handle bootstrapping them from the beginning of time? I've never had to blow everything away, but I've had to create new projections, and it's only a little more involved than a schema change. the code involves creating a class the subscribes to the relevant events that creates that projection, then I have an event streamer class that streams events in order from the store (unbuffered dapper query) , with the only subscriber to these events being the new projection class it's only happened a couple of times and the app isn't traffic heavy so I got away with doing this at the end of the day on my dev box, making sure everything looks right, then pointing it to production. once the prod projection is done I add back all the other event subscribers and deploy the code.
|
# ? May 6, 2017 18:49 |
|
Lutha Mahtin posted:it's really nice that i have a supportive dad who takes an interest in me starting a computer-toucher career. like today he sent me a link for a big nasa bounty initiative same but i got a D in calculus
|
# ? May 6, 2017 19:07 |
|
potassium problems, how do you keep track of which events have been processed and which ones have not? flag each event, store a "last processed event" value somewhere, or something else?
|
# ? May 6, 2017 20:13 |
|
holy poo poo
|
# ? May 6, 2017 20:33 |
|
Bloody posted:lol yeah lemme just work for boeing and lockheed, for free, in my spare time lol all of the comments are basically saying the same thing quote:I sincerely hope no one wins this. Software used by "companies like Boeing and Lockheed"? quote:Poor licensing and a small prize. quote:That "prize" is missing a half dozen zeroes.
|
# ? May 6, 2017 20:45 |
|
so are your write events derived from state in your state table? if so, what are you doing to deal with stale reads?
|
# ? May 6, 2017 20:53 |
|
The_Franz posted:lol all of the comments are basically saying the same thing Avenging_Mikon posted:You don't think geeks would work for NASA for cheap? LethalGeek posted:Only saying some people might have enough passion to want to do it anyway. I don't know why that's such a wild idea. Judge Schnoopy posted:That prize makes it seem like they're aiming the project at colleges and universities looking to gain prestige. I can see MIT taking a stab with hardly any stakes involved. KoRMaK posted:Fortran aint that hard to learn. divabot posted:I'm thinking "starving grad student" here. 22 Eargesplitten posted:They're probably hoping for people that want a hobby project anyway.
|
# ? May 6, 2017 21:03 |
|
NihilCredo posted:potassium problems, how do you keep track of which events have been processed and which ones have not? flag each event, store a "last processed event" value somewhere, or something else? I've only had to do this once, and it was because an external service I was writing to was offline. I was lucky because it didn't effect the aggregate state in a major way and it didn't matter when this event happened in relation to other events, so I could update the handler to just ignore request failures and I have a Hangfire job that tries again later.
|
# ? May 6, 2017 21:09 |
|
anthonypants posted:incidentally, this is why the grey forums are bad
|
# ? May 6, 2017 21:18 |
|
it's relaxing to write bad C in this text based editor except when my GS runs out of memory trying to juggle compiler, linker, and editor and the OS crashes
|
# ? May 6, 2017 21:21 |
|
Bloody posted:this is why the grey forums are bad
|
# ? May 6, 2017 21:24 |
|
FamDav posted:so are your write events derived from state in your state table? if so, what are you doing to deal with stale reads? yes, and nothing! all the event processing happens in the scope of a web request so stale reads shouldn't happen. probably not best practice, but if stale data was an issue, I would probably get lazy and just show the user a "changes have been made but may take a moment to show up" message e: you'd probably also make parts of your aggregate idempotent so if a user acts on stale data, the command is just ignored. i.e. ApproveRequestCommand sent twice, the 2nd time the state is already approved so return w/o processing or generating an event for it Potassium Problems fucked around with this message at 21:31 on May 6, 2017 |
# ? May 6, 2017 21:24 |
|
i just had a python 2 project dropped in my lap at work which is cool bc ive never really used python at work my first move was to upgrade to python 3 just bc i dont like to use outdated things; hope i didnt break it
|
# ? May 6, 2017 21:25 |
|
you already know python. its just pseudocode
|
# ? May 6, 2017 21:29 |
Potassium Problems posted:yes, and nothing! all the event processing happens in the scope of a web request so stale reads shouldn't happen. probably not best practice, but if stale data was an issue, I would probably get lazy and just show the user a "changes have been made but may take a moment to show up" message 2to3 takes care of like 99% of upgrading python2 -> python3 issues so hopefully you used that
|
|
# ? May 6, 2017 21:33 |
|
i basically did whatever pycharm told me to do (jetbrains all products license ) and it seems to work so far
|
# ? May 6, 2017 21:36 |
|
Potassium Problems posted:idempotent ty for teaching me a new word
|
# ? May 6, 2017 21:44 |
|
Potassium Problems posted:yes, and nothing! all the event processing happens in the scope of a web request so stale reads shouldn't happen. probably not best practice, but if stale data was an issue, I would probably get lazy and just show the user a "changes have been made but may take a moment to show up" message so you're reading from the state table, submitting the event to your events table, and materializing into your state table within the lifetime of the request? are you taking simultaneous requests? my concern about stale data wasn't about users seeing out of date data, it was submitting conflicting/incorrect events because you don't have a mechanism to know if anything you read from or are writing to has been modified from when you started reading from your state table to when you submitted to your event table. i dont know all the details of what your event store or your application is doing, tho :/
|
# ? May 6, 2017 21:56 |
|
FamDav posted:so you're reading from the state table, submitting the event to your events table, and materializing into your state table within the lifetime of the request? are you taking simultaneous requests? ahh, I haven't run into that, the scope of this app is for internal change requests and multiple people looking at one at the same time is rare let alone updating one, but like I said users acting on invalid data should be covered since your aggregates should be always be hydrated into the most current state no matter how out of date the read model is since the source of their data is the event store, The One Source Of Truth.
|
# ? May 6, 2017 22:09 |
|
FamDav posted:my concern about stale data wasn't about users seeing out of date data, it was submitting conflicting/incorrect events because you don't have a mechanism to know if anything you read from or are writing to has been modified from when you started reading from your state table to when you submitted to your event table. i dont know all the details of what your event store or your application is doing, tho :/ this is why your events record the version of the object they were acting on, so if you're subbed and you observe an event on an older version, you can know there's a conflict and decide on how to handle it.
|
# ? May 6, 2017 22:33 |
|
Asymmetrikon posted:this is why your events record the version of the object they were acting on, so if you're subbed and you observe an event on an older version, you can know there's a conflict and decide on how to handle it. do your events never span multiple objects? EDIT: and you're pushing confliction detection/resolution down to your materializer instead of making sure garbage didn't make it into your events in the first place. now youre event store isnt the one source of truth, its the one true source of some data which has to be interpreted by your application specific one true materializer. FamDav fucked around with this message at 22:49 on May 6, 2017 |
# ? May 6, 2017 22:41 |
|
|
# ? May 27, 2024 04:11 |
|
(i've never actually done event sourcing) you'd have to issue possibly conflicting events through the same source, right? otherwise there's no way possible for them to never have a conflict? do you add that kind of check at that point? like, if i can issue WithdrawMoney commands, I issue them with the version of the object I want to update, and then the thing that maps WithdrawMoney commands to MoneyWithdrawn events decides if my event is allowed.
|
# ? May 6, 2017 22:57 |