Okay, thank you very much for joining us in the Open Hardware Devroom today.
So our next speaker might need no introduction, but I will give them one anyways.
This is Lucas.
He is the author, lead author of one of the most interesting new projects in the EDA space,
for rising the EDA if you haven't tried it out yet.
You are really missing out.
There's a lot of new paradigms that he has been introducing,
and he is here to talk to us about his plans for the future.
So please give a warm welcome to Lucas.
Okay, so thanks for coming to my talk on Horizon EDA.
As you may or may not know, Horizon EDA isn't the only cat software that I am working on right now.
Since I started working on a 3D cat software named Boom3D bit longer than a year ago,
it was a bit of a type between which software should I talk on,
but since it's been five years since I gave the last public to talk about Horizon EDA,
I thought well, let's talk about Horizon EDA.
So for those of you who don't know about Horizon EDA, it's a full-featureed PCBs,
schematic capture, and they also offer that was basically everything that you need to go from
schematic to finish board.
Since it's been quite a while since I gave the last public to talk,
I'll now go over everything that happened since then, since it's been quite a lot actually.
So let's start back in 2020, so for a project I was working on in back then,
not the one shown here, but something else.
I needed many small boards, and so to make the most economical way is penalization.
So since there was no way to do it in Horizon EDA yet,
I added it in the works the way that you would make in your project,
where you instantiate the board that you want to penalize, can be one project or multiple projects,
and I think the board of the way it works,
and that the board is added by reference,
so that if you have to make some of the last many changes as it always happens,
you just reload them in a panel, and that's it will need to copy paste anything over and over again.
And since it's just a board, you can get very creative,
like here with a combination of these cores and routing to make best use of your panel.
And so for a totally different project,
I had to accurately copy the outline of an existing board.
For other projects that I did the board ten years ago with KaiKat, I did that by
loading the image into an inscape, and then using the XFN port,
that was a bit clumsy, so I thought, well, that's a good excuse to add a picture in port,
and yeah, well, there it is, and it's working for schematic and board,
and you can set things like opacity, scale the image, and render either on top,
or below everything else that's on the board.
So as with every PCBCBD design application, there's a library in my case called pool of parts somewhere,
and with the right idea, it's managed to manage on GitHub in a repo, where people can
approve requests, and so initially, revenue and query requests involved,
pulling that branch locally, reviewing all of the changes locally,
and so on and so forth, and that was really super tedious, and you wanted to do it all on GitHub,
so I wrote a board that parses everything that's in the
pool request, and makes a post to the PR, that includes everything that's in there,
like if all of the checks passed, rendering of symbols, packages, and so on, so the port itself
is part of the codebase of Horizon EDA, it's just that all of it's just a separate binary,
that includes all of the relevant functionality, so one can be sure that what you're seeing here
is exactly what you're going to get later on since it's the same code that renders it.
So when it then comes to actually assembling or debugging boards, it's more of not the
board that you have in front of you on your desk, it's not the same way around,
a subordinate that you've designed, and sometimes then you will tilt your head to see
to make sense of what's where, and that's also something the computer can do,
whereas EDA is a part from looking at a board from the bottom side,
supports rotating the canvas in arbitrary ways, so you can look at your board on your screen
the same way it's on your desk.
So when this day is the for many mechanical parts, like connectors and so on,
you get three models by the vendor, but unfortunately the origin more than not is in the middle of
nowhere, and before I had that feature, I first imported the package in freecat,
then put the origin where I wanted it to be, and then imported it back into Horizon EDA,
since the workflow was really cumbersome, and I had this step model in there anyhow,
I added a functionality that allows you to pick a point from step model and move it to another
point, for example, I could pick the point there on the bottom, and then move it to z equal zero
to place the model exactly on the board, or I can also use paths to align certain features,
and that made important reading models really so much easier, and in a similar way,
related to 3D models, another thing that I did using freecat back then was to make a 3D
2D projection of the model to start my footprint, and I also thought well that would be nice
if I had it in Horizon EDA itself, so I did look at the freecat source code to find the right
opencasted incantation I had to use to get the 2D projection, and well after a bit of hacking,
there is, so when you have your 3D model, you just click on projection,
then you get template that you can use for starting your footprint,
so the pool in Horizon EDA contains the two contains orders,
so that means that if there are resistors of certain values, you'll have one part where
every value, and that this can get by long, with some parts not really being really available,
so Horizon EDA can tie into the DJK API, which has quite a generous limit of 1000 previous
per day, and can then write in a park browser to display how much of that item is in stock at the
GG, so a big feature that I've been wanting to implement basically since day zero,
I had some initial plans for implementing, but after thinking about them at more turns out that
they were really user friendly with having one instance of the schematic at the top hierarchical
block, so now the editor can support multiple instances in one, multiple blocks in one editor,
and you can easily switch between them, then you can also easily switch between the instances
where you can then make changes to parent designator and you do not populate state,
and you can also then edit the symbol for the block and place the block pins there and everything
that you need to make hierarchical schematics, and it's also then in all the possible in the board
to copy and paste, placement and routing between hierarchical blocks, so every and every now and then
people were asking me about only B++ export, not so much for a manufacturing, but they had some
significant employee integrity as software, that only input input or the B++ in one of some other
release range formats, so I thought well would be interested what's the interesting challenge,
and turns out that nowadays you can just download these specifications from the ODB++
website and there's also a free viewer and some sample files to add everything at hand to
implement ODB++ export, a couple of weeks later there is, so horizon EDA and also ports ODB++
and as far as anywhere some people apparently have also used it to get ports made, and after I
was done therefore there's a form on the ODB++ website where you can become a partner
that lists you on the website, while in the form couple of weeks later with some back and forth,
horizon EDA is now in there, so somewhat advanced feature that some people have been asking
no idea if someone ever actually were the bot mate with that, were blind to barred by us,
initially horizon EDA just supported a through BI, since what ever but what just what most people
can afford, but since the feature that probably someone might need in the future, and horizon EDA
also supports blinded barred by us in a way that you set up multiple via definitions, so you can
put in the information you've got from the bot hours in terms of stack up in there, and then
when routing tracks and placing via as you can pick from one of the defined via us in there,
and so one last feature related to more advanced bot technologies are user layers,
some more advanced technologies for boards, they need extra layers for example, like for
widget flexboards or just random annotations, so you now can insert arbitrary layers and
arbitrary places in the stack up, and they can also be assigned the type that's mostly used for
Ruby++ export right now, so as with pretty much any interactive software, the user spends
much time selecting stuff, and one thing that I found quite annoying was I was moving some items,
then move something else, and I think it will, oh well, now I need to move the thing that I
move the minute ago again, so horizon EDA now maintains under redo buffer for the selection,
that's independent from the actual under redo buffer, so when you select something, and one
again you can just use the under selection shortcut, and then get back to what you had selected
a couple of minutes ago, seems like a really trivial thing to implement, but I haven't seen it
anywhere else, so that's one of the nice things about writing your own software, this is pretty
easy to go from, well, it would be nice, it can do that too, well, here it is, so now we are in 2024,
which is almost the present, so if you paid some attention to the date on this slide,
you might have noticed that there was a lot of activity around 2020, and not so much in 2022, 2023,
and so one reason for that is that in late, the thing in late 2023, I started working on
the entry-deer, which is a parameter, a 3D cut software, so since horizon EDA is mostly
one person show with some drive-by contribution from users, there's only so much time I have,
so horizon EDA, whatever that's time, and it's also pretty familiar, it's pretty much doing what I want,
and so as usual I did some projects with it, then that's the initial reason why I
make horizon EDA to make it easier for my own projects, and some of these are shown here,
like the USB-KVN project that you may or may not have thought about, and another project that I did
was the replacement, the replacement PCP uniform of the SD card reader to replace one outflash
in switches, so apart from the horizon EDA project itself, there's also the pull repo with all
of the parts in there, and that's one of the things where the project isn't in technical shape,
since while reviewing this pull repo, it's quite some work, and it's really work, and I
don't find really much time motivation to do it, so yeah, there's quite a lot of pull requests
that have piled up, the pot makes it some more easy to review, but there's something that I don't
really like doing, so people are mostly under own when it comes to making parts, or going through
pull repo and see if there's something that they like, but so the central pull is everything
people can also make their own tools, and mix and match them in a project as they like,
so something that people have been asking me every now and then, there's how many people are
actually using horizon EDA, so to get, since there is, I don't have any, and you don't know
stats for the releases on, on GitHub for, but these are only for Windows, but there are some stats
on that hub for intros or while time, but these numbers, I don't know, they seem really
open-sighted to me, maybe it's just some scripts, or whatever downloading them, so my best guess,
it's like a single, like a double, a small bubble, a little number of users, a thing is definitely
more than 10, but of course, much less than 100, and I think that's also like, for one person
part, like that's a good number of users, since if you have more users, you will get overwhelmed
with feature requests and really strange parts, so I'm going to put it the way it is right now,
and now the probably the part that you call all can hear from, namely what's going on in the future,
so it's been a couple of years now, since GTK 4K mod, and horizon EDA is on GTK 3,
since that's what the latest thing was when I started it back in 2016, so people that I have been asking
well, will you ever purchase GTK 4? So the answer is probably not in the new future, since I have been
using GTK 4 for a new 3D, so I've got some experience there, and well, it's a lot of work, since
there are some deprecated APIs and some things that are just different, so it'll be probably
be half a year of work, and afterwards it'll still look the same, and well, it's not really
benefit to use other that GTK 4 has a longer time to up to less than GTK 3, so one of the things that's
been bothering you the most is that if you make some moderately large parts, the rendering can
get a bit laggy, and that's mostly because for every render when you move something, it iterates
over the whole board and generates the vertices from that, and there's only I've been tweaking
this every now and then to make it a bit faster here and there, but the real thing to make it
really fast is to make it incremental, so that it just withdraws what's user is moving and
has to rest, so basically it's somewhat similar, like how it's already done, with integration
of the calculator, since it also operates that way that it just hides the parts that will
be changed and then only clears and redraws what's being changed, so a feature that I'm probably
need for a future project is a hierarchical bus ports, so right now bus, it's also right now
ports for hierarchical committees can only be seen on that, but when you have a large amount of signals,
like a bus, for example, and that's a little poorly, even that, then you don't want to have
going to connect a signal there every time, so probably sometime this year there'll be
hierarchical bus ports, and apart from that, there are some pending equality of life improvements,
for example, when you change the part in a pool somewhere, then you first have to go to the
pool to the cash pool in the project, update the part there, then go into the schematic and reload
the pool there, which is just two steps, and with a bit of work, it'll be possible to combine
all of these into a single step. Yes, and the thing that will be probably it for the new future,
there are some things that I've been also considering, like adding variants,
while these are mostly features to have them, but not really features that I need or I've
ever about anyone needing, but some features like for example, variants would be just very fun to
implement, and last but not least, it's all the time for a new release sometime, since the last
release has been about a thing a bit less than a year ago, and there have been quite a lot of
bug fixes, paddling on since then, and yeah, they used to be a lot more releases in the past years,
but I think now I think these cadence of probably once a year or so is something that's manageable,
and that wraps up this talk, and that's it, if you want no more world projects I said
to go to the website, there are all of the content information like matrix channel,
and the documentation and all of that.
Are there any questions?
So when you are looking at your governance of the project, and you look at your open issues,
and you say that is way more issues than I want to deal with, have you ever considered
taking on an additional maintainer to deal with some of that housekeeping that maybe your
users are looking for? So the question was, if I've been looking for some extra maintainers,
so I have been not actively asking people, but for the for the for the pre-record, there are
things now two more users that have permissions to merge, they have been merging stuff
sometimes, and for the main repo, it's been mostly clear of like contributions by users that
wanted to scratch their own niche, and I think that's fine with me.
Yeah, so you showed earlier the gift up screenshot with $129 open request,
and we know that feeling. Yeah, so one thing we ended up doing for kick-out was actually asking
people who contributed a lot of parts. Hey, you're putting so much time into this, would you like
to review some? Have you had any success doing that?
Yeah, I think that's two people that I mentioned in the last question was, if any success convincing
people that contributed parts to review parts, well, there's been some success in this
obviously being not that beneficial contributing, I have not had two two people that
sometimes had to have with the review, but it's also been a while since they last
back with something, so I think it's been okay.
So you mentioned something about rendering being slow, can you elaborate? Is it about
let's say, desolating the model, so is it about something else?
Can you just repeat the questions? So you mentioned that rendering is slow, is that specifically
related to, let's say, desolating the models that you have or is it related to something else?
Okay, so the question was whether the rendering is slow to put desolation or something else,
so if you would call desolation converting the actual thought geometry to vertices,
well, that's what the part of the rendering is, and that's really the part that's being
slow, and it's just it has to iterate over the every part, over every part, over everything,
and that's, and yeah, I've been trying to make it faster, but there's only so much to
can do, so much speed, gain you can get by just tweaking the existing code, other than, yeah,
re-accordacking in a way that it's incremental.
Let's say your models that you're rendering are burebs or are there already, that's a polygon base?
Or so the question was, if the multiplying rendering are burebs, so for the, so there's a burebs,
for the 3D view, but these are converted to two triangles, one's on import, and in the
port itself, it's basically just lines, arcs and polygons, and the renderer uses
makes use of open, so the renderer itself uses OpenGL with geometry shaders, and there's
no trimotives like a line with a rounded corners and a border or arcs,
how all of the low-letter rendering is done on a GPU in OpenGL shaders.
So I would have the question, what was your initial mindset or the need that you started before
so the question was, why thought that with Ryzen DA, so back in 2016, when I thought of the project,
I wasn't quite happy with the way the libraries in T-Catwork, since I thought, well, I want to have
net-less representation, that is, which pins this part has separate from the single representation,
and also have the separate from the pin to pad mapping, and since that's well a
pretty central aspect of how the idea is of the operators, and so you can't trust really change
the foundations of a software, that easily, so I thought, well, let's try writing my own,
and I had some, I think, two fall starts, one with Python and C, one with just C, and then I think
of the couple of months, I settled with C++, and from the end.
So you have a very complex application that you have developed, obviously, one person can't
build and develop and maintain all of the aspects of the system that are required to
make something as complicated as useful as the EDA, are there particular packages that Ryzen
depends on that you are, especially, indebted to are things that you found particularly useful
as you're developing this?
Those are the questions, whether they are, so to summarize, if there are particular dependencies
that we are super useful, so I think the most important thing, that's the most important thing,
we probably be the cacadvator that I'm using, since the interactive water that's part of KaiCat
was developed in a way that it's not really title-cacad in a very hard way,
so since writing my own water wouldn't have been too much, I early on in the project
started using the KaiCatvator and that's working really well.
Another dependency that's super useful is open cascade for dealing with a step model import
and regulation of them, so yeah, the so far I've been only really content with open cascade
when it comes to a step import and also for a step export, so this is a really
thing to give dependencies apart from other dependencies like PDF libraries and stuff like that.
Okay, thank you Lucas!
Thanks for watching!