00:01uh so so yeah let's get started product
00:03update um maybe on the next slide we'll
00:05see uh See a little bit of the planning
00:08um of course as always ask questions uh
00:12you can type questions in the bottom of
00:13your screen there's a Q&A thing you can
00:15type the questions there we'll handle
00:17them all at the end I'll save them up
00:19and present them to Sean in the end but
00:22just send them in anyway uh and we can
00:25see if you see something that we don't
00:27if we're missing anything uh we also got
00:30some polls already well one poll with
00:32with two questions I believe um we can
00:35start that poll and uh we would
00:37appreciate that if you could answer
00:39those questions it's just some some
00:40feedback to us uh you should see them on
00:43your screen right now uh you can answer
00:47want and yeah they're just related
00:50related to the topics in the webinar
00:52yeah so this is a little spoiler of what
00:57spoiler and there we go the agenda what
01:01uh what's what's on the agenda for us
01:02Sean well this is this is a a product
01:05update so this is um a webinar
01:08specifically about the
01:11202312 uh release um and what uh new
01:15features and capabilities are are in
01:17this release um so uh as always with
01:22these webinars I like to uh do some
01:25demos um mostly demos and uh very few uh
01:30slide content but um I'm going to show
01:33sort of three groups of demos and then
01:35after each demo do a sort of a a little
01:38recap of um what it is we saw and and
01:41how it works and all that uh then maybe
01:44at the end we talk a little bit about
01:45what's on the road map for this year at
01:47servoy uh and uh and then of course
01:50we'll take time for your questions on on
01:53anything that you saw or we discussed so
01:56please use the the questions uh uh uh
01:59feature in Zoom to to ask at any point
02:02in the webinar and we promis to get to
02:06so uh for the first uh demo or group of
02:09demos uh we'll be talking about uh
02:11security and specifically there was
02:14maybe you saw in the release notes um
02:16the addition of a feature that uh we're
02:19calling stateless login form um which
02:21maybe requires a little bit of
02:23explanation there um it also comes with
02:27um uh the integration with uh also new
02:31features in servoy cloud and that's um
02:34sort of an identity access management uh
02:36platform capability in servoy Cloud uh
02:40and integrating um how does a developer
02:43integrate with that so we'll we'll kind
02:45of uh go through some demos there and
02:47explain each of the components of that
02:51uh and we'll do a quick overview and
02:52talk about you know why why we're doing
02:54this this feature and and how it works
02:56so um I'll pause there and I'll jump
03:03one so I'm going to switch over to the
03:05IDE Victor can you confirm for me that
03:08you can see surway developer yes now I
03:10can yes okay good um yes so
03:16um this is a product update but maybe it
03:19helps to do a quick little review of
03:22sort of how um how security and that by
03:26that I mean authentication and and
03:28enforcement of application missions kind
03:30of works and then and then what's new
03:32and what's different uh so here in my
03:37application uh when I highlight the um
03:41the node in the solution Explorer here
03:42you can see there's a new property here
03:46authenticator um there is a property
03:49that used to be there for many years
03:51called must authenticate so that's sort
03:53of gone because if you set this to
03:56something other than none then it sort
03:58of shows that you're requiring
04:00authentication so we'll come back to
04:02this in a minute um but that's one
04:05change to be aware of uh and then the
04:08other change is actually in in the dot9
04:12release of last year we we did a a small
04:15refactor we renamed users and groups to
04:18permissions um and that is because the
04:22the word group was kind of um I think
04:25inadequate or or wrong what we're really
04:27talking about here are actual per misss
04:29in the application so none of this has
04:31changed here it's just that um it's been
04:34renamed also in the the security API
04:37down here uh we deprecated anything that
04:41references group it will still run but
04:43it's it's hidden and deprecated you
04:45should switch that to permission so uh
04:50um if a if the current user has a
04:52permission right then it doesn't say has
04:55group or belongs to group anymore it
04:58it's renamed to has permission so that's
05:00an API change as well to be aware
05:03of so so um that part doesn't really
05:06change if you're new to servoy and and
05:09you haven't got into uh permissions um
05:13developer uh can define an application
05:16permission uh and then that can be tied
05:18to um that that can be enforced in the
05:21application uh and that's in two areas
05:24in the user interface but also at the
05:25data layer and I'll show a little bit of
05:27that in the demo and then you can also
05:29programmatically check um if the user
05:32has has permission um but that's been uh
05:35renamed uh but we'll come back to this
05:37in a minute um going back to the
05:41authenticator um what's new here are the
05:44values that that you can put in here um
05:48with none your application launches with
05:50no login and there's no opportunity to
05:53determine who the user is or enforce
05:55permissions uh default is um if you
05:59switch to default it will uh it will
06:03show the new stateless login form um by
06:07default and it will use the built-in or
06:09the repository based user um
06:12authentication so uh again if you're
06:15defining your users um in the users and
06:19permissions uh editor here uh then you
06:22will be authenticating these users these
06:24users are actually stored in the
06:25repository database database uh based uh
06:29user or identity management system so
06:31that none of that is new but that's um
06:34that's sort of the original built-in
06:37security um many people do not use that
06:40because they want to do something more
06:42um uh custom or uh or
06:46Advanced but that's simply like the
06:49equivalent of having the must
06:50authenticate uh checkbox from before uh
06:53when you choose this um you will be
06:54presented a login form and it is the
06:56stateless login form and I'll explain
06:58what that means in a minute so let's
06:59just go ahead and leave that there and
07:02I'm going to launch the uh the NG client
07:05and I have to of course switch my screen
07:08browser Victor can you confirm that you
07:10can see the login screen on my browser I
07:14can okay good yeah so this is
07:16essentially the default login form that
07:18you get um not a big deal it it looks a
07:23little bit different than the old
07:25default login form the difference here
07:27is when we say that it's stateless is
07:29that this login screen doesn't um
07:32initialize a client session and that's
07:35important um uh for one reason we get um
07:40sometimes the report that an application
07:42server has you know a lot of concurrent
07:45sessions or concurrent users
07:48and actually that's a bunch of browser
07:51tabs where the user is logged out and
07:54they just sitting on the login screen
07:55they're not doing anything um and so the
07:59and it's and it's they are stateful
08:01client sessions so it is consuming
08:03resources on the on the application
08:05server uh so one of the reasons we we
08:08have this so-called stateless login form
08:10is to just make a lightweight
08:13authentication um so that when you're
08:16sitting on the login screen you're not
08:17consuming any resources on the server
08:19this is just a static page that um sits
08:22in front of everything so that's that's
08:25kind of step one of this um if you
08:28choose default then this will use the um
08:31rep repository based uh user
08:34authentication I'm going to switch back
08:37now um by the way if you are using a
08:42login form so um uh that would be this
08:46property here this hasn't changed if you
08:48select default and then choose login
08:50form uh it will it will defer to your
08:53login form it will be a stateful
08:56solution then right so we're not taking
08:58away anything here if you have already a
09:00login form and you authenticate through
09:03your own database or or ldap or
09:05something else that you like not none of
09:07that changes um uh you just leave your
09:10login form there but you will have a
09:12stateful session you won't be able to
09:13take advantage of that that stat login
09:16form okay so then the next um part to
09:20show here will be the um uh
09:23authenticator that's based on servoy
09:25cloud uh for that I'm going to switch
09:35and uh to the Sero Cloud control center
09:38uh and here I have uh defined my
09:41application hello world this application
09:43is the same application that we see in
09:46the IDE they are connected the IDE is
09:49connected to uh my cloud environment and
09:53um can be aware of of
09:56um the security uh schema that I set up
10:00here so first thing to note is that an
10:02application has permissions just like in
10:04the IDE uh I have permissions here in
10:07fact your permissions are under Source
10:09control so when you um commit to the
10:12repository and you build through servoy
10:13Cloud it'll actually sync these
10:14permissions so if you're using servoy
10:16Cloud for your um for your application
10:19building and and testing um then it will
10:22pick up your permissions you can also
10:24Define them uh here in seroy Cloud as
10:27well like this one here with the
10:29description I defined here but the other
10:31ones were synced from source so um
10:34that's because permissions are tied to
10:36an application uh and they they mean
10:39something inside the application with
10:40what you can do beyond that we have the
10:45security Tab and here we have user
10:47management so you can see here I have
10:49created uh excuse me a few users if I
10:54click create user I get the uh the
10:57dialogue I could add another user here
11:00um and it would invite invite them send
11:02a verification email um and if I look in
11:05detail at this particular
11:09user you can see that uh I can see his
11:13uh roles belongs to this uh basic user
11:17role and permissions are grouped into
11:21roles so these are all the permissions
11:23that he would inherit from uh from his
11:26roles I also can see the the login his
11:29history right uh so a bit of sort of
11:31identity access management platform here
11:34coming into servoy cloud with respect to
11:38management uh if I come in here to uh
11:42roles I can view the roles that I have
11:45uh in my platform now roles are
11:49something you can do across your
11:50organization you can have multiple
11:52applications each application has its
11:54own permission sets but you can group
11:57them into roles however you like here so
12:00uh if I go and look at the power
12:04users details you can see
12:11permissions and choose choose them from
12:14my my applications and bring them in
12:19way hope my zoom stuff is in the
12:23way we don't see that
12:26Chan good to keep keep dragging these uh
12:30the toolbars around when I want to see
12:32stuff and click on stuff uh and then
12:33finally I can see which um which users
12:36have uh this role and right now there's
12:38no users but we'll come back to this and
12:40change that okay so let's uh switch back
12:47IDE and show how this plays out so what
12:50I'm going to do in the IDE is um I'm
12:55authenticator to seroy Cloud
13:00and now when I launch the uh the
13:03application it will still show that
13:04stateless login screen it's the same
13:06screen but it will use a different
13:10Source I have to switch back to my
13:14browser okay so now I get the same uh
13:16login screen and I'm going to use that
13:19uh user that I had added to my uh my uh
13:24organization and log him
13:32and now I get my Hello World application
13:34I put a few buttons on here uh uh to
13:39show um some of the Integrations here so
13:41first of all um I want to print out the
13:45security info and this just tells me the
13:48username and the permissions that that
13:52has and of course um I have some
13:55something here like create an order when
13:58I go to click on it it says sorry access
14:00denied right so so the do you get that
14:04security info from the just the regular
14:06security API there's a function for that
14:09correct okay yeah yeah so I'll I'll go
14:11back into the the IDE and show show how
14:15how it integrates okay um so if I switch
14:21IDE uh and come into my my form
14:27here um so first first thing we did was
14:31info the method that's attached to that
14:34let me make some space here uh is here
14:38and uh to your question Victor so I just
14:41security uh API that's been there
14:44forever uh in servoy developer and get
14:47username that's my the currently logged
14:50in user and then I get the user
14:53permissions um and the second column is
14:56uh is the name right so then I just sort
14:58of to print that out to the screen so I
15:01authenticated through servoy Cloud
15:03that's my authentication source and I
15:05retrieved the permission info from that
15:08that all happens automatically for you
15:11there's no coding involved for that that
15:13happens via that login screen and then
15:16uh the applications uh the user
15:18permissions are known at that time as
15:21they're defined uh in the back end you
15:23also saw that um when I tried to create
15:26an order I also used the same security
15:29API that's been there excuse me from the
15:32beginning and I check to see if the user
15:35has this permission can create orders
15:37again that's something that's I've
15:39defined in my application it's under
15:42Source control it's part of my
15:44application and because the user doesn't
15:47have that I showed this this dialogue
15:49right um now something you can do as
15:53well um that well longtime survey uh
15:58user users will know this that there's
16:00on in the UI there's you can enforce
16:02your permissions there right so uh I
16:05could say that on this
16:07form that you have to have the can
16:11orders um permission to to be able to
16:16click on this button so if you don't
16:18have it um I think it's actually this
16:23one I turn that off for the other two so
16:26you really need this one right and I
16:28save that and now if I go ahead and I
16:33again and of course have to switch my
16:37screen sharing I have to log out one one
16:40thing that uh uh I'll point out here is
16:42that um that remember me checkbox that's
16:44on the stateless login form that
16:46actually does push um something to local
16:49storage to remember you until you
16:51actually log out so um you will stay
16:54logged in that's something that people
16:56have built themselves it's not hard to
16:57do but it's just just kind of nice that
16:59it's built in uh and you have the option
17:00to show that so now when I log out and
17:07guy this guy being you
17:10yeah you can see now now the buttons
17:13grayed out right I can't even click on
17:14it and get that dialogue so that's and I
17:16just wanted to show that because that's
17:19although we're showing some new stuff uh
17:21with the integration with the suroy
17:22cloud identity access management um uh
17:26that this has always worked this way
17:28that you can set application permissions
17:30and say what they do you could also do
17:32this on the um table level whether or
17:34not you can insert update delete if you
17:36turn on uh audit log for different users
17:39Etc um that's all works the same and is
17:42enforced uh once you log in can you show
17:45once again where to find that window to
17:46set the permissions and the
17:49functions in in servoy cloud in uh the
17:53developer in the developer
17:56yeah sorry for making you Swit switch
17:58again no no that's fine I should be
18:00faster at this good okay so um
18:05in in the IDE and the solution Explorer
18:09it's here users and permissions you
18:10double click that this is where you can
18:12Define um your application permissions
18:16they're just a named list and then on
18:20form um here rather normally you're on
18:24the design view there's across the
18:26bottom here there's these tabs and if
18:28you click the security tab sorry I
18:30didn't say that the last time I did it
18:32then you get a list of the form itself
18:34and all the elements and you can say
18:36whether it's visible or accessible per
18:39permission and there's some we did
18:41another webinar on this a a while back
18:42so if you look at our archives um we go
18:46into like some of this stuff uh as well
18:48but you can say there's no rights on
18:50this form unless you you grant them
18:52right so it's a more restrictive like
18:54you you start with nothing and then you
18:56have to Grant it and you can do that on
18:58on uh database tables as well for insert
19:05Etc okay nice thanks okay so um now just
19:10to sort of um show this a bit in a bit
19:14more detail uh I'm going to go back
19:17to uh my uh definition here of this role
19:22um Power users and you can see that
19:25power users did have the permission
19:28to uh can create orders for for my Hello
19:32World application right uh however
19:35there's no users that have this so I'm
19:39add this user to um to that role now you
19:44can see that uh he's there uh and I
19:47shouldn't really need to do anything
19:49else other than probably log
19:51out and now when I log back
20:01you can see that the button is enabled
20:02and if I click it then it says the order
20:04was created right so um I didn't have to
20:09make a code change um uh and this is
20:13this highlights one of the the reasons
20:15why we offer this um is that you know we
20:19we believe that using a separating user
20:23management and and uh access control
20:26from the actual source code is good
20:28thing that's kind of the modern way to
20:30do it lots of people are using third
20:32parties to authenticate to manage
20:35identities to um manage per permissions
20:39even uh so um we wanted to offer that as
20:44well uh and and it it's a bit awkward I
20:47think if you're defining users um you
20:51can do it the the old fashion way in the
20:52IDE and and add users there and it it
20:55syncs it to the repository but really
20:56that's like under Source control and
20:58then you have to sync it when you deploy
21:00it right so um it's a little bit awkward
21:03uh to manage that through like as a
21:06developer it makes a lot more sense that
21:08you just have like a single source of um
21:11identity management and access
21:12management uh to do that so that's kind
21:14of the other reason that we wanted to
21:16offer um offer this feature and it's um
21:20pretty easy to use uh in your suroy
21:22cloud account and uh map it to your your
21:26applications um and that can work for
21:29for any applications you have registered
21:30there um moreover you don't have to host
21:34the application uh as
21:37well um yeah so let me while while I'm
21:40talking I might as well bring up the uh
21:42the overview here that helps me remember
21:45what else to tell you about this so we
21:47saw that um you make permissions under
21:49revision control and Source you can
21:52manage users and roles in servoy Cloud
21:55um the old ways to do it so um using a
21:58state full login form is still supported
22:01um oh I didn't I didn't show the
22:03authenticator option for um uh a
22:07solution authentic solution
22:09authenticator um but there was another
22:12option under that authenticator setting
22:14that um you can you can use a a solution
22:18so if you want to have full data access
22:19in like a module you can include an
22:21authenticator module and it will pick
22:23that up so that that works the same as
22:25log and solution before um so those are
22:27still support it if you want to use that
22:30but if you do want to use the surway
22:31cloud as your identity access management
22:33Source you just set the authenticator
22:35type in your solution to servoy
22:37Cloud um oh and I didn't show
22:40customizing the stateless login form so
22:42let's jump back to that as well um so I
22:48developer this just came in as a
22:51question as you said it how to customize
22:53the login page yeah great one of the
22:55reasons one of the reasons I always have
22:57a review slide is to because I kind of
22:59want to make sure I didn't forget
23:00anything um so um yeah the way you do
23:06that is under the media node here if you
23:09right click it there's a new option to
23:13um uh create a media login
23:17page and that essentially creates this
23:20um static HTML file um which is
23:23basically the the thing we just saw so
23:26if you do that and you don't change
23:27anything here you get the same screen um
23:31let me make a few changes here you
23:33remember the login button was green I'm
23:36going to um put it to the so we have the
23:40style class defined up
23:42here uh the button background I'll
23:44change that to the dark blue and um yeah
23:49maybe I want to lighten
23:51the background color of the uh the input
23:55Fields so let me paste something in for
24:00here right so just a small change but
24:04now if I launch that again and I S
24:07forgot a semicolon I think
24:11okay s have to switch back here oh yeah
24:16okay um now if I yeah CSS is uh tough on
24:21you yeah um yeah so so um it's not like
24:27designing form in servoy but the whole
24:29point is that it's supposed to be
24:31lightweight and and stateless right we
24:32don't want to launch a solution but so
24:33here now you see the the fields are
24:35lightened and um and the button has
24:38changed so uh you can do whatever you
24:41want there a few things have to remain
24:42the same it's covered in in the
24:44documentation um but you you got to have
24:46these input fields and and and a submit
24:49uh but you can put your own logo you can
24:51put your own background image Etc right
24:53so uh fully customizable there um and
24:57that's that's all you do to customize it
24:59that goes under revision control so um
25:02the moment you uh deploy that then it'll
25:04be in in your War file or in servoy
25:06cloud or in your Docker
25:12think uh that covers everything for that
25:15demo um and again um oh uh I want to
25:21talk about the the road map too what
25:23what we envision next for kind of this
25:25direction um so first of all uh you'll
25:28notice that login screen didn't have a
25:29forgot password uh so um we're looking
25:32into adding a forgot password flow again
25:35the idea is this is kind of just
25:36inspired by the the other uh IAM
25:40platforms out there they have these
25:42flows all figured out um and you just
25:44configure them you don't you don't code
25:46them so we want to make this part of the
25:48servoy developer experience more of a no
25:51code thing where you just configure your
25:53flows and it just works you don't have
25:55to write code for what happens when a
25:57user forgets password or um uh you know
26:00uh different error messages when they
26:02log in ETC so we will look into um
26:05additional flows or alternative flows um
26:11authentication uh the other thing that
26:13um uh we want to support again servoy is
26:16meant to be for developers to have
26:18flexibility um and uh we're offering a
26:23uh a a user management uh system uh for
26:27convenience but we understand that you
26:29may have your users in another am or you
26:33want to use a social uh identity
26:36management like a Google account or
26:38GitHub account or something right so um
26:41if there's interest we're looking next
26:43to add a different authentication Source
26:46um to that so that you could use your
26:48own ldap for example or you you could
26:50you could let your users log in with
26:52their GitHub ID Etc uh something that's
26:55already built into seroy Cloud for um
26:58users of servoy cloud but that we want
27:00to expose to um actually in applications
27:02would be um multiactor
27:05authentication and then we can start to
27:06add all the Cyber um uh features as well
27:11like password rules and histories or um
27:14flagging passwords that have been
27:15compromised on the dark web Etc right um
27:18it's the kind of thing that you can do
27:20when you start to to put user management
27:22into an actual platform and not do it in
27:24code um you can sort of centralize and
27:28and offer best practices so we'll we'll
27:31allow you to lock users unlock them Etc
27:34and all of that would just be you know
27:36without um it would just be through the
27:39servoy cloud screens um you can log out
27:43of all devices that sort of thing so
27:45we're just looking at Best Practices on
27:48identity access management platforms and
27:49sort of adapting those to what we think
27:52fits our our customers but of course um
27:55we'd like to hear from you so what what
27:57you know what uh features would you like
28:00in this area what um ideas did this does
28:03this give you uh so please uh let us
28:06know um either um in this webinar or on
28:10the Forum or with a direct
28:12email uh let's go to the next demo um so
28:16I want to show a little bit of uh the
28:19experiments and the features that we're
28:21doing uh in the world of AI and the
28:24quick developing um uh Technologies in
28:27in language models and and machine
28:29learning so for that um I'm going to
28:33first jump into the ID before we start
28:36maybe Sean uh I want to check if
28:39everyone has received the poll uh all
28:41the way at the start we we open a poll
28:44for everyone but I see we have some new
28:46at andd since then uh in the bottom of
28:48the screen there's a button with polls
28:50and I think if you haven't answer them
28:52you can open that and answer it for us
28:54because it's just some feedback to us
28:55what you do with security and with
28:57what you think of the AI that Sean will
29:00show you right now so if everyone could
29:01answer that then that would be really
29:05great okay um yeah so well the first
29:10thing is I'm going to go into
29:13um another just a form with some code in
29:16it to show this next um demo uh
29:20so at servoy as soon as we could get our
29:23hands on um some of the apis around the
29:26large language models that have been uh
29:29really developing quickly over the past
29:31uh year or so um we we have a dedicated
29:34team uh like a breakout team that's
29:37that's really been um experimenting with
29:39this and getting smart in all the the
29:41different aspects of the of the
29:43Technologies and the different providers
29:45uh and we're trying to sort of do some
29:47experiments and weave that into our
29:49product in different ways uh so the
29:52first way I'm going to show you is the
29:53servoy AI uh code assistant so if here
29:57I'm going to select some code that I
29:59have and I'm going to rightclick and you
30:02see the menu item survoy Ai and I'm
30:05going to uh ask to debug My Method
30:09here now um this could take a a little
30:13bit um so I'm going to let it run um uh
30:19because it can take a few seconds I'm
30:20going to start another demo and then
30:22we're going to come back basically I'm
30:23just saying hey I'm having trouble with
30:25this code uh analyze it tell me what you
30:27think so the next thing I'll do is
30:32switch back over to my
30:37browser and um come back into seroy
30:40Cloud uh and I have down here um uh get
30:47help and I have a chat support here and
30:50I'm going to just say um show me an
30:57Loop for records and get a total amount
31:04that and I'm going to send that that
31:07should come back a little quicker and
31:09then we'll then we'll start a third
31:13demo oh geez demo demo ittis show me an
31:17example how to Loop a record and get a
31:19total amount to maybe ask it a different
31:23um let me see I had something
31:27that I copied and pasted let me try
31:32that it's typical for a live demo yeah
31:36yeah I tried that this the AI has stage
31:38fried I think well you know these things
31:40they don't give you the the same answer
31:42twice teams um oh there we go there we
31:46go so here you can see and and the
31:48formatting on this is is not great it's
31:50something we're going to we're going to
31:52fix but I wanted to show this to you so
31:54it says you can Loop over a found set
31:55and calculate the total value um and
31:57tells you about you know the get size
31:59method and and kind of how to Loop over
32:01a found set but you also notice that it
32:03creates the the variable at the
32:05beginning and then it it um uh you know
32:08does a plus equals here to to append to
32:11that uh through the loop right so um you
32:14know it got it right so some of these
32:16things uh it gets it it gets it pretty
32:18well and others um uh you get not such a
32:21great answer but we allow you to say
32:24whether or not it worked um and we do
32:26some reinforce learning on that um uh
32:30but this is another area that we're
32:32exploring is um can we take the
32:34knowledge base of servoy um and kind of
32:38make it easier to to discover answers um
32:41and so we think this will improve quite
32:43a bit um uh as the technology improves
32:46and and as our understanding of how to
32:49improves then the third demo I want to
32:51start and then I'll go back to the first
32:53one is um uh what we're doing in servoy
32:58Cloud uh so I'm going to come to one of
33:00the applications so this is this is
33:02actually the namespace for servoy cloud
33:05so we we built servoy cloud in servoy
33:07and we we uh build it and and host it U
33:11manage it in servoy Cloud so we're
33:13really eating our own dog food here um
33:17so the application Cloud sync is like
33:19this um pretty impressive complex
33:22application that um manages a lot of the
33:25workloads for building um test
33:28automation uh building applications
33:31deploying uh all of the automation that
33:33goes into uh into servoy cloud is is in
33:37this one application uh and if I look at
33:40the uh environments here I have a
33:42production environment and a and a
33:44development environment this one has 38
33:46users I think these are all robots or
33:48all headless clients that are doing
33:49batch operations but reason I want to
33:52show this is that you can see that when
33:53I look at the environment um that I have
33:56quer performance here this has been in
33:58um servoy Cloud for a number of releases
34:01but um we started to look at like um you
34:05know how can we show first of all show
34:07any potential problems you know and flag
34:09them so a user could take action but
34:12then yeah you get to he and you're like
34:13okay I have this 46c query that is
34:16running 880 times in the last hour
34:20so what can I do about it right um so
34:23that was the next thing we want to
34:25answer uh and here if I show
34:27more and click my little robot guy here
34:30it says ask servoy AI for
34:33help and this one can also take a while
34:36so I'm going to start this but uh here
34:38we really analyze not just the query but
34:40um it takes um some information about
34:43the database uh schema indexes Etc uh
34:48and and really analyzes it uh so it can
34:50take a few minutes uh or a minute or so
34:54meantime back to demo number
35:01and if I sort of maximize this
35:04window um you can see that uh I get an
35:07analysis here and it says infinite Loop
35:10creation and it says the code snippet is
35:11creating a new record inside the loop
35:13that it iterates over the found set so
35:15um I did that on purpose uh I called new
35:18record inside the loop and it says it's
35:19likely to increase the size and it will
35:21cost the loop to never terminate because
35:23it will keep getting bigger so pretty
35:25good the AI figured out that that was
35:28going to uh cause a uh a problem right
35:31away uh and understood enough about
35:35servoy uh and you know my code to to get
35:41that right if you look at this I call um
35:44new record right in the middle of the
35:46loop and that that Loop will never never
35:48end so um uh this is kind of maybe maybe
35:54not uh something you're going to do on
35:56all the time but if you're having some
35:58trouble you could rightclick and and get
36:00some help here we also think that um you
36:02know this is something that we can keep
36:04exploring and get better with time um
36:08the other thing is is the user interface
36:10here um uh we'd like to do something
36:12that's a lot more integrated into uh the
36:15code editor so that you could actually
36:16get like maybe a a code snippet to fix
36:19it and merge it so um uh looking more
36:22like some of the co-pilot type features
36:24that are out there um
36:27but that's that's a one example of of
36:31doing some AI on your code in the IDE um
36:34I think that's the most impressive one
36:36but if you look at the other options
36:37here you could also add inline comments
36:40or just ask it to explain something like
36:41if you were looking at someone else's
36:43code or you you downloaded a module um
36:45you can highlight the code and ask it to
36:47explain something there are limitations
36:50on this as well if you know much about
36:52these large language models that um uh
36:55there's a limit to the number of token
36:56tokens or words that you can send in uh
36:59what we do under the hood here is we
37:01actually extract a lot of our own um
37:04information and send that in along with
37:06the prompt so um if you were to select
37:09like a whole page it you might not get a
37:12uh it might be too big to respond to but
37:15these are some areas that we'll have to
37:18explore let's switch back to our query
37:22analyzer and uh see how it's everyone's
37:25been waiting for those results
37:27yes so uh here you can see that um we
37:30get a response here I have to say that
37:33this is probably the the area where
37:35where you get the most impressive
37:36response and that's I think because
37:38these these language models really
37:40understand relational databases and SQL
37:43and um uh that's something that they're
37:47well trained on so um this is not
37:51specific to survoy or to um a domain of
37:55an application and I think because of
37:58that you get you get a nice response and
38:00here it's telling you that um there's an
38:02unnecessary cast and you could remove
38:05that and it it gives you kind of an
38:06optimized view of the query and in in
38:09our um display here you can copy any
38:12code Snippets that you
38:13see um but essentially it'll it'll tell
38:17you to do things like create indexes or
38:19change your query or something like that
38:21right so um again um our goal here is to
38:25start to do things especially in servoy
38:27Cloud where rather than just say you
38:30have a you know a performance problem or
38:33you have a bad query or you have an
38:34error in your log but it's more like
38:36what what should you do about it right
38:38it's not just a uh showing you problems
38:43Solutions so that is demo number
38:49two and maybe I'll do again a quick
38:52overview about what we saw so how does
38:56it work uh well I won't get too much
38:58into how it works but what we're what
39:00we're using here is really a mix of
39:02different Technologies for for different
39:04areas um the perhaps the simplest one
39:08you saw was um when I just asked a
39:10question about um how to do something on
39:13the the help window the chat interface
39:16um and that's using our new
39:17documentation site and with Vector
39:20embeddings of what's in the
39:21documentation it can pretty much match
39:24uh if it finds uh something that's known
39:27documentation uh it can kind of match
39:28what you're looking for and then and
39:30then it can route that through a
39:32language model to give you a a nicely
39:34worded response right so that's a little
39:37bit predicated that we have um
39:39documentation supporting what's what
39:42what it is you're asking about um uh and
39:46and sometimes with those you get you get
39:48a misfire like we what we saw uh when I
39:51ask it one way I didn't get a result but
39:53I ask it a slightly different way uh and
39:55I do get a result so again um depending
39:59on how these models are tempered you get
40:02more or less creative results um but
40:05that's something we can improve um uh
40:09future uh in the IDE um this is where
40:13our R&D team has spent a lot of time
40:15researching actually fine-tuning the
40:18language model to get it smarter about
40:21servoy uh technology right so we we give
40:23it spec files we give it Java code
40:26uh or or some summaries of java code uh
40:30to tune it up so that it really
40:32understands like what I said like found
40:35set you know get size found set new
40:37record the things that it analyzed it it
40:39knows what those mean because they're
40:40not they're not by default trained on uh
40:43on our own technology right so uh we had
40:46to do that ourselves and we we learned
40:48quite a bit about about these models
40:51along the way something else that we're
40:53doing is is what's called prompt
40:54engineering but it's really just kind of
40:56tweaking what you send into these models
40:59um to get to get a better response um
41:02you saw that on the the database uh
41:05analyzer um that um you know we don't
41:07just say what's wrong with this query we
41:09actually give it a bunch of extra
41:11information uh like the schema or or the
41:15indexes uh and then it it takes all of
41:18that into account so uh we've gone
41:20through some you know trial and error to
41:22see what kinds of prompts give the best
41:23the best result for that so that's
41:25another area where um as we ask at
41:27different questions to analyze different
41:29things for example um we have to also
41:32kind of figure out what what works and
41:34what doesn't um we did quite a bit of
41:36that on the um the query analyzer and
41:39finally um user reinforcement learning
41:41the the more these are used the more you
41:44you guys use them and the more we we
41:46test them the better they get right so
41:49uh it may be inconsistent or uh some
41:52things are not that impressive at first
41:54but they only get better they only go in
41:56so that gives me confidence on our road
41:59map um we're already doing some things
42:02with uh log analysis um uh particularly
42:06what runs in servoy Cloud for for
42:08customers that that run applications in
42:10our Cloud we can Harvest those log files
42:14and and start to understand more things
42:16about what happens in servoy
42:18applications um and we can start to do
42:20some kind of application analytics on
42:23the way applications run right so that's
42:26that's one area is just
42:28improving um uh what we can see from
42:32from our cloud and and what features we
42:34can offer on top of that so I think
42:35we'll we'll see more development in that
42:38area um something I think that is also
42:40interesting is um using AI in you know
42:46to understand more about your your
42:47application right so um we saw a little
42:50bit of that when I sent the snippet of
42:52the source code but um what if what if
42:54an AI could be could ingest like your
42:57whole solution right all of the metadata
42:59that goes with that and you could say I
43:02don't know like make a form that does
43:03this or um create a calculation that
43:06does that right it would understand
43:08first the servoy technology but then
43:10also understand your solution and and be
43:13able to do some generative stuff in your
43:15application but I think those first two
43:17points are are more like how can we use
43:19this to improve our product uh and to
43:22make it um sort of serve our mission
43:24which is to make application business
43:26application development easier and and
43:28and more powerful to build better
43:30applications but I think the Holy Grail
43:32is also how do we do AI enablement in
43:36the applications that are built in
43:37servoy um so that's something that um
43:41we're curious about um uh and we'll be
43:44exploring and I think it helps if um we
43:46talk to customers and understand what
43:48their what their use cases are and we we
43:51have had some conversations and we're
43:52looking to do some some proof of
43:54Concepts around this where we can can
43:56say yeah servoy can help your
43:58application to take advantage of of
44:00these same Technologies not just improve
44:02our own product but let you improve your
44:04products so that's kind of on our road
44:06map and what we're thinking about in
44:10area Okay um so that's that one uh final
44:15demo and this one should be a bit
44:16shorter I just an update on on what's
44:18new in servoy Cloud apart from what I
44:20just showed um uh again we also are
44:24releasing servoy Cloud on sort of a
44:26quarterly Cadence along with the core
44:28developer product uh so I want to show
44:30the log activity viewer um which is a
44:33more enhanced view of log files uh a bit
44:37of the monitoring we're doing on
44:38databases and then a teaser on our
44:40endtoend testing um capabilities so
44:46that and for this one I don't have to
44:48switch to the IDE anymore I'm going to
44:51I'm going to take the same um uh names
44:55space space here the one that that's
44:57actually running servoy Cloud uh and
44:59look at I'll look at the same
45:03here um the production
45:07environment and um here if I look at the
45:09log activity um got get a bit of a
45:12warning on what what needs attention
45:14I've already filtered this um to show
45:17errors um and you can see there's a few
45:20errors here uh one thing that we're that
45:23we're offering here now is that if you
45:27you know I should actually show I think
45:29I had a tab open here this is what the
45:32log file looks like on the application
45:35server admin page and I've always
45:38thought that this is pretty brutal like
45:41Trace good luck with that right um and
45:45then people who get more experience they
45:46kind of learn what these mean or they
45:48they they post on the Forum or they send
45:50a support ticket in I'm having this
45:52problem oh send me your log here's what
45:53I see my log right I always always
45:57be that this stuff gets hidden and that
46:00that the product itself can tell you
46:02what your problems are and how to fix
46:04them so we're getting closer to that
46:06with this view of course we want to
46:08capture the raw log file uh but here if
46:12I show more info about this this log you
46:16can see that it shows um the log message
46:19but it also is able to identify exactly
46:21where that's um bubbling out from my
46:27and uh so this is this is one area where
46:29we can see an improvement like okay it's
46:32it's having this problem but it's also
46:35happening right here when I call this
46:37line of code so you can go in and
46:39troubleshoot your own code there um I
46:42think this is just the beginning we can
46:44we can probably make this a lot smarter
46:46uh but it's one nice area that's that we
46:49added in servoy Cloud uh in this release
46:52uh and you can also toggle on and off
46:54the um the stack Trace right I think the
46:58stack Trace is not so useful to look at
47:00and it's pretty intimidating when you
47:01see all this like you know stuff here um
47:05the other thing is that um you you can
47:08truncate the response as well right so
47:11by default we truncate it we kind of
47:12hide the stack trace and we show you
47:14what may be relevant which is where the
47:19um the other thing I was going to say
47:30we think that uh there's two kinds of
47:32log messages uh one is a problem that
47:35originates in in your code right um like
47:38you you do something that throws an
47:39error and and it originates in your
47:41source code and there's also stuff that
47:44just happens as the application's
47:46running that's maybe in deeper in the
47:48stack right and and those I think are
47:51are the ones that are most intimidating
47:53because like they mean something
47:55something but you don't really know what
47:57to do about them so the other area that
48:00I can't really demo this but that we're
48:01looking at is um like I said before
48:04we're harvesting log files uh for
48:06applications that run in our cloud and
48:07we're sort of codifying them uh and uh
48:11categorizing them uh to be able to then
48:15in the future suggest like what what you
48:18might do to fix it right um so that
48:22ideally this View kind of over time
48:24changes from like a bunch of technical
48:26stuff to like yeah you have this problem
48:28maybe you want to do this and the kind
48:30of the same approach we're taking with
48:31the query analyzer there like what what
48:33can I do about it so that's that's one
48:37we'll we'd like to improve
48:40on um another thing that's just new that
48:43I want to highlight if I go
48:47um to this application uh sorry the
48:51environments um and I look at the
48:54production environment here I have one
48:57database um now we have a database stats
49:01view so we can start to look at some
49:03statistics on that database um cach hit
49:06rates and read stats um you can see the
49:10different kinds of uh reads that you can
49:12turn on and off here and you can filter
49:14this by by time again this is um I think
49:18in the same Department as log files
49:21where uh we want to start to identify
49:24what we think is you know could be a
49:26problem and bring that to your attention
49:28and what to do about it and not make you
49:31at uh you know statistics I don't think
49:33that anyone really wants that but this
49:35is a start and I think we'll be able to
49:37improve that similar to what we have in
49:39the environments view here where you
49:42know we started to show things in system
49:44Health like if Ram gets up over a
49:46certain threshold we're automatically
49:48taking Heap dumps or if CPUs get up over
49:51a certain threshold we're automatically
49:53taking stack dumps uh and and and
49:55sending those off for analysis so the
49:58whole idea is to become more proactive
50:00on things that are happening in in a
50:04environment um so the the last thing I
50:06wanted to show was um on the testing
50:09side and that is a pre-recorded uh
50:15have so I'm going to go ahead and and
50:18start this um this what we're looking at
50:21here is um Cypress uh Studio Cypress is
50:25a um a test automation uh tool it's a
50:30pure JavaScript implementation of test
50:33automation uh and we've had test
50:35Automation in seroy Cloud for a long
50:37time um however the project that we used
50:42which was open source um became
50:45deprecated uh so we we were looking for
50:49alternative excuse me but also we've
50:51we've all we've always been looking for
50:53like a test recorder so this is a test
50:55recorder um in Cypress Studio that can
51:01locally and so I'll just let this play
51:04here you can see that here you're
51:05choosing a URL uh so this could be your
51:08Local Host solution or you could point
51:09it to a a host solution somewhere uh and
51:13and say okay I'm going to use that to
51:16commands and as the users um moving
51:20along here you can add assertion
51:21statement so here uh the user is
51:24asserting that um the login screen is
51:26visible basically and you can see that
51:28it's you know that it has text and it
51:31choose login right so that's one thing
51:34that just says Hey the login screen
51:35showed now as the user is entering into
51:37the fields it's recording that that the
51:39user did an input on this element with
51:41this value and the next element with the
51:43next value and they click this button
51:45and that creates a test command the
51:47whole way again on the next page maybe
51:49just add another Asser assertion that um
51:52the welcome page showed and save that to
51:56right so um now we're able to uh play
52:00that back and you can see it well played
52:03quickly uh and this goes into one of
52:06these I'll pause here one of these um uh
52:10Cyprus uh. JS files so it's it's a
52:13single test spec and um you can see the
52:17JavaScript that gets generated to play
52:19back the test right um the nice thing
52:23about this is that um this is is a a
52:26third-party Tool uh that works really
52:28well and we've adapted um servoy Cloud
52:31to to automate Cypress tests uh so if
52:35you do test Automation and you put these
52:38files under revision control um that
52:42when you commit them or you make a
52:44commit back to your repository um the
52:47seroy cloud build automation you can
52:48configure it for test Automation and
52:50it'll just run your your tests for you
52:52and and generate the
52:54reports uh so that's um uh that's a
52:57really nice um feaser here um we expect
53:00this to be ready uh pretty soon we're
53:02just making some some final tweaks uh to
53:06it and we may add some features around
53:08um uh the assertions that you can do
53:11maybe there's some enhancements we can
53:13add but um we wanted to show this to you
53:15because yeah I'm not too too good with
53:18with testing but can you one time repeat
53:20or summarize in really basic terms for
53:22me what this can do for me
53:25maybe I'll just jump to the over VI
53:29um yeah so essentially what we saw is
53:32that um we took the Cypress Studio we
53:35pointed it to a running uh survoy
53:38application it could be local or it
53:39could be in the cloud or something um
53:43while we're running the application we
53:44can click in the studio like on the
53:46screen and add these assert statements
53:48like did the login screen show or was
53:50the value in the field this Etc right
53:52like any test as assertions things that
53:56true uh and then it also records all of
53:59the clicks that you made right so I type
54:02in this field I I click this button uh
54:05and it writes those to that test file um
54:07if that's under revision control then
54:09then it will automatically run those
54:11tests for you in servoy Cloud so um uh
54:14we've always wanted to have a recorder
54:16for the test automation part of servoy
54:18cloud and um now with cyber studio um uh
54:22we have that recorder so we've adapted
54:23serway Cloud to be able to run run those
54:25tests does that wow yeah that no Victor
54:30yes yeah and then so again the um we
54:34expect this to be we're still tweaking
54:36it but I wanted to give you a teaser so
54:37hopefully in the next release um and
54:39then we'd like to make um servoy Cloud
54:42as a whole more self-service more
54:44monitoring and analytics and um
54:46something else that that's coming up is
54:48um uh we're updating the integrated
54:51project case management system that
54:53comes with it there for tracking you
54:55know Agile development so that's kind of
54:57on the road map there I think we're
54:58coming up on the hour and my throat's
55:00getting scratchy yeah we have two two
55:02more minutes if we want to stay with the
55:04time books yeah all right so
55:07um one announcement that I want to make
55:10here uh that um 20243 the upcoming
55:14release will be the last release that
55:17will um will support the smart client
55:20and the web client the two longtime uh
55:23Legacy client types in servoy
55:26um so what that means is that that that
55:28release will include uh support for
55:31those and then when we build a long-term
55:33supports we always build them on the q1
55:34release the3 release so uh if you're
55:38running those client types you'll have a
55:39two-year Runway after that on the
55:41long-term support Branch so they'll
55:42continue to receive uh maintenance
55:45support uh on those branches for two
55:47years after that but you would for
55:49example if you went to
55:5220246 you wouldn't run uh smart CLI or
55:55web CLI on that you would just stay on 3
55:57and then and then get the the LTS
56:00updates so that's an important
56:02announcement and um yeah in 2024 uh we
56:06want to um uh Focus uh more on the
56:09developer Community with documentation
56:11knowledge sharing templates more
56:13webinars uh we taken that as feedback
56:15from you guys and uh we're going to be
56:18investing in seroy cloud and and in
56:19server AI in um in this year so let's uh
56:23jump to uh the question questions Victor
56:26uh yeah where shall we start shall we
56:28start with the AI questions first sure
56:31so um the first one that I really liked
56:35is how much do we at servoy use servoy
56:39AI how much do we I I I have to well
56:44servoy AI um I have to admit I'm using
56:47um the chat GPT plus a lot for work just
56:50to do dumb stuff faster um so I really
56:54like that that the other thing that I've
56:56been using personally uh are custom gpts
57:00which is another area we're going to be
57:02exploring so these are uh gpts that you
57:05can sort of kind of train yourself
57:08without having to know much about
57:10training and like fine-tuning and model
57:12training um so I've I've been
57:14experimenting with feeding it um
57:17documentation and Forum posts and um
57:21like it I can it can scrape the Forum
57:23and and um scrape the release notes and
57:27and be up to date so it used to be these
57:29things were like out of date after
57:322021 uh so it could be that like the
57:35chat support that we saw uses a custom
57:38GPT instead of vector embedding on
57:40documentation the results from that
57:42could be a lot better um so I personally
57:46am am using it a lot um I'm kind of
57:49excited about it uh cautiously excited
57:51about it um and yeah we're using it
57:55um I know some of our developers I've
57:56seen them using um uh um like the code
58:02uh uh not the servoy AI itself but using
58:06um you know uh uh what do you call
58:10co-pilot like features um developing as
58:13well so um yeah I mean I think it's just
58:16something that's coming that we have to
58:18absorb and um see what what we do with
58:20it it's it's growing on me as
58:23well um and another question is so we've
58:27we've had this before but what happens
58:28with the um privacy of the AI will the
58:31code that is being analyzed being sent
58:33anywhere what happens if you analyze
58:35your data model for example that's a
58:37good that's a good question there um
58:39there is a a waiver or a um not a waiver
58:43a what do you say a consent that you um
58:49um uh that because if you if you select
58:52your your source code and then you know
58:54know send it to be analyzed you are
58:56sending potentially proprietary stuff to
58:58a third party right we route some of
58:59this through things like open AI
59:02although we're we're sort of llm
59:05agnostic um we can change um uh at any
59:10point but um yeah it's it it could go to
59:13a third party so you should understand
59:17um it's a good little Ester uh while
59:20using it and and nobody really knows
59:23what that means right now you know just
59:26a well that's something we have to
59:28figure out as well along the way and how
59:30we can minimize the risk yeah uh so
59:34those were the AI questions then going
59:35back all the way to the first part about
59:37surway security um what happens with the
59:41old surway security module the one that
59:43you import Into Your solution and how do
59:46you migrate yeah yeah so that is the the
59:48svy security module well so so I'm glad
59:51I'm glad that question was asked because
59:52I meant to to mention that a bit more in
59:55um uh so the svy security module is um
59:59still worth using uh in particular for
01:00:06scenarios um the the reason that that we
01:00:10have that we're offering the cloud-based
01:00:13security um is that it's sui security is
01:00:17used by a lot of people who maybe don't
01:00:19need it right and then you still have to
01:00:21include a module and and extend a login
01:00:24form and right as a developer activity
01:00:27to get authentication working um and I
01:00:29think Victor you and I had a
01:00:31conversation like a year ago where you
01:00:32were working with a customer and they
01:00:34were like surprised they had to do all
01:00:35this just to like they want to add users
01:00:37and set their permissions and be done
01:00:39with it right and and they don't want to
01:00:41do that in development they want to do
01:00:44it as like an administrative function um
01:00:47uh so that's kind of the the the main
01:00:50reason that we're offering one of the
01:00:52main reasons we're offering that so the
01:00:54spy security module is is still worth
01:00:57using I think for um if you have cases
01:01:00where you have different organizations
01:01:02and they maybe have their roles
01:01:03configured differently if you want to
01:01:06allow your end users to do security like
01:01:10things in your application right so so
01:01:13if if if you have an application like a
01:01:15product and you're a software vendor and
01:01:17you you want to you know have your have
01:01:21the Security Management be part of your
01:01:23product then probably the sui security
01:01:26module is still a good way to go we may
01:01:28put some of that onto the road map of
01:01:30what we're doing but for now um this is
01:01:33more for like managing a single org and
01:01:36you know users and and roles and
01:01:38authentication for for that
01:01:41org okay that makes sense and um how
01:01:45would that then work if you're not using
01:01:47something like the suro cloud and that
01:01:49same thing goes for the AI part can you
01:01:51benefit from all the features that we're
01:01:52offering without serway cloud
01:01:55yeah so um the you don't have to host
01:02:00your application in Servo Cloud to use
01:02:02that so I want to uh I want to stress
01:02:04that it is sort of like you know these
01:02:06other identity access management
01:02:08platforms where you can Define your
01:02:09security schema there your users your
01:02:12your roles your permissions um there and
01:02:15then you can you can sort of Federate
01:02:17your application security against that
01:02:19but you can host it wherever you want so
01:02:20that that's possible one thing that uh
01:02:23one small thing might have noticed um I
01:02:25didn't demo it but I mentioned it is
01:02:27that um when you build through servoy
01:02:30Cloud it'll sync those permissions for
01:02:32you like because those permissions are
01:02:34really in in your source code right so
01:02:36it'll actually pull those out and sync
01:02:38it to your your sort of servoy cloud
01:02:41security schema for you um so it's nice
01:02:45if you you're at least building your
01:02:46applications in servoy cloud like
01:02:48generating the the docker image or the
01:02:50war file um but you you don't
01:02:53technically have have to do that you
01:02:54could manually make those sort of copy
01:02:57those permissions up um and still
01:03:00Federate your your application it's
01:03:02totally decoupled the runtime and the
01:03:04security and it will stay that way okay
01:03:06but there are some features that you
01:03:09from just the syncing it's like a um
01:03:11it's not an application feature it's
01:03:13more of just like a convenience for the
01:03:15developer and and assuring that you know
01:03:17what what you did in Source matches
01:03:19what's available in runtime
01:03:23okay um then we have let's see I think
01:03:27this is the last one um you mentioned
01:03:30that the smart client and the web
01:03:32clients will be deprecated what about
01:03:37ng1 uh ng1 uh for now is still um still
01:03:43shipped um and will still run
01:03:47um at at some point we we probably want
01:03:51to remove the sources um
01:03:55uh the important thing to know about uh
01:03:57ng1 is that it's based on on
01:04:01angularjs which is deprecated right so
01:04:04you're already running and servoy
01:04:07offered uh for a couple years a um an
01:04:11LTS version of of that was supported by
01:04:15a third a third party company an LTS
01:04:17version of angularjs but if you run ng1
01:04:21today you're already kind of technically
01:04:23running unsupported
01:04:25software in the sense that angularjs
01:04:27itself is deprecated and and we no
01:04:29longer issue that long-term support
01:04:32contract on that so um as far as like it
01:04:36being something that will will run um I
01:04:41don't think we'll be removing the source
01:04:43you know for ng1 for a while because
01:04:45people I think some people are still
01:04:48migration um but it's already been also
01:04:52for a while we announced a while back
01:04:54that it's in hibernation mode so if you
01:04:56if you see a a bug fix on a component
01:05:00for example it's fixed in in titanium
01:05:02it's not fixed in ng1 right and that's
01:05:05so that's been the case already for a
01:05:09okay okay um yeah I think that is the
01:05:13the questions that we'll handle for now
01:05:15one last note is that Johan let us know
01:05:17that he is using GitHub co-pilot to
01:05:20develop the the survoy platform so I
01:05:23think the AI is being used to develop
01:05:25our platform already it's good to know
01:05:28thank you and I'm happy Johan watches
01:05:30our webinars too yeah of course he needs
01:05:34to know if we we are telling the right
01:05:36right things okay well thank you all uh
01:05:39thanks everyone for attending thanks
01:05:41everyone for uh answering the poll the
01:05:44the results are very useful uh our
01:05:46apologies for going over time we'll work
01:05:48on that for the next one Everyone likes
01:05:50a sharp time box I can't make any
01:05:55no I think we had we had a lot of great
01:05:57uh great content this time uh and a lot
01:06:00of promising things that uh that you
01:06:02showed um and then we'll hope to see
01:06:04everyone in the next product release
01:06:08right yeah yeah in uh next next quarter
01:06:11all right then thanks everyone for uh
01:06:14for attending and we'll see you the next
01:06:16time okay right for