Speaker 1: How'd you like to listen to dot NetRocks 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 will get
you that and a special dot NetRocks patron mug. Sign
up now at Patreon dot dot NetRocks dot com.
Speaker 2: Hey Carl and Richard here with your twenty twenty four
NDC schedule.
Speaker 1: We'll be at as many NDC conferences as possible this year,
and you should consider attending no matter what. The Copenhagen
Developers Festival happens August twenty sixth through the thirtieth. Tickets
at Cphdevfest dot com.
Speaker 2: Ndcporto is happening October fourteenth through the eighteenth. Tickets at
Ndcporto dot com.
Speaker 1: We'll see you there.
Speaker 3: We hope it's dot net rocks. You scared you didn't I?
Speaker 1: You know?
Speaker 2: Said John Cleary the other day. He's so good, absolute monster, gentleman.
Speaker 1: He is so good. God, I love that guy. Anyway,
you're listening to net rocks. I'm Carl Franklin and I'm
Richard Campbell and we're here for the nineteen hundredth and
eleventh time. There you go, nineteen hundred and eleventh time. Yeah,
so it's gonna be a good show.
Speaker 2: World War One has begun, there you go.
Speaker 1: Yeah, Archduke Ferdinand has been assassinated.
Speaker 2: Yes, after several tries, and then he kept going out
again Like what were you thinking? Doesn't matter? Now here's
a grenade.
Speaker 1: Oh, such fun with history we have. Let's start this
show off right. We better know a framework. Awesome, bar man,
what do you got? This is my official first announcement
of an album with only five tracks that I have
kept under wraps since twenty thirteen. Wow, I've just been
waiting for the right time to release it. They have
told me no, but I think you might have heard it.
So this is an album of instrumental groove, chill jazz
pop that I did with my friend Doug Wolverton.
Speaker 2: Oh wow, okay, I know Doug.
Speaker 1: Have you You've heard these songs right? Long time ago?
Speaker 4: Ye?
Speaker 1: So. Doug is a trumpet player. He's currently playing with
Kenny Wayne Shepherd on tour, and he's a protege of
Kurt Ramo, who plays with Bruce Springsteen in the EA
Street Band and Kurt actually gave him connected us and
we've been great friends ever since. Doug's played on my
albums and my videos and you can see him at
Franklin Brothers band dot com on a couple of videos.
But anyway, we got together for about year year and
a half there and we just started making music. And
this is the I'm not I'm not just saying this.
This is my favorite project that I've ever ever been
involved with, produced, written. All the music is just like
it's all original. You think you've heard it before when
you listen to it. And the name of the album
is It's the Tone. It's the Tone, and the artist
is Franklin and Wolverton. It is available everywhere you get
your music, or it will be by the time this
comes out.
Speaker 2: Okay, so spot, you've finished your work now?
Speaker 1: No, No, the production work was done. Really, I've just
been sitting on it and waiting for the right time.
And I released it on my fifty seventh birthday. Wow,
because that is my father's fifty seven when he died,
so this is a special year for me to survive.
And so when we were making this music and I'm
sorry to just keep going on about it, but The
mantra for us was not listen to these notes, right,
which a lot of music and musicians and performers they
have that in their mind. Hey, check out these notes
that I played. But it's listen to this tone. It's
all about the tone. So it's the tone. Go get
it and let me know what you think of it.
Everybody send me some email. That's it. That's what I got.
Speaker 2: Cool, all right, we'll put the link in the show notes.
When there's a link available.
Speaker 1: Yeah, there will be. It's thetone. Dot com will be available,
but you could just you know, search your favorite music
solution for that. Who's talking to us today, Richard?
Speaker 2: I grabbed a comment off a show's nineteen oh six.
Just back in July, we were talking to Joe Finnie
about WPF. This particular comments from John Dyer is only
little while ago, where he said desktop is dead.
Speaker 1: Is it true?
Speaker 2: It really seems so? And Richard almost said so on
the Lowie Blazer show back in nineteen oh three and
again this show it's danced around. I worked on a
dot net app started in the very beginning, shipped on
one point zero. It was a fun mix of wind
forms in WPF with the new UI and WPF. I
don't think it was WPF at one point. Oh, that
wasn't around till three point five. But you know, details,
did we make a big mistake migrating to dot net
core because now we're forced into the upgrades as versions
go end of life. Additionally, stuff that was automatically patches
now in packages, forcing us to release new versions for
co changes and on ours, mainly if it's security related. Okay,
I'm done whining. It's been a fantastic ride.
Speaker 1: Time to move on.
Speaker 2: I mean, I've been dancing around the issues with desktop
apps because I don't believe they're dead. They might be
pining for the Fjords.
Speaker 1: You know that. There's just something I got to say here.
We have gone out of our way to avoid saying
never use this, it's dead, don't use that, use this instead.
We don't do that here. No, that's not what we do.
We don't. Even if you think that we're hinting at that,
you're wrong.
Speaker 2: Yeah, it's not what we mean. I mean, we're not
communicating with it's not what we mean.
Speaker 1: Yeah, exactly.
Speaker 2: But I mean what I'm abundantly aware of, and I've
done it on the show and you've seen me do
it is that there is a whole bunch of different
desktop tool sets out there, which to me says it's
an unsolved problem. Nobody would bother making an Avalonia or
the silver Light as a web assembly solution open silver
You know, why would all of this exist except that
people are trying to find a good way to build
desktop apps. Microsoft wants it to be Maui, but Maui's
still growing up. You know, it's still a little kid, really,
And certainly they've seemed to consolidate a bunch of stuff
around that, which is interesting, but it's bloody challenging. And
when I wear my IT hat, you know, I'm the
guy who looks at you when you want to deploy
software and says you want to do what? Because browsers
are are a good security context, So you know, I
know the barriers for deploying software is hard. You've got
to really demonstrated reason for software to be built that way.
Speaker 1: And we said this on that show. We said it
a couple of times that the browsers have already figured
all this stuff out right.
Speaker 2: Well, a lot of stuff. They're also bad at some
important things too, Yeah.
Speaker 1: But they're at least consistent across the main three browsers.
Speaker 2: Especially when you're talking about running on multiple platforms, which
is the real life that we're living in today, right
Like it's a heterogeneous client world, and then building multiple
clients it's hard, which I think is going to lead
us to our conversation today. When I think about no
code low code solutions, it's about solving client problems. We'll
get into that. So, John, I hope I cleared some
things up for you. Thanks so much for your comment,
and a copy of music Cobey is on its way
to you. And if you'd like a copy of music
cod by, I write a comment on the website at
donn at Rocks dot com or on the facebooks. We
publish every show there, and if you comment there and
are reading the show, we'll send you a copy of
music co buy.
Speaker 1: And people are still buying music to coy and it's great.
I see you know. Orders come in every day or
so a couple of days.
Speaker 2: I've sent out a winner pack the other day and
I got a message back a little while later. It's
like I already had like the first eight, but I
like the new ones, so they were excited to use
it very good, good.
Speaker 1: All right, Well, you know you can follow us on
Twitter ex Twitter, I think is what I call it
now ex Twitter, because it was Twitter and now it's not.
It's something else. And we've been there for years, of course.
But the cool kids are hanging out on mastadon. I'm
at Carl Franklin at tech hub dot social.
Speaker 2: And I'm Rich Campbell at masadon dot social.
Speaker 1: Send us a twote. That's another way that you can
get yourself copy of music to God by absolutely all right.
Let's bring on our guest season. Software developer, architect and
entrepreneur with a quarter century of experience building large scale
enterprise applications for major telecommunications and transportation companies with dot
net and type script. Serge Sarah Fudenov is the creative
mind between Zomega dot net. That's x O M E
g A dot net, Zomega dot net, a low code
platform for dot net developers, and the open source Zomega framework.
Off the clock, you can find him across the net
developing his backhand and forehand and serving up aces on
the tennis court. That's a very nice bio. Very good.
Speaker 5: Welcome, serge, thank you, thank you so much. And thanks
for inviting me here. I've been a longtime listener of
the show, and now it's an honor to be a
guest here.
Speaker 1: You're welcome. When I think about what's on the minds
of our listeners when we talk about low code or
no code stuff, you know, a lot of them are
our age, and by our I mean Richard's and my
You look a little younger than us, but that's neither
here nor there. And they've been through a lot of
these things, and I think people are rightly skeptical of
these especially when you think of our experience has been.
We jump in, we're very productive, We get going, and
then oh, we want to modify something. Oh does it
allow me to No, Now what do we do? So
get it? Hitting that brick wall is what I think
everyone is afraid of. So with that in mind, the
floor is yours. Give us the pitch.
Speaker 5: Well, yeah, when you ask silicon vallee entrepreneur like why
they're building their product, oftentimes you might get an answer
to make the world a better place. With Zamiga, I
would say that we want to make the world a
better place for dot net developers and their clients.
Speaker 1: Very good. So, and let's face it, really, Silicon Valley
doesn't want to make the world a better place. They
want their bank accounts to be a better place, better place.
That's really what they want, right.
Speaker 5: Yeah, And with the other tools, there are a lot
of other tools and local platforms that try to help
you build your applications faster. What Zmega tries to do
is to help you build faster, high quality applications with
the best practice architecture, with the consistent user in phrase
and user experience, and that are easy to maintain and
get that you know, future proof, so that you can
easily change it, you know, and migrate to a new
framework or technology once that comes along. And given the
current pace of technology, you know, like if you start
a new project, a big, large project multi year with
a brand new framework, you know, brand new technology, cutting edge.
By the time you finish it, sometimes this framework is
already obsolete. You know, it's already you know, it's history.
Speaker 1: So does Zomega use sort of black box things or
does it Is it a code generator or a little
of both? Like uh, I'm I'm more on the side
of code generation because then I can at least look
at that code, see it, modify it, put in my
points wherever I want. What what what's the experience?
Speaker 5: Like, Yeah, this is a code generator. It generates code,
but you know, like the typical code generator, like there
are source generators, they generate code that you does not
user friendly. You don't want to read that, you know,
you don't want to You can go and debug it,
you know, if you.
Speaker 1: Want to write only code.
Speaker 5: Yeah, but it's basically isle of you know, gibber is
that you don't want to look at, right, And what
we do here is the code it generates is basically
the code you would have written yourself down to, even
like the comments, you know, it has the comments structured.
You know, it's a formatted like this is basically saving
you from writing that code like the boilerplate code as
they call.
Speaker 2: So and then that means I can edit it because
I can probably read it. But does that mean and
it's no longer manageable? Like what happens now?
Speaker 5: Yeah? And yeah that's a major question. You know, once
you generated, you know, can you touch it? And the
question the answer is no, generally you don't want to
edit it.
Speaker 2: Right because you do want to be able to regenerate.
Speaker 5: So yes, exactly The idea behind it is that it's
designed in such a way that it provides customization points
for you. You can subclass, you know, in a variety
any methods. You can even insert your code in certain
places like to customize it.
Speaker 1: Right, that's what I wanted to hear. Yeah, but you
because you know, a perfect example is if it's creating
an API controller, right and it's injecting all the stuff,
but you want to inject something else. Yeah, you know
what I mean, now you've changed it. How do you
do that?
Speaker 2: Yeah?
Speaker 5: That's the kicker, you know, Like you want to be
able to regenerate, like make changes, and that's going to
be so easy on the maintenance theant because okay, you
can just you know, go and change the underlying model
that's generated from I.
Speaker 1: See, and then regenerate. So it's not like you're messing
around with the code at all. You're still working with
the model and the code generator. But you can do
can I say anything that you can do in code
with the model generator?
Speaker 5: Pretty much?
Speaker 1: Yes?
Speaker 5: I mean sometimes, like with the UI views that you generate,
you want to change the layout completely and you can
just you know, say, okay, I'm going to take over
that file.
Speaker 1: And yeah, there's architecture issues too, right, I mean, if
you start out with a client project and a server project,
a web project, let's just say, and then you want
to sort of tout to put a shared project in
between those that has some models or some things that
do stuff. Is that something that you can easily modify
in your model designer?
Speaker 5: Yes, yes, the model allows you to change like actually,
it makes you kind of like model your application, like
you build your domain models, you build your service models. Yeah,
even the presentation models. And that's all like an XML.
I know Carl's feelings about XML, but.
Speaker 1: Hey, as long as I don't have to edit it,
I'm fine. Yeah.
Speaker 2: Yeah, you can generate all the XML you want. I
don't have to read it. I'm happy.
Speaker 1: Yeah, I can use you you I to do that, right.
Speaker 5: Yeah, but I mean it's it's still nice. It's an
experience for developers to update the models. But then you
generate pretty much like the entire applications, like all delayers
from the business services to like interfaces, view models, views,
and you can do like tons of other things you
know that you can generate. It's extensible, so you can
bring more generators to generate.
Speaker 1: So you really focus on the architecture and let the
model do the dirty work, the model designer.
Speaker 5: Yeah, and the the idea behind the platform is that
it will allow you to generate to use the architecture
with the best practice development practices baked into the development process.
Speaker 1: So it's opinionated.
Speaker 5: Yeah, so yeah, I mean, you know, like separating business
logic the UI logic. It's been around for a long
long time.
Speaker 1: Yeah. I didn't say it was bad opinion.
Speaker 5: Yeah, people have been moving to like multi tier applications
back in last century and there was service oriented architecture,
the main driven design.
Speaker 1: Welcome to the history of dot net right here.
Speaker 5: Ye, lean architecture, et cetera, et cetera. And these are
all good best practices as long as you follow them.
Speaker 2: Right right, don't get technical. Now, we waived at it
at least.
Speaker 5: Yes, But oftentimes what happens is like, as a developer,
you get a request to like build a new application.
You know, you start with a prototype, build like a
proof of concept. You go quick and dirty, and then
you work on this demo, make try to make it realistic,
and then the demo goes well, you know, in fact,
so well that people, the stakeholders don't even realize that
it's not a real.
Speaker 2: Thing, it's a demo. Yeah, they want to employ it.
Speaker 5: And then when you come back to them like asking
like all right, we need you know, the big budget,
you know, for actually doing it properly, they would say.
Speaker 2: Like, what do you mean, I already saw the demo.
Speaker 5: It's done like a share We've seen it working, you know,
like it just fixed the rough edges and you know,
And that's how a lot of projects end up being
because I mean, maybe you'd be okay if you just
hand it over to someone else, you know, and making
someone else's problem. This is just going to be turning
over technical debt, and the technical debt will come do
fast because the maintenance will become a nightmare, you know.
The changing the architecture will be next to impossible. Migrating
to a new U I framework will be problematic if
the business logic is mixed in with the UI logic,
so you may end up having to do the full
rewrite if you need to modernize your system down the road.
And I guess the issues with you know, using the
best practices is that people need to have some learning curve.
You need to have knowledge developers that are familiar with
the best practices. There is sometimes too much ceremony, you know,
with all these interfaces that you have to build on,
implementations and everything, and that eventually is the upfront investment
that you know, business needs to make, and sometimes they
are not willing to and so Omega is trying to
alleviate that and bake in, you know, the best practices
at the fraction of the cost by enforcing these architectural
principles and generating you know, all the code for you
so you don't have to manually maintain all the interfaces
and stuff.
Speaker 1: So can I ask about the different types of dot
net projects that you can create? Is it all core
only or do you also support dot Net framework apps?
Speaker 5: No, it's actual it can do anything. We started it
a long time ago and it actually held the well,
you know, over the years. We can talk about the
history you know it came to be, but.
Speaker 1: I think anything pretty much covers it. Yeah, so it'll
generate a Python app.
Speaker 2: Is that what you're saying?
Speaker 5: Anything, Well, it can if you need to, but we
have the we have a generated typeescript.
Speaker 2: Okay, so fully web if you want to go that way.
Speaker 5: Yeah, you can do anything. We just happened to use
dot net and have dot net framework that is the
most advanced there.
Speaker 2: So what clients can you produce for me?
Speaker 5: Right now? It supports from WPF web forms, a sp dot.
Speaker 1: Net, Blazer. I saw.
Speaker 5: The SPA applications script, Blazer server and Blazer web assembly
and the unified Blazer.
Speaker 1: Uh all right, So here's the question that might stump you.
Maybe I'm hoping it doesn't. Authentication authorization. In the various
models and scenarios that with which you can do that,
are they all supported?
Speaker 5: Yes?
Speaker 1: Uh?
Speaker 5: Not? Well when you say all that's a big statement.
Speaker 1: Okay, Well, you know you have the individual accounts using
Microsoft Core Identity, you have Identity server that can put
itself in there. Sometimes, you've got M S A L,
You've got what do they call azure B two B
now as your ad A D B two B intro
and yes, yes, so all of those things, and then
you've got O I D C, and you've got open connect,
and you've got all these protocols and things. Uh, is
are you wizarding that for me? So I don't have
to know all the details of these things? Are you
helping me get the stuff that I need to have
in place.
Speaker 5: Yes, So Zomega dot net is a visual studio extension, okay,
and it's it has a project template for creating new
solution uh where you have a wizard that allows you
to pick which architecture you want to use. Uh and
UH the initial solution template that it generates now for
Blazer UH and I think other solutions as well include
the authentication and authorization support. Like out of the box, UH,
it's the default is the user and password just you know,
to get something started. But there is obviously you know,
if you have services hosted, like is the rest API
or a jw T token. Uh. There is if you
use a different communication technology like w c F, they
have their own like identity model that UH needs you know,
the authentication UH, and there is the Blazer server is
a little different because it's like called server side, but
there is a you know, signal or circus running and
it's not easy to set the kookies like the authentication
cookies and send it back to the client. But we
actually solve that so that you can build the same
log in experience and it's going to work the same way.
Both in Blazer server and Blazer web assembly.
Speaker 1: Wow.
Speaker 5: You know, under the hood it's going to go like
call an API and point for a web assembly or
for a Blazer is going to run on the server side,
but it's all like hidden behind you know, the interfaces
and different implementations.
Speaker 1: Well that sounds good. I mean anything that will give
me some sort of guidance and assistance and either making
those decisions, which it sounds like not like it's not
a guidance wizard, but you know, help me with the
plumbing of implementing those things which are always changing and
always moving and have different requirements.
Speaker 2: That's good.
Speaker 5: Yeah, because there are so many different ways of you know,
the doing security and authentication specifically, we kind of just
you know put it all in you know, right.
Speaker 1: Yeah, yeah, sure.
Speaker 5: You Basically a sp dot net core is specifically just
allows you to like add one line like a you
know Facebook authentication, Google authentication, you know Microsoft. So that's
just you know, one line that you add and you
should be good to go.
Speaker 2: Like, but I got to think you're talking about a
typical app for Zomega. It's an internal app, right, and
replacing an old ASP dot webforms AP. Things like that like,
they're going to have an internal authentication strategy you're going
to need to support, right, Yeah, it's probably not going
to be Google or Facebook, I'm betting.
Speaker 5: Yeah, it's going to be some sso if it's a
big company, but.
Speaker 2: Yeah, it's going to be active directory or it could
be Google or Facebook.
Speaker 1: You never know, pretty sure, pretty.
Speaker 5: Sure, Microsoft authentication might be there.
Speaker 1: You haven't met my customers, Richard, That's true.
Speaker 5: Sometimes you just need something, you know, to athentic case
of password and user name. Yeah, like a speed up
net identity will be fine, you know, just to get started. Sure.
Speaker 2: Yeah, then it's always question of how much challenge it
is retrofre to new security profile and yeah after the fact.
But if I'm living in generators, it shouldn't be that hard, right,
I should just be able to indicate the few changes
and then regenerate and hopefully all the good things happen.
Speaker 1: Right. It's a big leap of faith for your average
programmer that loves to write code. Yeah right, I'm writing
code though, Yeah, I'm no longer writing code. I'm learning
the ins and outs of this model generator designer thing. Yeah.
Speaker 2: But the.
Speaker 5: Best thing, I guess is you are able to go
and change the model and you just keep iterating, you know,
and you regenerate the whole thing. It just makes so
much easier to program and you know, build his applications
and a.
Speaker 1: Lot less prone to bugs. I would think, right, you know,
you would hope, you would hope. I mean bugs get
introduced when you do something over here but not over here,
or you do things a little bit differently in a
couple of places and you know, or you duplicate work. Yes,
and those are some of the fallacies that you know,
pitfalls that dot net developers, developers in general fall into.
Speaker 5: Yes, And this is basically the consistency that we provide
because and this is like the core thing. You know,
on the framework level, on the model level, you can
define like logical types, you know, like for example user
type and you know, just describe, you know, the validation
rules for the conversion, you know, the list of possible
values and use it like everywhere. So it's going to
have the consistent user experience across all the screens wherever
you use the same the same type or the same
data property.
Speaker 1: And you know what, this is a good time for
a break, I think, So let's take a break and
we'll be right back after these very important messages, and
we're back. This is dot net Rocks. I'm Carl Franklin.
That's my buddy Richard Campbell. Hey, and we're talking to Sergei,
Sarah Fudenoff about Zomega, dot Net and Richard and I
believe the floor is yours.
Speaker 2: Yeah, you know, I was thinking about Greenfield. Doesn't happen
very often that and I really like the particular scenario
and something you mentioned in your documentation too, about I
have an existing ASP dot net web forms app. People
have asked for changes to it. I didn't write that code.
I'm scared to death of this thing. I think now,
can I make changes to it through some and like
Zomega and have fewer problems?
Speaker 1: Yes.
Speaker 5: Normally, if you have an old legacy web forms application,
you're probably thinking of upgrading it to the ASP dot
netcore and Plazer and lay this tech. So we help
you do that. You can rewrite some of the modules
or some of these screens using Zomega like generated and
because we make you write code that is basically platform independent,
it's just it doesn't matter like what communication framework you're using.
Then you can expose your services as whatever, either like
use them in process internally or exposed as rest API,
g RPC, whatever you want, or even like the presentation
logic that you're right is basically it doesn't have any
dependencies on the UI framework. It's basically like m v
v M like model few view models. But it's like
on steroids, you know, because it allows you to describe
all your logic in there, all the presentation, like the
data elements, you know, the way they're calculated, the way
they format their values for display, for internal storage, the
way they the validation rules. You know everything about your UI.
You know what views and forms in the view model
you have, and then you just have a thin land
of the actual UI view that you just bind to
your view model and you get you know, working screen.
Speaker 2: Nice. So we're talking about rebuilding the existing app through
Zomega or are we able to actually add to the
existing app.
Speaker 5: You can add you know, like because we support webforms applications, right,
you can generate stuff for webforms, Like if you want
to add like new screens with web forms Zoemega, then
those will be automatically structured and architecture in such a
way that you can migrate them easily to.
Speaker 2: And I can point Zomega at the existing data store
that the existing asp web Forms app are you using,
and it'll build a model for me from that, right,
and then I can go and build it. I thinking like,
that's just giving me me. It would be fun to
take this out for a spin on an existing asp
dot Webforms app where they've asked me to add a
new section to it, and just have pick the model
up and go from there and see if I can
get to a place that makes sense before without having
to touch the existing code, because that's what scares people, right,
It's just a way to avoid that. And then the
other side of this is then I could start refactoring
and rebuilding some of the older existing stuff into Zomega,
and at some point when I got the whole thing across,
I could say, would you like to see a Blazer
version of this?
Speaker 5: Right?
Speaker 2: That's interesting to me because you now no dead drops, right,
I can add any features in demanding right now, and
I can make improvements here and there and bit by
bit remediate an old application.
Speaker 5: Yes, And it's similar to what Microsoft, I guess is
pushing right now, like with the migration path from a
web forms to Blazer where you run some screens, you know,
like they get rendered with the old technology and some
new screens are rendered with the Blazer technology. But it's still.
Speaker 2: Yeah, it's just always a question of are you always
in an operable state?
Speaker 1: Right?
Speaker 2: You can make some changes and you can introduce them
to folks and have them take it out for a spin,
and they're not like, what is this much as opposed
to you? I go away for six months build a
huge thing that everybody hates, right, And that's what scares me.
It is all too often, you know, they get caught
on a rewrite and nobody sees it until it's done,
till the budget's burned. Right, And now now you're in trouble. Right,
I'm just trying. I'm just trying to stay out of trouble.
I'm not saying I'm good at it, just trying. I'm
only trying. Yeah, all right, what about like testing infrastructure,
like all of those kinds of things. Do you bother
any of that? Is the code you generate so good
it doesn't need to be tested.
Speaker 5: Well, you can use any testing framework with it. You
can even add generators that would generate unit to right,
I mean it's basically as long as the model has
that information and the data enough data to derive you
know what tests need to be there. And because we
already have like the model has tons of information, has
the service model, it has the domain model, and it
has the some presentation model. So it's able to generate
all the codes, so there is no reason it cannot
generate unit tests for those as well.
Speaker 2: What's the preferred back end storage model? Like, I see
you support postcress. Is it all our dybms? Could I
switch this to a mode where it's just writing into blobs?
Speaker 5: So yeah, we use anty framework Core and I guess
whatever back end providers it has would be supported.
Speaker 2: Now I gotta go quickly look up to see if
they still support XML as a store. I don't know
that it's a good idea, but I'm just saying that
that would amuse me.
Speaker 5: Probably not actively supporting yet, but.
Speaker 2: No, no as your SQL, SQL Light, my SQL postgrass
and Cosmos dB, right.
Speaker 5: I mean some vendors might have their own providers this
third party so whatever. In terms of the domain model,
we use Endity framework or also have support for the
legacy antidy framework. Six You have six but that's kind
of going away. But you know, you can use as
much of it as you want. You know, you can
generate the services and then override provide your own implementations
to do whatever data story you want.
Speaker 2: You well, and there's all the third party like you
can go into ole if you hate yourself and dB
two inter base. Look, here's a provider for storing tables
and files. Because I'm looking for bad performance. I don't
know the answer. That's probably unfair. Be interesting to try it, honestly,
just to see where they Oh boy, there's an access provider.
There you go.
Speaker 5: But you can even go with no SQL databases.
Speaker 2: Like Mango supported.
Speaker 1: Absolutely, it's a wonderful no SQL database solution that I've
been using lately. It's called Jason.
Speaker 2: You and me both. So that's what run as lives
on Jason yeah too, yeah, yeah, no question. Uh But
I mean when you think about one of the powers
of these generators is to attack questions like that, is
to say, hey, what if we switched to we're paying
a license fee for this database, what would what would
it take to try some of the other ones. So
you go down the you know e f core list
and say, well, which one should we grab and let's
try something. And it doesn't have a license on it,
does it? You know what difference does it make?
Speaker 1: Well? You know what all that could be solved if
you use the repository pattern. Do you use the repository pattern?
Speaker 5: Well, the repository is basically with the Antity framework Core.
So if whatever you do with the Antidy framework Core,
if you switch the provider from one database to another, yeah.
Speaker 1: But there are things that EF doesn't support, right, So
the trick is to have your interface that has all
the CRUD operations on it, and then repository.
Speaker 5: It's kind of part of the clean architecture. I mean,
I'm still yet to see people switching the databases.
Speaker 2: But I'm describing something probably nobody does.
Speaker 1: That's not true. I do, but I start I start
with in memory and then I switched to uh, you know,
any framework or back and forth between that and dapper
or you know, if I wanted to create to do
it all with JSON files, that could swap that out. Yeah.
Speaker 2: It's definitely creating a low barrier of entry to experimenting
with different data stores. If that became a concern of you,
what about true containers?
Speaker 1: That's crazy talk, Richard.
Speaker 5: Containers. Uh, they're supported just as part of the general
you know architecture because you just build your solution and
you know, build containers and you can employ them.
Speaker 2: That's just part of the c ICD pipeline. The Zomega
gets to the build stage essentially pushes the code, kicks
off a bill process, and if in that build process
you're deploying out to containers, fine, you're not going to interfere.
Speaker 5: With that, right, yeah, It just you know, I bet
your own.
Speaker 2: And you're so your architecture is already very much about
state outside of the object, So you're not going to
get any nasty traps that inexperienced container people run into.
Speaker 1: Mm hmm.
Speaker 2: Right, yeah, well, because we'll find out fast if you
didn't know where stuffs get stored matters for sure. You know,
that's that's always part, part and parcel of the problem.
But I do think one of the things we like
with a generator is providing people with the ability to
rapid choice. That we could look at a blazer of
melitation of something both web assembly or server and say,
what do we think? You know, what's the feel like?
You know that that to me is very interesting that
that you don't know, you're not doing a big multi
week spike to try and test something like this. The
generator would do a lot of that work for you.
Speaker 5: Yes, the generator and the architecture we use in some
of the videos will show how you can build the
same application with Blazer server web assembly and you can't
even tell, you know, from the look of it, you
know which architecture it uses, owner of the hood, but
it looks exactly the same.
Speaker 2: Now i'd wanted to experiment with Okay, now the client's remote,
it's through a narrow pipe or something highly latent, right,
and just she can you know, can you feel the
difference on that? But the fact that it'd be easy
to do that testing you call the type script implementation
is SPA. What SPA libraries are you using?
Speaker 5: Well, that was kind of an old framework back in
h like maybe ten years ago or so, when we
had only like the web forms support, and then I
realized that, you know, it's going away, and Microsoft was
pushing for MVC, you know actively, and we're saying like, oh,
don't you worry, it's just an alternate way of doing it,
you know, like web forms is going to be your
life and well, you.
Speaker 2: Know, and there's still plenty of worms web forms people
out there today, right, like it's not like that things
going away, but they're definitely on standard framework.
Speaker 5: Right, So and I didn't like see much difference like
with NVC, so I didn't jump on the bandwagon because
we in the web forest we used like ohing like
with the middlewere and dependency in Jackson, so all the
latest stuff, right, So it didn't feel like, uh, uh
m VC was much different at the time. So we
started looking around and everybody was like building spas, so
we thought, like, what can we do to massage Zamiga
to make it build a spa? And uh, there are
tons of different JavaScript frameworks around uh back then and
the most popular ones in the dot net community were Knockout. Yeah, yes,
so uh and uh D Randal by Rob Rob Eisenberg.
Speaker 2: Yeah, okay, those were they. You know, history is history,
right like today you may talk about react and angular
and the other one she's the name just jumped out
of my head View and you and View. Yeah that's
sort of the big ones right now, but back then,
knockout was the way.
Speaker 5: So yeah, we did pick the knockout because it was
pretty closed in terms of uh how Zamega framework was
working and uh the m v D m uh paradigm,
so it had like observables and everything. And we build
the Zomega JSU frame, work with the Typescript based framework
for that. But then you know, it kind of got stale. Yeah,
they knockout, you know, got stale. Rob left for Google
and then started his own.
Speaker 2: To aralia you know as the nature of JavaScript frameworks.
Speaker 5: But so we were left stranded again. You know, so
I was thinking about building an angler version like Zomega Energy.
Speaker 2: I can't imagine that's that's not what the customers want.
The customers want Blazer.
Speaker 5: Yeah, then came out there's you know, amazing technology from Blazer,
and I looked at the who stands behind it, and
then look what it is like Steve Sanderson.
Speaker 2: Yeah, the same right, no kidding? Yeah, Yeah, it's hard. Yeah,
I think you put your time in the right place. Like,
it doesn't make sense to do this now if you're
gonna if you're gonna go down that path, you only
have so many hours to work on code. Better to
add features on the Blazer side then to worry about
I'm not going to say legacy, but other you know,
I don't know the SPA is that hip anymore. Lots
of people got work in it, no two ways about it,
and goodness, those angulars certainly had deep penetration a lot
of places as has react, but I don't know that
would be your focus. Does make sense really.
Speaker 5: And that was actually a perfect fit for our platform
because the Mega framework was building SISHARP and all the
OI stuff. You know, you can reuse all this power
of view models we had, so it just plugged right
in and the architecture where we have the business services
separated from the presentation logic. That also played well with
going from Blazer server to the Blazer Web assembly because
people don't realize that, oh now you need an API later.
You know, now you cannot like split out, you know,
your business services.
Speaker 2: How much can I split up those services to let
them scale independently? If I app gets big and busy.
Speaker 5: You can the generators allow you to how would put
two different projects so you can build different kind of services.
If you want some services to be more scalable, then
you may split it up into a separate project and
then right basically have it like run a lot of
copies of it, whereas like admin screens, you know that
I don't.
Speaker 2: Only use Yeah, you don't need to do that. Then
and then and I'm dancing against the mall the monoliths
versus the micro service sort of mindset. But uh, and
we're we're hip to modular monolists. That's been a good conversation.
Speaker 1: I've done it right.
Speaker 2: So and that's why I asked the question exactly that way.
It's not that I want want service rining architecture, it's
nothing I want micro services. Is that I got a
problem child and I want to put it in a
can so that I can scale it separately from everything else.
Speaker 1: Yes, exactly, I don't want a problem child factory.
Speaker 2: Yeah, so that's the answer to the question is like, yes,
making its own project. Now it runs something that you
could be called by the other projects, and you can
scale it however you want. What about mobile clients making
stuff for iOS and Android?
Speaker 5: Yeah, we actually have a generator for zamal and WPF
so it's it's quite possible to use to go to MAUI. Yeah,
we kind of skipped on the zamorin and zamorine forums there,
but you can pretty easily just use Blazer, as you
guys have discussed numerous time, just you know, do the
hybrid Blazer for a mobile for now, and we may
even provide like a template for a mile we app
using hybrid Blaser, just to get started.
Speaker 1: On the Yeah, that'd be good. I would think it
would be very difficult to keep up with or it
has been certainly in the past, to keep up with
Microsoft on Maui's AMMO features and things.
Speaker 2: What's the Zomega framework. I see it here on GitHub.
Speaker 5: Yeah, so this is the framework that powers the applications
that we generate. Basically, it allows you to uh write
this presentation logic that is platform agnostic. It's independent of
the view framework. So it's kind of m VVM on steroids.
Like with the classic MVVM, you have these eye notified
property changes, and each property is just a value right older.
In Zoomega framework, a data property represents both the value
and the metadata like whether it's editable, whether it's visible required,
the validation rules associated with it, the conversion rules to
different formats, like the at least of possible values that
are allowed. So you build this property you know as
a kind of big collective you know, reusable item and
then you just bind your control in whatever framework it is,
whether it's a EXAMO control or user controlling webforms or
Blazer control or whatever. You just buying it, you're telling
it there's the property, and it reflects you know, all
the takes everything from the property. So basically all your
coding is encapsulated in the platform independent presentation logic.
Speaker 2: Nice and yeah, and this is great. You know why
be open source on that because you've also got a
retail component of this project as well, right.
Speaker 5: Yes, and yeah. The best thing you can bind any
controls to your properties, like you build your view models
and then you can build your views with the you know,
regular controls that we provide. But then you want to
switch to sinc fusion for example, we partner with see
sink fusion. Right, it just bind sync fusion controls to
this very same property and it just works out of
the box. You don't need to do anything, so you
don't have the vendor lock in. You can you know,
just switch and swap any component library.
Speaker 2: That's cool. So there's a free product that's totally usable.
Speaker 5: A basic Yeah, we have a basic license that is
kind of a community license on visual studio.
Speaker 1: What are the requirements for that?
Speaker 5: Just a visual studio twenty twenty two.
Speaker 1: I mean, is there any single person use that kind
of thing?
Speaker 5: Yeah, yeah, a single person Like you can order your
own license and you can renew like when the new
version comes in, you can get a new version.
Speaker 2: Right.
Speaker 5: So we're looking for feedback and looking for directions because
you can do a lot of stuff with it. You
can developing in a lot of different directions, add you know,
various features. So we're looking for the directions from the market,
you know where.
Speaker 1: Sure, it's the big the big difference between that in
the full license which is about eight hundred bucks the
generator source that you get right and in unlimited perpetual
license kind of thing. Yeah.
Speaker 2: Yeah, so I only have to buy this one, so
I don't get it, I don't buy it annually.
Speaker 5: Yeah, you buy it for this specific version. Oh I see, okay,
or you know the minor upgrades.
Speaker 2: Obviously. We also talk about model enrichment in the custom generators.
What is that?
Speaker 5: So, yeah, we have the structure of the model defined,
but then you may want to add your own elements
to it. Define you know, things that you want to
capture in the model and then be able to use
that in your own generators, or in customize the existing
generators to use the additional data in the model to
produce the code the way you want it.
Speaker 2: I see anythink in terms of like, if I'm a
bigger organization where we have sort of standards of way
we want things to look, I can build up custom
generators so that everybody using it sort of goes down
that path, right right, Yeah, I appreciate that. That's very good,
it's smart. I also feel like that modeling piece is
something I'd probably sit with the domain expert, you know,
with the principal knowledge person, and work the model with them.
It'd be probably a lot more approachable than doing it
on whiteboards and ex sell spreadsheets and things. Actually, let's
just go through the model together. Let's see if we
get get to a good place.
Speaker 5: Yeah, if you watch some of the videos that I had,
it's such a quick process from model to a working prototype.
Speaker 2: At least prototype.
Speaker 5: You can see like right away what the screen is
going to look like. Then you weak something, you know,
you'll go regenerate, you know, all the art defects, and
then you get an updated screen.
Speaker 1: You know, I watched some of the video and I
saw a tree view. Is that the main designer a
tree view structure? Or do you have other UI design
that use for different parts of it.
Speaker 5: The treview I mean the XML.
Speaker 1: Yeah, yeah, the XML view.
Speaker 2: Yeah yeah.
Speaker 5: The XML is basically the main designer right now. We'd
love to have like the more graphical designer where you
can just be able to easily like you know, like
an antity data model. I remember these there was a designer. Yeah,
microsoftware you can like add.
Speaker 1: Things and link things together and whatnot.
Speaker 5: Yeah, so we'd like would love to build something like that.
We just haven't gotten around to it. But the the XML,
the editor actually is, has been enhanced. Yeah. You can
like collapse the definitions so you don't need to like
view this convoluted XML like you can just expand the
sections that you're interested in. You can go to definitions,
find references, refactoring, you know all this stuff. So that's
basically I mean people are used to editing XML, like
you go to our HTML, you go to Blazer, you
go to zamo.
Speaker 1: You know, are you taking pull requests? Do you have
issues that need do you need help? I guess is
what I'm asking.
Speaker 5: Yeah, if someone is interested in contributing and helping with
that would be all happy to to get these contributions.
Speaker 1: Well, as Louis Armstrong once said, what a wonderful world.
It really is, the wonderful world of open source. Well,
is there anything that we missed? Serge anything that you
want to or a shout out or call the action
before we hang up?
Speaker 5: Well? Yeah, as I said, you know, if, uh, if
you find it interesting and if you want to learn
more about it, you can go to zamaga dot net
website and check out the documentation, the videos. We keep
adding new videos to it, keep adding features, you know,
as uh it says it. We just added the postgrasskvil uh.
Support Yeah, by popular requests uh and uh yeah, I
give it a spin. Uh and we always want to
hear your feedback. Uh and what do you think? What
do you think would benefit you know?
Speaker 2: Uh?
Speaker 5: Any ideas, features and contributions are always wealthy.
Speaker 1: That's great. Thank you, This is good stuff and sorry
that we hadn't noticed it earlier. This is good and
I hope our listeners think the same. I'm sure they will.
Thanks again.
Speaker 5: All right, thank you?
Speaker 1: Here he is okay, and we'll talk to you next
time on dot net rocks. 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.
Speaker 4: 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.
Speaker 1: And make sure you check out our sponsors. They keep
us in business. Now go write some code, See you
next time.
Speaker 5: You got Jack Middle Vans