Work on Freerouting as your University assigment #193
Unanswered
andrasfuchs
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
First of all thank you for considering Freerouting (https://www.freerouting.app/) as your assignment, you would potentially help many users to have a better user experience, if you agreed to take on this task.
But first things first, what is Freerouting?
Freerouting is an advanced PCB auto-router. PCBs are printed circuit boards, the board that connects the different components in every hardware we use today. They usually look like this:
PCBs are manufactured by many companies based on the designs their engineers are creating in a software program called an EDA. EDA is a shorthand for electronic design automation, and one of the most popular such tools is KiCad. You can check it out here: https://www.kicad.org/
Freerouting is a multi-platform, open-source Java tool that is an extension for such programs, and it's currently integrated in KiCad, Autodesk EAGLE, Target 3001 and pcb-rnd, but it also works as a standalone tool.
So, what does Freerouting exactly do?
There are different phases in this PCB design process: first you need to create a schematic plan, describing what components (integrated circuits, resistances, capacitors, sockets, antennas, etc.) you are going to use, and what will be the logical connection among these components. Eg. what pin (a small conducting leg of an IC) is connected logically to another pin. At this stage we are abstracted from the physical positioning of these components.
This looks like this in KiCad:
The next step is to place these components in an editor to a virtual circuit board without defining the exact routes that connect these components.
At this stage the designer/engineer needs to draw the connections between these pins to tell the board manufacturer exactly where to have conducting material (typically copper) on the board, so that the components have the proper communication and power lines. As you can imagine this is a very boring and long task, especially for bigger boards.
And this is the point where Freerouting comes into the picture: you can send this unrouted boards to Freerouting for auto-routing and after a few minutes you will get back a fully routed board, ready for production.
It's a very basic description, but I hope you get the idea. We can dig deeper later as you start working on the project.
What would be your job as a developer team?
Currently I'm the only maintainer of Freerouting. One of my great challenges is that I inherited a codebase from a rather old-school developer, and the source code would desperately need a modernization, a refactoring if I wanted to increase its potential.
This refactoring will sound fairly simple on paper, but I think a good implementation will be a good challenge for all of you.
The whole Freerouting project is a big spaghetti-code, and I would like you to separate the currency project into 4 different projects without losing any functionality.
The new four parts would be:
That's it. You would work on a non-production branch in GitHub, so you don't need to worry about messing something up. I would expect you to modernize the code in any way you see fit, including exception handling, the introduction of events, more optimized multi-threading, modern web API support or even data streaming.
If you succeeded I would merge your code into the production code eventually, and that would mean that you would be all the proud contributors of the most popular open-source auto-router tool. There are around 6000 people and teams who use Freerouting and I expect to at least double this number yearly if the trend continues since I took over its maintenance 2.5 years ago. This project saves countless hours for professionals and hobbyists.
Anyway, this e-mail got a little longer than I expected, so thank you for reading it this far! :)
Let me know if you have any questions.
Regards,
Andras
Beta Was this translation helpful? Give feedback.
All reactions