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.

