How'd you like to listen to dot net rocks with no ads? Easy? Become a patron for just five dollars a month. You get access to a private RSS feed where all the shows have no ads. Twenty dollars a month, we'll get you that and a special dot net Rocks patron mug. Sign up now at Patreon dot dot NetRocks dot com. Welcome back to dot net rocks.
I'm Carl Franklin and Emiratetry Campbell.
How you doing, buddy, I'm all right, you know.
It's the weather's been nice. Things are on the swing. I got a few more events to do. By the time this show comes out, I should be almost on the way home from the last of the spring shows. Right, yeah, I'm gonna try and spend the summer home.
Wow.
Not something I'm good at, as you well know. Yeah, that's been the goal.
Well, if you feel an itch to move to be on my side of the country, you always have a place to stay.
Well, I appreciate that. That's very kind of you. Yeah, yeah, yeah, you know. As much as I enjoy the travel, I do live in a beautiful place, and I in the summertime it is especially nice, right, right now. It's a spot pronze season, So two o'clocking can pop down to the government dock there and pick up a pound of spot prons for twenty bucks. That is amazing. I just wanted to remind you in case you were thinking of traveling to the East Coast, that two thirds of the
Monday's crew live within fifteen minutes of each other. Yeah. It's almost old day times it You guys are all close together again. This is how that show got started, I know, right, Yeah, I'm kidding.
Okay, this being episode two thousand and six, we thought we'd start with the top ten news items of two thousand and six. The Iraq War isn't going well.
Yeah you never did, yeah.
Sadam Hussein.
Winter Olympics. Yeah okay, yeah, Winter Olympics. There was something good happening to you that.
Say, Winter Olympics. Very good. Sadam Hussein bit the dust.
He had a trial first and they sent him to death and then they killed him.
North Korea conducted its first nuclear test supposedly, but well, I'm not sure if it was a fizzle or not. There was some funny chemistry there. Yeah, but they've had some successful tests since then. We think, so, yeah, Israel and Hezbollah warrant in Lebanon which continues to this day, and various with various.
On and off. This is twenty years ago, so yeah.
The midterm elections shifted control of Congress. Democrats won control of both the House and Senate in the November elections, seen largely as a public rebuke of the Iraq War and the Bush administration.
Americans don't like wars, oddly.
Enough, no, no. The Mohammed cartoons controversy worldwide protests and violence followed publication of cartoons depicting the prophet Mohammed in a Danish newspaper. That was pretty big deal. In the US, there was protests over immigration reforms and border enforcement legislation. The Iran nuclear crisis intensifies. Boy, this sounds like this year, doesn't it.
It's kind of creepy. Yeah, yeah, it's a weird. Twenty years on.
Fidel Castro temporarily gave up power.
Well he's not doing that anymore.
Raoul in charge, and global attention on climate change was the mainstream political issue worldwide. You're driven in part by Al Gore's documentary and Inconvenient Truth, which was really good and a little scary.
Yeah, had a lot of bad news to share, and you know, some of which it's it's tough to do the praditions he was doing, so they didn't quite panel the way he was talking about. Certainly we're seeing the consquatches of that.
Well, before we get to Tech in Space with Richard, let me just run down the top ten movies grossing movies of two thousand and six. Number ten Feet, That was fun, Number ons Penguins, number nine, Superman Returns number eight, Mission Impossible three, number seven X Men. The Last Stand? Was it really the last stand?
No?
They kept we kept coming around again, I know, yeah, cars, Oh yeah, that was good.
Maid Night at the Museum Rob Williams, which was kind of weird, but kids loved it. Casino Royale number three, Ice Age, the Melkdown number two, the Da Vinci Code, Oh twice as much money. It made twice as much as Happy Feet, and number one, Pirates of the Caribbean, dead Man's Chest about one billion dollars. Quite a franchise, whereas Da Vinci Code was seven to sixty million.
All right, how about that crazy?
All right? Tech in Space in two thousand and six, laying on me.
Do you know how you still can't carry a bottle of water on an airplane? Yeah, that comes from two thousand and six. Oh yeah, that's the intelligence forces figured out that there was a plan to use soda bottles to carry liquid explosives onto airplanes, and they have banned liquids ever since. That's when that started. But let's get to the space stuff.
Unless you want to buy them. Once you're through the gate, then they're okay for some reason.
Oh yeah, once you've gone through, once you've gone through security here.
Yeah, all right.
On the space side, January is a crazy month because this is when star Dust the mission we've mentioned a couple of times, because they did a bunch of different things, collecting particles of interstellar space and also partiles from comets. So it had been launched in nineteen ninety nine. He did a fly by the asteroid and Frank in two thousand and two, then flew through the plume of Wild
to the comet in two thousand and four. In two thousand and six, its sample return mission was dropped by on the Earth with those different particles, including the comet materials from Wild two that showed both water and glycine the proto amino acids for creating life. That wasn't actually the end of the Stardus mission. From there, they reper pristed to go off and intercept Temple One, which we talked about in a previous show, where deep impact had
blown a hole in that comet. It wasn't able to heat images because there was too much debris started as was able to intercept it and get those pictures. Yeah. Also in January, the New Horizons launched. That was the high speed mission to Pluto. High speed being a relative concept, of course. It was launched on an Atlas five at maximum power. Was the first time we've ever put a satellite directly on a escape velocity of the Solar System.
Every other spacecraft needed to do additional burns or gravity assists flybys New Horizons. We kept it light enough that it could just drive it straight from Pluto, although it'll still take years. In March, the Cassini mission is underway, and this is when they first get an image. They've
been taking images of Encettalists and Settlists. Was thought to just be an icy rock that was highly reflective, and in late two thousand and five and two thousand and sixty get the images of the geyser plumes, and I remember that that arguably become so important they redirect much of the Cassini mission to gather more data around that, and really and settlists will change the way we think about where life can exist in a Solar system, because
here's this little icy rock orbiting a gas giant. It shouldn't make any sense, and yet it's clearly has a liquid water ocean under its aol, which Cassini will help prove. Also in March, the Mars recon enters the orbit around March and is still operational today. In April e says, Venus Express mission gets into orbit around Venus to do
some mapping there as well. In July we get the returned the second return to flight after the Columbia disaster on Discovery, where they take supplies and crew to the ISS. In September, Atlantis will be the first mission to do assemblies onto the ISS since two thousand and two, and also December Discovery will do the same. August is also when the International Astronomical Union defines the planet and demotes Pluto to be a dwarf planet. Went to the consternation
of many and still a debate going on today. Also in two thousand and six, a small startup company called SpaceX does their first flight of the Falcon one from Amelek Island in the Quandulin Atoll. This was paid for largely by the Department of Defense under their prob Prompt Global Strike initiative, and it's supposed to fly in two thousand and five, but it got bumped out. It does not go well. It has a primary engine failure after thirty three seconds of flight and falls into the Coral Atoll.
The twenty kilogram satellite lands on a storage shed near the site. Turns out it was a break in a fuel line and it was not a misinstallation. The rocket had been waiting long enough that saltwater corrosion had damaged the pipe.
I think SpaceX is a study in how to learn from failure.
And they did a pretty good job. And they'll fail a few more times too. That being said, in this same year, SpaceX has awarded a four hundred million dollar contract to develop crew and cargo resupply for the ISS. There was considered a long shot, but that was the funding that started Faulcon nine. Over on the computing side, two thousand and six is when Jack Dorrisy launches Twitter. Oh yeah, and Google, now a public company buys YouTube
for one point six billion dollars. They'll probably make I'll just fine on that for sure. Amazon launches their Amazon Web Services with both EACY two and S three, beginning a revival of the term the cloud.
Yeah, that's right.
There's a reunion between McCarthy and Minski for the fiftieth anniversary of the original AI project from nineteen fifty six. Juliana Sans launches wiki leaks that went well.
Yeah.
Also in January, John Resik pushes out the first open source version of jQuery. Right and when she'll become very important in the Microsoft world, probably the first open source product that Microsoft ever ships in the box, so to speak, in the box twenty ten a few years away. In March, the first of the mixed conferences mix O six, where they announce I E seven.
I remember it fondly from what I remember of it, yeah.
Which should have been six years. And in May they also well and back in March, I announced Coplex. In May, Coplex goes live as Microsoft's source control or open source environment. Although it's not the way we think of open source. Then, Yeah, they're building the code internally and publishing it on coplex people to downwold, play with and provide feedback, right, and they're doing a rapid series of feedback sequences there.
It wasn't really like what gid hub would turn out to be.
No, you can't contribute code to this at this point in the cycle. And in the fall Windows Vista and a byproduct of Windows Vista dot Net three, the version of dot net that wasn't really a version of dot net more catching all the fallout of Vista. So it's still actually dot Net two, but it adds WCFWPF workflow and card space.
Yeah. Three letter acronyms.
Yeah, because they all had cool code names. Go from Avalon and Indigo to Windows Communication Foundation Presentation. Fortunate, But in that earlier announcement it mixed. They talked about w p F E as it was a Windows Presentation Foundation everwhere. And by December they will ship the first community technology preview via Coplex that they would eventually call silver Light V one with no dotinant in it whatsoever.
In my heart right, okay, yeah, is feeling it part with his finger. I remember Rory Blake, what did he say about silver Light one point zero? It's basically an animated gift downloader with an API or something.
Yeah, more or less, because it was they're really building it for Netflix. It was going to be part of the media playing system, and it was all JavaScript driven at that point. The net part will come later. Those are early days. Also launch in two thousand and six the Zoom Zoom, Yeah, the zoon. This is when a project called Monad gets renamed as PowerShell oh yeah, yeah wow.
And two thousand six also the Striking a Lot of Memories.
Oh yeah. Two thousand and six is also the year that Bill Gates steps down as chief architect and Ray Aussie takes over. And last, certainly not least, the first episode of handsel minutes mm hmmm, Ye, our friends got Handsoman decides he too needs to make a podcast, but maybe not as long as what we were doing. Yeah, and so he called it Handso minutes.
Right after we started, we were a tech ed and he was buzzing around on a segue and he would come I'm doing an interview. I'm interviewing somebody, and he'd come in and stick his head in and go podcasting sucks and drive off. And it turns out, you know, after talking to him, after he'd calmed down a little bit, he didn't really mean podcasting sucks. He met podcasts sucks. There you go. Other than what we were doing, the podcasts out there that were sort of the you know,
the start of podcasting as we knew it. We're just kind of chatty and you know, not a lot of substance. So I think he did confirm it that's really what he meant, because he went on to do handsome on it, yeah, which didn't suck.
It does not song still doesn't soun No, that's what I got, all right, Yeah, okay with that, let's roll the music for better no framework awesome? Alright, man, what do you got?
So like most times when i'm you know, grasping for straws at the last minute, I went out and looked for trending repose and this one just struck me as kind of funny. It's called closed xml. Oh. Closed xml is a dot net library for reading, manipulating, and writing Excel two thousand and seven plus files, which are xl s x Right.
In two thousand and seven is when Microsoft switched over to an XML file format for Excel and everything else xl SM.
Also it aims to provide an intuitive and use a friendly interface to dealing with the underlying open XML APIH And that's where I thought it was funny because it's using open XML. But they call it closed XML.
Troublemaker.
So it's still in early days. But you know, if that's the kind of thing that you want to go check out, go check it out.
To be able to directly read and write to an Excel spreadsheet, I can think of some trouble I'd get into with that. I remember calling calm objects to Excel on a server to stuff stuff and do an Excel spreadsheet. This would be a better way.
You think that's crazy, try using a calm object to manipulate Skype remember that?
No, thanks, We used to do that. We used to Yeah, we learned, we learned to stop.
Anyway, that's what I got today. Who's talking to Richard.
Grab the comment off a show two thousand because I thought it'd be fun to grab a couple of those. And here's a comment from his mail says, congrats boys, I became a listener back in two thousand and eight. Well, searching for share points content. Yeah, sorry, sorry, you're sorry about that. Throw all those lives ups and downs, and even stepping away from the industry, I always find myself coming back for the comfort and sense of sanity. All right,
I think your crazy matches are crazy. Here is no because I'm the sanity's always questionable. But he says, it always felt like catching up with friends. Well that's good, that's nice, thanks man, appreciate it. And so copy of music Coby is on its way to you. And if you'd like a copy of music Cobe, I write a comment on the website at dot netroocks dot com or on the facebooks. We publish every show there and if you comment there and I read it on the show, we'll send you copy of music O.
By all right, And that brings us to our guest today. Ingebrigston is a Norwegian event sorcerer, software developer, architect and his day to day job is working as a technical advisor at Nova Net. He's the creator of Kratis. Did I say that right?
Yeah?
Cretis cr tis. I got that last summer when I was in a pool and nice for.
Anyway, Yeah.
Cratus and open source event sourcing q CQRS and productivity platform for dot net. His passion lies in building quality software that improves the lives of end users, and his focus has been on event sourcing an event driven architecture since twenty ten. I'll let you read the rest of his amazing bio on the website dot rocks dot com.
Welcome miner, Oh, thank you, thanks for having me and the congrats on your two thousand kind of show milestone. It's quite amazing. I've been following you guys since I guess mid two thousands, and you saved many a commute for me.
Appreciate it.
I guess that's true. Part of the part of the allure of dot net rocks is just to hear people talking about stuff that you're doing right and using the same vocabulary.
Yeah, yeah, absolutely, it's I mean, the service you're doing is with kind of bunk. I've thought I kind of learned a lot from you guys, right, so I think a lot of people do right.
So events sourcing very very cool stuff in cqrs as well. You gave us some show notes and talking points, and you your starting story, your origin story in computers is really kind of fun. So yeah, talk about that maybe a little a.
Sure, So I guess is this is early eighties, as kind of any kid of the eighties, well who we're curious about technology got a computer, and more often than not, it was probably a commod Our computer. Right, So I started off with a I got for Christmas, like a Commodore Week twenty kind of thing and nice. The fun part is that I was living in a on the the countryside basically, so there weren't many people around, so you, well, you didn't have a lot of friends and all that.
So my best friend was actually my uncle, and he's six years older than me, so it wasn't too bad. And he had a Commodore sixty four and my dad hasn't had a Commodore sixty four. So at one point in time I just basically had a hostile takeover over my dad's Commodore sixty four because I wanted to do what my uncle was doing. Well, it was basically programming, and that got me into like, okay, so basic at first, but pretty early actually doing like assembly language on the Commodore sixty four.
Wow.
Cool cool sixty five? Oh too, baby?
Yeah?
Yeah, which did you find first, Microsoft programming or sequel?
I Well, so if you look at my history. So in professionally you mean yeah, yeah, yeah, So professionally I started actually doing games development in ninety four, and at that time I started actually doing my role was basically doing two D and three D engine type of things on different platforms like first dos Amostos games and then later PlayStation and also some Super Nintendo and much later
also Xbox. Right, so we were very early on doing so for the Microsoft part, so Amastos is one thing, but there weren't any particular frameworks or anything like that. But we were early adopters of the first Direct x one, so before Windows ninety five came out, we actually started
in ninety four starting working on it. We had the company that I worked for how to deal with Acclaim software at that point, and we were doing Dragonheart, the kind of the movie game version rate, and there was a deal between Microsoft and a Claim at that point, and we got early acts us two Direct X one.
So cool.
That's my first introduction to really kind of Microsoft, if you will, right, but then C plus plus of course at.
That time, learning the early version of DirectX that's a cruel way to start, my goodness. They were still trying to figure out what they were trying to do there, not bit blitting anymore.
Yeah, exactly, C plus plus I imagine.
Yeah, yeah, yeah definitely. And you were talking about like calm objects. That was kind of my introduction to calm objects, right, because direct x was so calm right.
Yeah, well it was bigger and heavier. It wasn't meant for gaming, that's for sure. Yeah, Microsoft trying to find a way to make because we were still kicking into Dosmo to play games right then, right, because Windows was just too sluggish for that sort of thing. There was no way, just not the way you're right to the screen.
So when I remember the engineers that I worked with that were doing Colm told me at the time was that, you know, calm, once you have an object loaded and in memory, it's really fast, you know, but it's that whole discovery and loading thing that that is slow. I remember. I think it was Garysnewsky who said, you know, Calm is this beautiful, you know, evocation system surrounded by a bunch of baroque bullshit.
He wasn't wrong, you had to interact with everything, but you know, yeah, sort of the reality.
But if you look at it, like the original idea was still very sound, because that's what we're trying to aim for today as well with like reworte procedure goals. But in a Yeah, so with service discovery and all that, that was actually with a query interface and whatnot sitting there.
Yeah, we still have to keep resolving that problem every solfet. How do I discover services? How do I understand how to communicate with them? Then how do I communicate?
Yeah?
So what got you into events sourcing? An event modeling and all that.
Yeah, So if you look at my background from gaming, what we were doing in the nine we were already at that point doing sort of event based systems. We were doing message based, right, so we were passing messages along and everything was really decoupled, like actor models stuff. Yeah, and we had like crude actor models and stuff like that. It was like sophisticated stuff that we have today. But
I was kind of I grew up in that. And at one point we actually we moved city, so my wife and me we moved city, and then the place we moved there weren't that many gaming companies, so I basically had to cut my hair I don't have much of that and get a real job. And at that point, so real job, meaning we'll get into database programming or as minor business type of things. And I've always had this inkling because I never got to be friends with
Sequel in a way. Right there was something I felt was missing or something that was wrong, and we were trying to solve things with the wrong technology right in a way, because that particular domain that I was working on was also it was in healthcare and we were doing like shift management software, so audit trails were a thing that was very very important to actually have for everything. So and then a fore later years later, actually leaving
that job, I started doing e commerce. And at that place that I started, everything was message oriented in a way, so I got introduced into like okay so MSMQ and all these kind of things, and I was like, oh, okay, this is interesting. And this is right around the time when people are now talking about like domainder of the sign. We have Eric Evans mentioning domain events, we have Market Powler doing the write up on domain events. We have
the CCRAS thing happening at the same time. It's like it's like a perfect storm almost architecturally that's going on, and I get really interested into it and we started exploring with what could this mean? Like many at that time, this is kind of late two thousands in I guess in twenty ten we actually make the decision to start rewriting the e commerce that I was on to start using event sourcing. And my background is, like I said, in the gaming industry, I was doing like engine work.
I was building the three D and two D engines, and I love building actually developer tools for developers. So my natural role was kind of, Okay, let's build something that makes the other developers productive in this new way of thinking. This is the event sourcing thing, and that's
kind of where the snowball started. It's like it's been that journey ever since trying to figure out this thing because there aren't any like out of the box like Microsoft new project the event sourcing things, So it's been evolving ever since.
Right, it's really a technique, not a product, Isn't it event sort of thing?
Definitely is it's But when you start diving into it, it's like, Okay, it's definitely a technique, and it's a mindset in a way, starting to think about state changes rather than your kind of current state. It's more like how do we got there? How did we get there?
But when you start diving into it, there there are certainly problems that could benefit from a product that actually or a framework up would solve it once for like sure compliance and all these things, data integrity, all these small little bits and cases.
Right, So at the application level, at the application level, you just do an update, but under the hood, it's really writing a new record and dealing with all of that stuff in a query the same way.
Yeah, yeah, definitely.
So is that kind of what your product is centered around?
Oh yeah, yeah, absolutely. So if you look at Creators, it's a full open source solution. There's kind of different products within it. Right, so you have the thing that's centered around event sourcing purely is called Chronicle, and it's a sort of a database solution. Although the storage engine is not something we own. We don't really care about the storage engines, so we're very agnostic and right now we support like Mongo and pascrus ms SQL and seql
light as the underlying storage engines. Right. So on top of that, we've built a reusable server component basically that deals with all the heavy kind of hardlifting. Heavy lifting, I mean, for what we think is important problems to solve within event.
So what does that look like? What are my tricky problems here?
Well, if you start with well simple things like projecting, because one of the things you need to think about is like, okay, we're appending events as they go, right, So every time there is a significant domain well change i would say yet state change in your system, you
would be appending that event. But for some scenarios, it doesn't make sense to go and actually replay those events just to display a list, right of something like a master detailed type of scenario where you want to display a list of things that you've recorded, like employees or something like that. So what you want to do is like materialize that, and that's what we do. We've got something basically projections. It's part of kind of event sourcing, and what you do is react to the events that
occur and write the current state. And what we've done, for instance, is instead of having to imperatively go and write that code that does that, because that can be very complex when you start having complex models, what we've done is create a projection engine that basically can let you do relationships like you have a parent child relationships. You can join things and from all these different events and ordering doesn't really matter. It will just figure it out and do the right thing.
It'll just populate what it gets.
Yeah, basically, So that's one thing that we're kind of very proud of solving because what we're trying to do is democratize the events sourcing. We're not trying to actually build something that is for the event sourcing geeks, although we want to maintain a good relationship with those as well, so people that know event sourcing they also should feel well right at home. But what we want to do
is basically, well, make event sourcing easy for everyone. So that means we need to make something that feels a little bit similar to what they're used to. So if you're in a dot netspace, if you're used to like NTO the framework, how can you produce events but easily project So what we got is, for instance, like attributes that you can put on like what we call a read model, the thing that we actually materialize. You have
attributes that feels a little bit similar to antiy framework. Right, just to saying from that event and all of a sudden you've lowered the threshold for starting right and the entry barrier basically for getting started.
This sounds very brown field friendly. That I could take an existing application is start putting event streams into it and surface it in a form that you're already familiar with from regular database retrieval.
Yeah. Yeah, so it's kind of similar with when you talk about like brownfield. Again, there's also the need for actually integrating with the brown Field systems because brownd fast systems and producing events. So one of the data that we also have built into it is a changed data capture language. So what you can actually go and do is it's basically the reverse of a projection. So how can we go and define state changes happening in a database or an API, and when list in this field
changes together, that makes that event. Right, So we also got that covered right, so that because that's super important, most products out there or projects out there aren't greenfield, so you need to kind of think of that as well. How do you sure how do you get people to start using it in a brown field scenario?
Well, yeah, and it strikes me that you're going down the wrong path with your existing application trying to stuff data into databases and so forth, and realize actually, you know this is probably an event sourcing pattern solution, but I don't want to start over.
Yeah, But also when you're doing that brown field thing, you really kind of have to commit because on one day you've got regular tables and rows and records and stuff, and on the next day, what you have an entirely different set of tables that you now have to rely on. So you have to switch. Like it's It's not a piecemeal thing, isn't.
No, absolutely not. So what you tend to do with like when you have a brownfield, what you can do is like produce the initial event. So let's say you have you want to transfer something over and you started like rewriting stuff and starting to produce events, but you want that initial load. You can create these events that represents that initial load that will be okay, this is important event almost right, So you're importing the data that's
already there as an event. Because one of the things that you you don't have to but I would strongly recommend thinking about it is the replayability of these things, because that's one of the biggest traits I would say with event sourcing is the ability to actually replay at any point in time. You can from a deburging perspective or developer, and you can actually replay from a point in time to a point in time and see what happens. Right,
So it's that power that you're looking for. It's the and that gives you a lot of power.
So not for the developer that replay has to be fast, doesn't it. I mean that's been early event sourcing. You know you'd have to sit and wait for all those things to be calculated. How do you deal with that exactly?
Yeah, that's actually a good question because it's one of the things that we also see as important to solve, right if you want people to adopt us. So what we built into the thing is as a replay mechanism that will actually pull it will do it in bulks, so any things into the memory and do things in bulk, and do it fast, right, so you can replay pretty fast.
And what we're also looking at like optimization because we have since we have that projection engine that we think will cover probably ninety plus percent of the use cases, we can do that manner so that means we don't have to call your code. That means we can do everything in the server. So doing a replay is basically in that server and are the entire architecture. Our server is built on top of Microsoft or Leans, so we can actually scale that out. Okay, so we can do that, and we.
There's your actor actor model coming back to exactly.
So finally back to where I was like thirty years ago. So what that gives us is the since we do a replay per petition, and petition for us is more like think of it as the primary key, right, So if you have things that are related to one employee that will typically have a unique key in the system, that's the event sorce ide and that's the primary key that we will use for replay. So we will then replay every one of these keys individually and in parallel and just let or Leans scale it basically.
Good.
This seems like a good time to take a break, so we'll be right back after these very important messages. Don't go away, and we're back. It's not in at Rocks. I'm Carl Franklin. That's Richard Campbell, hey, and we're talking to Einar Inga Brigson's about his creatus and specifically we're talking about Chronicle, right, because as you said, there's several parts to create us. So we're talking about the events sourcing.
Yeah, so you could kind of circle back to the other things if we get time. But I think the if you look at what we're doing with, you asked the question of what are the problem or the hard tough problems for solving? Right, So I mentioned a couple of hours like projection, replay and all these kind of things, But one more specific thing is something like compliance. If you look at compliance and PII, right, being European GDPR and all that, there are certain rules for how you
actually manage data. So one of the things that is tough, well disregard event sourcing is tough actually in regular applications
as well, how do you deal with PII. So what we've landed on is like, so if you looked at the GDPR rules, there's this concept of pseudomization, like you had to go in and represent Well, you can either like put data in a different data store and have like a pointer to it and that's your I don't know, your token that represents the other thing or what we've decided to do is actually encrypted and we want to encrypt it not as a there's one key for the
entire thing, but there's a one key per subject. So if you're dealing with the events that's related to like a person, that's back to the primary key that was talking. Again, the event source ID would be the default for that, but you can also specify a subject ID if you want to, and we then general a key per that subject.
That means when our user comes and say, hey, I want to be forgotten, which is one of the GITA TDPR things that you have to actually implement, we can go and then just throw away that encryption, right, that's the crypto shredding. Yeah, but not lose the history. So we will still have the history, but we would will not be able to see the properties on the event. Well, we will see what happened, right.
That's very smart. It's kind of a shortcut if you will sort of macros into specific things.
So those things are kind of hard to solve in a consistent way. And when we're thinking about these things, we're thinking holistically. So how do we You shouldn't as a developer need to think about these things. We should just depend an event. And what we do is we have this attribute called PII, So you can add that
attribute to a specific property. You go and added to what we call a concept that the main concept, which is basically a value type, so a record that represents that value, and once you add the PII onto it, we will encrypt that automatically for that subject. And the beauty about it is that if you use that same property or that type on a read model, we will decrypt that automatically for you. So for you as a developer, this is completely well, you don't have to think about
it as just yeah, transparent for you. Right. So it's those kinds of things, and that's where we're playing a little bit into that arc side of things because we need that to fit together as a kind of holistic model with an application model that supports it as well. Because Chronicle has one purpose and that solve event sourcing problems.
While there are more problems. That's not calling problems so challenges of course in this space and kind of if you think of about consistency for instance, like eventual consistency is a definite thing that you need to think about, and also when you think about venture consistency because when you're appending an event, there could be well depending on your system, but million seconds before the actual projection has happened and they read model is consistent.
Right.
So one of the things that you need to think about then is the UX. How do you deal with UX for a good develop user experience for the for the end user, well, you want to know when that happens so you can actually update the data. So that's where the arc part of this story. The second product comes in and helps with doing like formalization of commands
and queries, and you can do like observable queries. So instead of having you know, like signal R where you have these singular hubs, instead of thinking in those technical distrac actions, you basically go in and you just create
these queries. You can either do it with like ASP dot net regular like well gets basically and as long as you return an I subject or you have an ASYNC numerable that you return, we will automatically interpret that as a observable query and add a well either a web socket or a service center events endpoint for that automatically. And what we then do is we've focused on on I guess the biggest framework front and framework in the
world right now is still React. So what we've done is focus on how can we make a good developer experience from a dot net back into a react front und So we've created then a thing that generates kind of boilerplate code to link this up. So then don't have to think about the transport, because the transport is just an abstraction. Is something that should just be there.
Whether it's HDDP website, is AHDB two service center events, gRPC web or whatever it doesn't really care about, you should still be using the same abstraction basically being your queries.
So when you think you're going to become a real programmer, just curious. I mean, the stuff that you're talking about here is so advanced from and so out of the realm of most you know, forms over data programmers, Like, this is real stuff here.
Thank you.
That's amazing. I don't think you could vibe code it.
But I also begs the question like will and LLM simplify some of this help you put the right pieces in the right place.
Yeah, So we've been very hard the last year, especially as everyone else kind of focused on kind of the web coding side of things. How do we how do we make this easy to do? In in that sense, how do we help developers actually use llms to actually build this. So one of the things that we really like is the I guess you haven't had Adam dimitric on talking about event modeling while yeah, yeah, yeah, So we really like that idea. It's a it's a really
good idea to actually represent software and design software. And it brings with it this a whole idea of vertical slices, and that is super helpful when we talk about LMS being kind of confining the LLLM to these small, tiny, very focused vertical slices. And what we do is also promote the idea of actually having the front endcode and the back end code and the same slice in the same folder and actually make it very high cohesive like that.
And with that and all the stuff that we've done, it's like we've created skills and we created instructions and all this stuff to make it easier. We can crank out really fast with the customer that we're working out right now. So it's creating a new feature is super simple. And what's also really nice about it is that what's different with if you look at like a credit application, you basically have like your your nouns in your database.
But what we have is very clearly named events saying something very specific to what kind of state transition is represented in the system, and the LMS eat this bide up like nothing, right, So it's kind of easier for it to actually understand it because they can see the process.
Yeah, it's declarative, right, it's got the descriptive so the tools should be able to grab it.
Yeah. Absolutely. So we've had great experience with us and helped us a lot, but we're doing something new now as well because the event modeling is something that we really believe in and we're building out this I don't know if it's call it a lo code kind of thing where you basically it's an editor for event modeling where you can actually dragon drop things and you can create the flows, the event modeling flows, and basically click play and it will be a running application because we
have we have the engine, and what we're mixing into.
Is like VB for event sourcing exactly.
I yeaes VB. It had its place. I did actually say that a few years ago to a team at a place I worked. It's like if you look at VB and if you look at wind forms and later what we had with the expression Suite right, Microsoft Expressions. What they did there was really really, really great. So we lost all that and then years later fakemat comes and they're not, in my humble opinion, not even remotely close to what we actually lost. So what we want to do is kind of well, bring back some of
the goodness from the old days. Like we have all the UI designers and all that, and you can do data binding, combine it with the flows where you can actually design the commands and the events and the read models and all that, and the rules and relationships and whatnot, and also on top of that be able to describe if you need something very custom you just put a description there for the LLM to on top of the generated code that we do to actually go in and
modify and make it exactly how you want it.
Nice. Yeah, and I could see, well, this whole studio idea, it's like half the time you're drawing on the whiteboard the event sourcing flow. Anyway, the fact that you have a tool that would at least to help you visualize and then also implement it's very powerful.
Yeah. So for us, it's also important that what we generate as code, right, so you can.
Then truth is what you're generating in r truth in the code exactly.
But then the developers can take over or your AI or whatever, because then you at least have a starting point that's you got there faster and you went down the right path more of deterministic because because lms are notoriously non deterministic. So yeah, this is a combination of deterministic and then AI on top. Right.
Well, and I've found already with folks that are being successful with these tools that the more constraint you put on, the better they get. So the idea that you essentially, almost from an architectural level, are defining these event workflows is setting constraints around the LM to work within those architectural rules rather than letting it run roundant exactly.
Constraints are a good thing actually, so I know, it's totally.
They're good good for people too, write Like software problems get a lot more coherent when you've got a box to work.
In, exactly.
So constraints liberate Yeah, yeah, you know what you're working in. Yeah. So did we talk about versioning?
No? No, no, So that's another thing that is a thing that you need support for. So think of it as you already do this if you if you think about like anto the framework, you do your EF migrations, right, so you have your table and you oh, I need to add a column to this table, and you do another version. And so what you need to think about these things in event sourcing or in general in events
basically as well, So how do you version that? And what it's no different what we've done is basically very similar to how you do with antidy framework. You basically go in and create this migration like up and downs that says, when I'm going from this generation of this event to this, I'm going to have, well, this new property, I'm going to default the value to this, I'm gonna maybe I rename the event or things like this, and you can
also like merge properties. But what you're doing is you're doing it at a much fine grain level, so rather than like a table, you're actually doing it on each individual event. And the interesting part that we see is that most of the time you don't really need these things because if there is a change, it's usually because you're doing some change to the domain, which means you're introducing a new event or you're retiring an event. So
you stop producing an event. So, because if you get to the right level of modeling these events and don't fall into a few traps with like credit events types of events, you basically end up with these small atomic state changes that's going on. And it's not that you necessarily need to kind of do these migrations.
The problem once you do that sort of thing, isn't that break replayability. You've introduced a new event requirement or you've removed one that's going to be generated in an old replay, Like, how do you tolerate that?
Excellent question, So you're putting me up right, job. So of this is actually so when we started designing this whole thing, we had to think about these things that everything had to be version. So what we do is actually when we append an event, we append for every version of that event. So that means when we append one event, we actually if there are different versions of it,
we migrate it during appending. So that means if you're appending a version three, we will actually downgrade it automatically
to two and one. And the reason we do this is because we want to be backwards and forward compatible, right, so we can then be able to actually replay it to Let's say you have two different clients using the same thing at different levels of versioning of those events, you can actually still have those running like think micro services or things like this, you can still have them running side by side and still be able to produce or consume each other's events because of this, So we
store it version and we just handle it because well, of course you might be lagging behind on the migration, so we will then migrate on the fly for.
You sun And of course, again we're talking about real life software where you're not always going to have the latest version everywhere anyway. Yeah, exactly, so you just you might as well build that tolerance in for old versions are always going to be around. Arguably, old visions never actually go away. You spend any time living on you know, generalized message bus with a bunch of you know, different groups making tools onto that bus, you quickly figure out
do not try and synchronized versions. That is the path to doom. Tolerate the fact that some the different folks are going to upgrade at different times. I got to live together, and even when it was a common code, I had one where we had a common code base, but different administrative teams just weren't going to upgrade at the same time, so we could never the possibility of
retiring a version of anything. You know, like how it was one of those things where we're, you know, once a quarter we do a report of how many V one messages did we still get this quarter? It's like, how many quarters of zero before we believe we can actually turn this off?
Yeah, yeah, yeah exactly, And you're basically you don't want to have that problem, really, so you want to be able to deliver software as fast as possible. So the okay, I know there's a kind of upgrading when it comes to microservices. People are kind of going away from that and talking about modular monoliths and whatnot. But if you go back to the idea of actually splitting up software, the whole idea behind microservices weren't a technical problem per se.
It wasn't like, oh, we need to scale. I always saw it as a way to deploy software and be able to deploy different parts of the software at different cadences. Right, So I want to just do that, and if you want to accomplish that that this is much easier if you actually then go to this level, this fine grain level and then have the versioning at this level.
Yeah, yeah, and have it available a time. We sort of came to conclusions like, you know, it doesn't hurt anybody. Software that nobody ever runs, you know, like it just it didn't matter, right, Like why are we turning that off? What are we saving disk space? I got enough disk space, dude, Like we'll be okay, right.
Thanks to big data. Of course, thanks big data too.
That's what that is. But you know, it was also getting to a place where, hey, if an old message like that shows up, it's sitting in a queue anyway. You don't have to have a V one instance up and running. They can wait while you light it up and spin it and let it process the message and finish its results and then shut off again.
Yeah, very cool. So do we talk about all the parts of Creatus that you want to or I mean there's some other things there. Components and tools and documentation? Are those the two main thing.
We're pressing press we pressed against components from the React perspective, Yeah, the studio is the cool new I think we're there.
Yeah, it's uh, that's a fairly.
Anything else you want to talk about before we sign off?
Well, I think we've kind of covered the most important bits. Of course, there's the devil is in the detail. There's a lot of details if you look at your pro and the docs there. And but I think if well, if people are curious about this, well join our discord. We're always there. Uh well, poke me, ask me anything. I'm readily available. And yeah, if there's anything wrong with our documentation, samples, whatever, we're here to help.
Awes fantastic Ironer. Thank you very much for joining us on dot neir rocks today.
Well, thank you guys for having me.
You bet, and we'll talk to you next time on dot net drops. Dot net Rocks is brought to you by Franklin's Net and produced by Pop Studios, a full service audio, video and post production facility located physically in New London, Connecticut, and of course in the cloud online at pwop dot com. Visit our website at d O T N E t R O c k S dot com for RSS feeds, downloads, mobile apps, comments, and access to the full archives going back to show number one,
recorded in September two thousand and two. And make sure you check out our sponsors. They keep us in business. Now go write some code. See you next time. Got J Middlevans.
The summer time that means is home.
Then my Texes in line resin
