 All right. Hi everyone. Thank you for your interest in my talk. I'm Lasse. I'm a student at Avatar Aachen University, and I'm going to tell you something about a project that I did during the course of a lab course at that university. So I am mainly a software developer and an electronics hobbyist, which means that I've only tinkered with Arduino-compatible microcontrollers and I haven't been really into hardware design all that much. But a little over a year ago, I wanted to create my own PCB, just a simple microcontroller with some sensors, and I wanted it to be better operated. So I thought, okay, creating PCBs is not that hard. It's just like four steps. You have to choose the components that you want to put on your PCB, use some EDA tool to create schematics, design layout, upload the files to a manufacturer and wait for the mail to arrive. All right. So I started with the first step, and I went to choose my components. So as I said, I had no idea on how to do that. So I went to Reddit and I asked, what components should I use to control my battery circuit? I got a couple of suggestions. So I went off to the Internet and I searched for different data sheets, I read through them, I understood half of them, and finally I had decided for a chip that I wanted to use, and then I realized that I had no idea on how to actually implement it on the board. So I went off to GitHub and I tried to find other people's projects that incorporated the same chips. As it turns out, it was quite difficult because the chip I was looking for wasn't the main component on the PCB, so it wasn't mentioned anywhere in the description or in the read me, and I had to actually search through the files which isn't that simple on GitHub. By the time I had found the first project, it was 1 AM and I had to go to bed because I had university the next day, and then I forgot about the whole project. So this semester I had the opportunity to work on an electronic component search engine that basically allows you to enter the name of an electronic component that you want to incorporate into your PCB, and then it will return repositories on GitHub that have projects that include those components. So let's just have a look at the result. This is what it looks like when you search for a component on the top, you just enter the component name, and as you can see we found about a hundred repositories including the component. This is one of them. On the top we mentioned the repository name and the description if the project has a license, the license is shown right there. On the top right you have these stars and forks to give you some kind of an idea whether the project is liked and therefore possibly useful. On the bottom we show the relevant files which exact component was found in the file, and we give you a quick link to the datasheet if we find one and if you want to, you can directly go to a distributor and buy the part or even manufacturer projects PCB. All right. So let's get into the technical details a little bit. We tried to keep the software modular. We split it into four components. We have a crawler that crawls GitHub for PCB design files. Then we have a parser that actually parses both files and checks for the components that are included. The component names are then validated. I'll tell you more on that later. Finally, we have a database that can be searched and returns the repositories that are relevant to your part search. All right. So more details and difficulties that we met. For the crawler, our idea was very simple. Just search the whole of GitHub and return all PCB files that we can find and for later indexing. However, we found out that it's not quite that simple to search all of GitHub. There are rate limits on GitHub and there's not only visible rate limits, which is like 30 searches per minute, I think. But there's also an invisible counter that somehow calculates how computationally intensive your search queries are. If you exceed those, you'll get an abuse node and your shutdown for a while. All right. So because code search or searching inside the files turns out to be very computationally intensive for GitHub, we had to just search for repositories and readme's that mentioned certain words in the description like PCB or key cad or stuff like that. Then we searched those repos, whether or not they actually contain relevant files. All right. So the parser. So the parser downloads keycat PCB files and extracts the used components from them. That was the idea, but we had to find out that the component names are actually free text fields and some people just wrote down whatever they deemed useful. So that was why we had to incorporate a validation process to find out whether the components that were entered in the PCB files are actually existing components or if it's just something like 12 to 24 volts DC-DC converter. All right. For the validation, we also had quite a simple idea. So our idea was to use a component search, for example, one offered by a distributor, and see if it does return any results and if it does return results how many. So we just said, okay, if it returns zero results, it's probably nonexistent or just some gibberish in the component text. If it returned more than 10 results, we assumed it would be something very generic like resistor or something. However, we could not find a component search API that offered rate limits that were high enough for us to find anything. So we looked at DigiKey and they offer about a thousand requests per day for free. We also look at Octopart, they offer even less, they offer 500 for educational users after you register it with them, and after that it gets really expensive really quickly. Yeah. But we found a workaround by actually using Isler's component search and Piggy backing onto a cache that they built inside their API and we can use that without triggering any rate limits at all. All right. Here is some future work or if you're already hyped, good first issues if you want to participate. I don't think do I have time for those or? Quick. All right. Yeah. You're heating your question time. Okay. Great. Yeah. So we want to move the, we developed on a private GitLab instance and we want to move that to gitlab.com, get the CI CD which is already running on the private instance running again, and also it's a huge monolithic mess which we want to split up into modular repos. We want to improve the search a little bit, support our formats when key cat. Actually, I already met the maintainer of fritzing and so that might be a good next project to work on. And we also want to support other platforms when GitHub. All right. That's about it. Thank you for your attention. The science using the component. Yeah. So the idea is just to find example projects that have used the same components so that you can get an idea on how to use the component in your PCB. Okay. Find something which I can see is probably not going to work in real life. So any kind of rate system or? Not yet. That was one future work issue here. Improve the ranking. But right now we're ranking using GitHub, Stars, and Forks. So that might already give you an idea whether a project is useful or not. Yeah. I don't think they're available anymore. Can you repeat to the microphone? Sorry. So there was a suggestion to use reference designs provided by the manufacturers of the parts. Yeah. But I would have to look into how to actually find them. I, as I said, I'm not a hardware specialist, but I only know from reference designs inside the PDFs. So those are usually only graphics, right? Or. Okay. So that's something maybe worth looking into. Okay. The question was one could add some certain snippet of code or something to the repo to make it easily findable. No. I haven't thought about it. For now, it would just be enough to include PCB or something, some words like that in your repo description and then we'll find it. But yeah, maybe some more specific keywords could be provided for that. All right. I think the question time is over. There's my. Oh yeah. Sorry. You want to? Yeah. No. Go ahead. I saw that. Well, we're not using the DGKey cache, right? So Eisler has a component search that they use for their customers. So I didn't actually know that because we don't really interface directly with DGKey. Thank you so much.