WEBVTT 00:00.000 --> 00:18.000 I think you will show us that today the world has changed and it has changed. 00:18.000 --> 00:20.000 Thanks a lot. 00:20.000 --> 00:26.000 So, my name is Enkella, I'm the city of startup that's coming from the political leaders in the Barcelona. 00:26.000 --> 00:30.000 And we do software for power systems and consultancy. 00:30.000 --> 00:34.000 And they adopted the program that I started 10 years ago. 00:34.000 --> 00:40.000 And now I became the city of, you know, the route to the C-suite is that make open source. 00:40.000 --> 00:49.000 So, if I need to think of the description of what a modern power system software is, 00:49.000 --> 00:57.000 it's one that it tackles all the typical things that I need to be a power system engineer. 00:57.000 --> 00:59.000 And that would be, 00:59.000 --> 01:07.000 way phenomena, electromagnetic phenomena, electromagnetic phenomena and political phenomena. 01:07.000 --> 01:11.000 So, I need to, you know, go full stack. 01:11.000 --> 01:17.000 And, usually, this way phenomena is tackled through EMT literature, 01:17.000 --> 01:19.000 management trends in simulations. 01:19.000 --> 01:23.000 And they are being asked when something wrong is going on. 01:23.000 --> 01:25.000 Usually, in connection studies. 01:25.000 --> 01:29.000 Also, RMS will be the route in the square of that. 01:29.000 --> 01:31.000 And then power flows. And then planning. 01:31.000 --> 01:33.000 And then you get all of these. 01:33.000 --> 01:40.000 So, if we think at least this is the stuff that influenced me personally. 01:40.000 --> 01:42.000 If we think of a landscape. 01:42.000 --> 01:46.000 Tools that tackled pieces of these problems. 01:46.000 --> 01:50.000 We can go as far as 1960 with EMTP. 01:50.000 --> 01:54.000 Then, businesses of course, that now, with somebody, 01:54.000 --> 01:56.000 same as, has 70% of market in T-SOS. 01:56.000 --> 02:00.000 Power factor is the tool made in Germany. 02:00.000 --> 02:04.000 It's a great one. It's one of the few ones that tackled the whole thing. 02:04.000 --> 02:06.000 Then, my power, I would say that, 02:06.000 --> 02:10.000 I really want to do any more in today's because of my power. 02:10.000 --> 02:14.000 And then, stuff that happened over the years. 02:14.000 --> 02:18.000 Please, please, I would say it's the only one that tried to tackle everything. 02:18.000 --> 02:20.000 By Rikomilano. 02:20.000 --> 02:23.000 And then, I started something in 2016. 02:23.000 --> 02:28.000 I was in Gritkel, and I was called Verabrit, and you can ask me later why. 02:28.000 --> 02:32.000 And, yeah, I just put the Python stuff. 02:32.000 --> 02:38.000 I know there's also other softwares in Julian's own. 02:38.000 --> 02:44.000 So, if you need to ask, what is a good design? 02:44.000 --> 02:48.000 It would be something that doesn't change when the conditions change. 02:48.000 --> 02:52.000 So, this is my first lease in 2016. 02:52.000 --> 02:54.000 And here's the current lease in 2016. 02:54.000 --> 02:58.000 You see that many differences, but there's something that's still there. 02:58.000 --> 03:04.000 I can tell you right away that back in this unrecognizable, from one to the other. 03:04.000 --> 03:08.000 And from that process, when I, at least that I know, 03:08.000 --> 03:12.000 I've refactor all the software seven times to refactor me in skill everything starts. 03:12.000 --> 03:16.000 Because something, there was something, you know, that was smelly. 03:16.000 --> 03:19.000 That wasn't allowed me to advance, kill and start over. 03:19.000 --> 03:23.000 And don't be afraid of that. That would be my tip zero if you want. 03:23.000 --> 03:29.000 So, this talk is about giving you tips of how to develop such tools such that they survive, 03:29.000 --> 03:32.000 and they eventually tackle the whole thing. 03:32.000 --> 03:35.000 So, the number one tip is make it really only. 03:35.000 --> 03:39.000 I know this might be a bit cryptic, you know. 03:39.000 --> 03:42.000 But in computation, every time you create something in memory, 03:42.000 --> 03:45.000 and you go back and try to change it, the computer says, 03:45.000 --> 03:47.000 hmm, expensive stuff. 03:47.000 --> 03:51.000 So, that's a bit of thing to, 03:51.000 --> 03:53.000 it's hard to realize of that. 03:53.000 --> 03:57.000 I realized of this one, the writing is simple as plus engine, 03:57.000 --> 04:02.000 and by not respecting this, I was capping 30% of the performance. 04:02.000 --> 04:06.000 So, every time you have a database, once you use a write it, 04:06.000 --> 04:10.000 keep it away, once you start a simulator, keep it away, 04:10.000 --> 04:13.000 once you write the results, keep it away. 04:13.000 --> 04:16.000 That's right. 04:16.000 --> 04:20.000 This one is let the objects flow. 04:21.000 --> 04:26.000 This implies that I use objects in contraposition to use in tables, 04:26.000 --> 04:29.000 which is what most people use. 04:29.000 --> 04:32.000 And an object is nothing but a table, 04:32.000 --> 04:37.000 that the things inside the table can be more tables. 04:37.000 --> 04:41.000 If you think like that, so objects can point to other objects. 04:41.000 --> 04:46.000 So, if you run typical simulations like optimal power flow, 04:46.000 --> 04:50.000 or something linear, you don't really need to be that flexible. 04:50.000 --> 04:53.000 You can use tables, but there's a simulation, 04:53.000 --> 04:56.000 where the user is going to tell you the equations. 04:56.000 --> 04:58.000 It's not you the programmer, the user is telling you, 04:58.000 --> 05:00.000 and for that you will need a symbolic framework, 05:00.000 --> 05:03.000 that you will need to link to the stuff of the real life, 05:03.000 --> 05:05.000 like a line, a load, a generator, 05:05.000 --> 05:09.000 and the equations tell how those objects behave in real life. 05:09.000 --> 05:12.000 And you as a programmer cannot tell those equations 05:12.000 --> 05:14.000 because they're infinite equations. 05:15.000 --> 05:21.000 So you need to be a bit flexible and, again, use subjects instead of tables. 05:21.000 --> 05:23.000 This is looking complicated already. 05:23.000 --> 05:26.000 So if I'm making a software with objects, 05:26.000 --> 05:30.000 that an object is a foreign concept for most power systems engineers, 05:30.000 --> 05:33.000 and I'll really tell you that everything should be objects, 05:33.000 --> 05:35.000 objects inside objects and stuff like that, 05:35.000 --> 05:38.000 then how do I make it simple? 05:38.000 --> 05:41.000 Then I put a graphical use interface on top, 05:41.000 --> 05:42.000 but it's dummy proof. 05:42.000 --> 05:45.000 Everything that you click, shoot and crash. 05:45.000 --> 05:49.000 And it should be more or less what power systems engineers are used to. 05:49.000 --> 05:52.000 So let the GUI handle the workflows. 05:52.000 --> 05:56.000 Don't worry so much about if your interfaces below 05:56.000 --> 05:59.000 are kind of complicated to the user, 05:59.000 --> 06:01.000 if the interface is going to be this. 06:01.000 --> 06:05.000 Of course, this is the hardest part of the whole project. 06:05.000 --> 06:08.000 Making something that looks like this and works and everything, 06:09.000 --> 06:12.000 and how to represent the structures in such a way, 06:12.000 --> 06:14.000 is what took me the most time to figure out. 06:14.000 --> 06:16.000 Great, thanks. 06:18.000 --> 06:21.000 Refactor now or pay later. 06:21.000 --> 06:25.000 If something is not really, really fulfilling 06:25.000 --> 06:28.000 what the user's expect or what you think should be, 06:28.000 --> 06:31.000 there's a refactor going on. 06:31.000 --> 06:35.000 Back when I was working on the Spanish DSO, we had this model. 06:35.000 --> 06:39.000 Spain, Portugal, France, and this model was taking, 06:39.000 --> 06:42.000 so it was a couple of years of data and so on. 06:42.000 --> 06:44.000 So everything in the model could change, 06:44.000 --> 06:46.000 not only the low-syngration, everything. 06:46.000 --> 06:50.000 So status of things, switching, many, many things. 06:50.000 --> 06:55.000 And it took 63 gigabytes of RAM in the program at that stage. 06:55.000 --> 06:58.000 So I started getting complaints like, 06:58.000 --> 07:02.000 man, we have a ADO, it's laptops, we can work with this, 07:02.000 --> 07:04.000 but we have to work with this. 07:04.000 --> 07:11.000 So 63 is a big number, what if we dropped the six, right? 07:11.000 --> 07:15.000 We just removed the six, how is that looking? 07:15.000 --> 07:19.000 So what I did was taking many big tables, 07:19.000 --> 07:22.000 tables again and what before, there are many things for repeated. 07:22.000 --> 07:25.000 If you compress those tables with sip, those tables, 07:25.000 --> 07:27.000 compress two gigabytes. 07:27.000 --> 07:30.000 The challenge is to replicate that sipping process 07:30.000 --> 07:33.000 into something that you can edit. 07:33.000 --> 07:36.000 So we came up with something called the Harry Profile, 07:36.000 --> 07:38.000 that is dense and sparse. 07:38.000 --> 07:41.000 Because of that, people can do the planning of Spain 07:41.000 --> 07:44.000 with my software in a DSO. 07:44.000 --> 07:48.000 Because of this kind of innovation. 07:48.000 --> 07:50.000 Another thing you would be, 07:50.000 --> 07:55.000 design by layers, what does that mean? 07:55.000 --> 07:59.000 It means that you don't need to tackle all the interfaces 07:59.000 --> 08:01.000 in the same interface. 08:01.000 --> 08:04.000 That would sound stupid, you know? 08:04.000 --> 08:06.000 But of course you don't have to do it. 08:06.000 --> 08:09.000 A typical example of this is that a line can come 08:09.000 --> 08:12.000 in something called per unit parameters, 08:12.000 --> 08:15.000 or it can come with own parameters. 08:15.000 --> 08:20.000 Electric engineering stuff, but it can come with way one or way two. 08:20.000 --> 08:22.000 Don't need to tackle both and once, 08:22.000 --> 08:28.000 tackle one of them and the other, you support it through a function, simple stuff. 08:28.000 --> 08:32.000 Going deeper to the design, I have a database, 08:32.000 --> 08:34.000 and then I have something called numerical data, 08:34.000 --> 08:37.000 which is views of the database that are very, very, 08:37.000 --> 08:39.000 very fast for computation. 08:39.000 --> 08:42.000 And in fact, getting the view of the database 08:42.000 --> 08:45.000 is a copy operation, so it's very cheap. 08:45.000 --> 08:49.000 In contrast with going through arrays and stuff like that, 08:49.000 --> 08:52.000 it's very expensive, if you don't know it right. 08:52.000 --> 08:55.000 And you do the apology processing, which is usually very expensive 08:55.000 --> 08:57.000 to do on a database, you do it on data, it is snap. 08:57.000 --> 09:04.000 Then simulation, then results by layers, everything. 09:04.000 --> 09:10.000 Then about files, a file is whatever it is in the memory of a problem, 09:10.000 --> 09:14.000 save to disk, that's the simplest way of thinking about it. 09:14.000 --> 09:18.000 But then what I say is that this file, 09:18.000 --> 09:24.000 usually a memory dump, is a contract between past and future versions of the software. 09:25.000 --> 09:28.000 So I say, write them parts. 09:28.000 --> 09:31.000 So I take my memory, whatever it is in the problem, 09:31.000 --> 09:34.000 I make an interpretation, I save it to disk. 09:34.000 --> 09:39.000 Right now, the variable files are as simplified with JSON's inside. 09:39.000 --> 09:42.000 This was the fastest way of getting information on the time, 09:42.000 --> 09:44.000 and then parse it back. 09:44.000 --> 09:51.000 And with this contract in mind, today I can't read the files I was creating ten years ago. 09:51.000 --> 09:56.000 I was using Excel as a file format, you know, really bad, 09:56.000 --> 10:01.000 but I can't read them today, because of this thing. 10:01.000 --> 10:05.000 Many simulations, many formats, one book. 10:05.000 --> 10:09.000 There is a paper from the 1960s that says how committed is invent. 10:09.000 --> 10:15.000 It is incredibly relevant today, because it essentially says that any person or organization 10:15.000 --> 10:20.000 when they write software, they replicate themselves and structure in the software. 10:20.000 --> 10:25.000 So if you know how am I inside, I'm a star pattern, 10:25.000 --> 10:30.000 and I try my company to be a star pattern. 10:30.000 --> 10:36.000 Because what I want in the end is to have a software that is not one simulator for one method. 10:36.000 --> 10:39.000 They want a simulator for all of the methods. 10:39.000 --> 10:45.000 So I make it such that it is a system that allows methods to come in in this star pattern. 10:45.000 --> 10:50.000 And with this I conclude, a question, please. 10:50.000 --> 11:00.000 Thank you. 11:00.000 --> 11:03.000 Don't be afraid. 11:03.000 --> 11:06.000 What do you like really? 11:06.000 --> 11:09.000 Cute. 11:09.000 --> 11:13.000 Oh, what do I use for the graphical interfaces? 11:13.000 --> 11:23.000 So I've regretted many times, but now it's more stable, so I like it better. 11:23.000 --> 11:28.000 Is it open-source and how do you found it? 11:28.000 --> 11:29.000 It is open-source. 11:29.000 --> 11:34.000 I started with a GP library, a GP license, then an L GP license, 11:34.000 --> 11:39.000 and then I switch it to a musculoskeletal license and how do I find it? 11:39.000 --> 11:41.000 By working, you know, 11:41.000 --> 11:45.000 the first eight years of this, I found it by just going home and doing it. 11:45.000 --> 11:50.000 Eventually, with time, I can list my managers at companies that this is the way. 11:50.000 --> 11:53.000 So I managed to do things that work. 11:53.000 --> 11:55.000 And now is the same. 11:55.000 --> 12:00.000 We found this by making it work for people. 12:00.000 --> 12:04.000 By being a viable replacement, by the way. 12:04.000 --> 12:13.000 So now we go to TSL, so we show them this stuff, and they don't have like a hard time getting into the program. 12:21.000 --> 12:24.000 Question is how much adopters is there? 12:24.000 --> 12:32.000 So I would say, well, from what I can measure, there were, there are like 1.5 million downloads, something like that. 12:33.000 --> 12:36.000 Adopters? I don't know. 12:38.000 --> 12:42.000 You can check by the downloads, by the, yeah. 12:42.000 --> 12:48.000 How do you enable collaboration between multiple people using this offer? 12:48.000 --> 12:55.000 In print, so question is, how do I enable collaboration? 12:55.000 --> 12:57.000 That's the hard question. 12:57.000 --> 13:04.000 What I'm going to say is a bit opposed to what you would like me to say. 13:04.000 --> 13:07.000 So I forced them. 13:07.000 --> 13:14.000 So when people come to, to collaborate with this, I tell them, it has to be super high quality. 13:14.000 --> 13:17.000 It has to be object oriented, it has to be clean, it has to be efficient. 13:17.000 --> 13:22.000 So all these tips I said, some people chicken, some people don't chicken and continue. 13:22.000 --> 13:29.000 The people in my company, when we hire, I make sure that they know what they come for. 13:29.000 --> 13:35.000 And for external people, I make sure that they know what they're up to. 13:35.000 --> 13:39.000 Sorry, I was not talking about the development process. 13:39.000 --> 13:45.000 Oh, but if you have this offer, and you will think to be focused on that stuff, 13:45.000 --> 13:47.000 yeah. 13:47.000 --> 13:50.000 Oh, exactly, great question. 13:50.000 --> 13:54.000 So the, how's the collaboration in the software itself? 13:54.000 --> 13:58.000 So right now, we do it through something called Delta's. 13:58.000 --> 14:01.000 Essentially, the database that we have is differential differential. 14:01.000 --> 14:07.000 So you can compute differentials, and then you can join those differentials. 14:07.000 --> 14:11.000 And that's how we, we are working in my company right now. 14:11.000 --> 14:14.000 People do different stuff, and then we merge. 14:14.000 --> 14:18.000 And there's a conflict, and so does that. 14:27.000 --> 14:32.000 So question is, if I, if we have a piece of code that handles symbolic code, yes, we do. 14:32.000 --> 14:38.000 And in fact, we, we didn't use Sympire or anything like that because of a practicality. 14:38.000 --> 14:43.000 That is in Sympire, if you declare A or B two times, for Sympire it is the same variable. 14:43.000 --> 14:46.000 But for using in this, it has to be different variables. 14:46.000 --> 14:53.000 So we went all the way to developing a symbolic framework that can handle differential equations. 14:53.000 --> 14:57.000 How do you assess the conformity of the topology in your own software? 14:57.000 --> 15:01.000 Question is, how do I assess the conformity of the topology? 15:01.000 --> 15:06.000 You mean that if someone writes something that it is actually connected? 15:06.000 --> 15:08.000 Or is it conform to reality? 15:08.000 --> 15:10.000 How to reality? 15:10.000 --> 15:14.000 So question is, if it conforms to reality? 15:14.000 --> 15:17.000 My answer is, I don't care. 15:17.000 --> 15:21.000 My answer is, I don't care, if it conforms to reality. 15:21.000 --> 15:24.000 But answer maybe, you know, but this is a power system model. 15:24.000 --> 15:27.000 So it should represent a power system. 15:27.000 --> 15:30.000 If it later represents the reality, that's fantastic. 15:30.000 --> 15:33.000 You can have coordinates and represented in a map and everything. 15:33.000 --> 15:37.000 But up to the user. 15:37.000 --> 15:41.000 Do you find that users also contribute to the software? 15:41.000 --> 15:48.000 The question is, if I find that users contribute to the software less than a 10%. 15:48.000 --> 15:51.000 And the reason is, the one I gave. 15:51.000 --> 15:56.000 The entry value seems huge for people in power systems. 15:56.000 --> 15:59.000 But I cannot lower the order. 15:59.000 --> 16:01.000 It is what it is. 16:01.000 --> 16:04.000 Thank you.