 Okay. Everyone else ready? Okay, it looks like FPGA is much more interesting topic choosing by the number of attendees here but now we are going to talk about PCBs. Why did you place me right in the lunchtime? Is that for a special reason? Okay. We are talking, my name is Patrick and today I want to like to introduce you Zazaf. The working title you see on the FOSTA page is Ruby Bindings for LibGovView because we came up with the name Zazaf like four days ago so I did not have any time to update it. The clever guys of you may recognize the name, otherwise just ask me later. So has anyone of seen these windows here? They are out of the eagle, cut soft eagle, out-of-desk eagle, whatever you call it. The resolution is quite bad. If you do not recognize this, these are the windows to penalize a PCB. You can do the same, you know penalizing PCBs if you want to order them at a PCB Fab and you only have tiny one, you add some more to get a cheaper price. You can do this in KeyCatch 2 using the Python scripting functionality but what I ask myself is why are we doing this within the EDA CAD application because actually tasks like penalization are CAM tasks because they are not about your project, they are about manufacturing of your project. So this is a really red stop sign for me. If it comes to penalization, adding D-cuts for the Fab so that you display them where to cut your PCBs, fiducial drills of the actual PCB because you do not want to have them on your project but they are more a support for manufacturing the PCB. So what I ask myself is why are we using EDA applications like KeyCatch, Eagle, whatever for these tasks. I think the reason for this is that right now we have no open source CAM tools at all. If you have a tool, please shout out. Yeah, GovView. But have you tried to draw a frame around your PCB with GovView? That's the point. Yeah, GovView is totally fine for viewing PCBs. I know a lot of PCB VAPs which use GovView because it has excellent GovR support for visual proof of the PCBs. But what I discovered is that actually LibGovView, the library behind GovView, is actually able to not only display GovR files but also to edit and save them. But none of this functionality is represented in the UI application. Everything is in the back in the LibLibrary. So the homepage says GovView is split into a core functionality library and a GUI portion. Developers wishing to incorporate GovR pausing, editing, exporting, rendering into other programs are welcome to use LibGovView. So I thought, oh wow, this is handy. Why is no one using this? If you look up LibGovView on Google, you get the documentation and that's it. No one is really using this library. So I thought, okay, there must be a reason for it. So I did some experiments with this library using C and it was really a struggle to use it. And usually this should be suitable for electrical engineers where the profession is not only software development but also hardware development and they are not able to use LibGovView, the C bindings, because it's really, really complicated. So we found a solution for this and the solution is Ruby bindings for LibGovView. I have two examples for you. The first example is adding fiducials for PCB assembly to the PCB and the second one is penalization of a PCB. The resolution of the beamer is quite low. I hope this will fit. We start off with this example. So I'm not able to mirror the screen so I have to look at it on my own. What we do is we create a new shot of project. This is the same as what you get when you open GovView. You have an empty project where you can add single GovBar files. So we start off with an empty project and then I add some GovBar files to it. That's the same as you drag and drop or plus in GovView, add more GovBar files because GovView does not know about what kind of GovBar files this is right now. I have some handy regex here in the end which just extracts something like top copper layer or board outline out of the file name and then adds it to the project so that we are able to recognize the files later. So after adding all the files, what we do is we take a bounding box of the PCB because we want to have the exact dimensions and then I want to add a few fiducials. So fiducials is used if you mount the parts on the PCB. This is a camera system which recognizes the fiducial point for the absolute placement of the roboter. So I want to have most PCB assembly lines require this to have at least three fiducials on the corners of your PCB. It's really important and here we are adding three fiducials to the upper left, bottom left and bottom right corner of the PCB and this all scripted. So if we change the dimension of the board, the bounding box will change and then the absolute position of the fiducials changes accordingly. So in the end I just iterate over all the fiducials I just created, draw them on a layer that's done using the raw GERB view call. So the bridge class is used to take the bridge over to a lib copy and then we are just saving all the files with fiducial and the layer name. So let's give this script a try. Ruby to fiducials. Performance is quite good because it's a C binding, so nothing actually working. Now we take our beloved application GERB view to check the result. I will take this solder mask top layer and board outline and will invert the color of the top solder mask and what we just did using this script is to add these three fiducials over here and this is all done by script. So this is really fast, it's reputed so you can run it over and over again and the next script will do a penalization. So what I want is I want to have this project on a new panel in four rows and four columns. So in the end I want to have and up with 16 PCBs on my panel and I do this with this line where I say okay to the image please add the image from the project and apply a transformation and the transformation is basically just a bounding box around the PCB multiplied by the column and row where we are right at the moment and because it's handy for our PCB fab we create a zip file in the end. So what I expect by running this project is to take our GERB files, read them, penalize so that we end up with 16 PCBs and then save them within a zip file. That's it. We check the result. So I'm going to open the top layer in the board outline because it's sufficient to see the result. Here we go and now the nice thing about this is we have a self-contained script with just one dependency. The dependency is GERBView and what I really like and what I'm passionate about is to take software engineering techniques to electrical engineering. So now that we have the script I thought okay maybe we can use this in continuous integration now. So every time I check in new GERB files into my JIT repository I automatically want to have this panel ready for order. So let's see. So some of you may know I think all of you know GitLab and GitLab has a really handy continuous integration and this continuous integration is run by a JITLab CI file and what this JITLab CI file does is it installs or first it checks if Ruby at all is available then it installs Joseph and then runs the penalize job and the penalize script itself is within the repository and in the end we create an artifact that's the result of the continuous integration job and the artifact is named by this name. So what we end up is we call it a new GERB file to the JIT repository. All the CI is run and then and that does not fit on the screen here we can download the penalize job. So no more struggle with opening some UI application just run the CI which actually run automatically download the zip file and send it off to the PCB FAP. So we could extend this even more by adding v-cards for our FAP everything automatically and it's okay these are the benefits now I will go on with the presentation. So what are the benefits then? It's really easy to install just if you're using Debian Ubuntu whatever aptitude GAT install GERB view for the OS X view this here just brew install GERB view and then you can actually use it. Next thing is no UI necessary I think that's that's a feature because all the CAM applications all the commercial CAM applications I know have a huge UI and you have to do hundreds of clicks just to get a panel or add a few lines so it's really complicated and I prefer code much over clicking UI because I can check it in into source control I can actually see what it is doing and this is really important I guess for hardware because we want to check is there some change in it then it's battle proven we use this binding within our company and we do PCB manufacturing every day so we never got an issue because of the binding or of GERB view so and GERB view itself I guess is really battle proven because it's the last release is like five years old and it really has great compatibility to the current GERB standard and it's high performance but this does not really I don't care about the performance because it's run as a currency and that's fine so what is the current situation about this project then as I said we use it in our company okay five minutes left thank you we were able to pull down the cost of PCB manufacturing for low quantities in a domestic fab by 70 percent because of this library because all the tasks which are right now done by hand we can automate them with this library so that is also the reason why all the features are as requested by the company's interest so there might be features missing which are important for for single use cases but they are not added yet the coverage of the whole GERB view functions is about 80 percent but I have no plans to extend this but because some functions are not you just do not use them then the test suite is there is a test suite that's a good thing but it's really really basic so it checks if drawing things work and if the GERB file is properly formatted but that's it and what you might notice if you look into the source code it was split out of a larger library like a few days ago and sometimes you notice that there are some deadlines so what I really would like is to have a new GERB v release because the last release as I said is like five years old and we have some recent changes which for example make it possible to rotate PCBs right now the release included in the main distributions are not able to rotate PCBs and some other features are also missing and I don't get why there is no effort to make a new release so if anyone knows that guy because all the comments on the GERB view did repository come from him please contact me so that we may can organize a new release so if you want to super job of and you are not a software developer just try to use it as much as possible because this is I think really important for such a project then report issues if you have if you have any knowledge about software development the task I would prefer is to add some more high level usage because I guess the script I just showed was like 30 lines we can shrink it even more then extend the R-specs huge that's not a really nice task but has to be done and some features are missing like font text support it's not a possible to write text on your GERB files right now so just lines circles rectangles and something like this no text at all so if you like this there's a coupon code for my company if you order PCBs regularly cheapest price in Europe with domestic manufacturing that's it thank you questions yeah I heard of God merge I used it like half a year ago so the question was if we have heard about God merge what I do not like about God merge is is that it implements all of the Gerber stuff on its own and it's it's not really complete so there are situation where does not work and from an open source perspective I think it's much better to work on one project to support Gerber than on different projects it's pretty active that's the reason why I don't get that the latest release is from 2011 yeah look up the Debian packages so Ubuntu packages but it's really really hard to compile I tried it and the the make scripts and all the auto configure script is really outdated so I wasn't able to compile the current masterhead at all I tried the mailing list but when when I last tried there was no effort with this jam maybe now it's more successful to give a reason because I guess the reason why there is no new release is is that as GERB view itself has no editing functionality there will be no release for lipgob view with editing functionality because they if it's not within the UI application no one will use it so you can delete elements yeah that's it you can delete elements but the lipgob view has much more functionality there's a question over and for testing you want to test them all at once so you want to have like traces on the panel so that you can just plug in your whole panel into a test rig and all was tested at once okay so the question was is was if I do a panel where all the projects on a panel have overall functionality I want to check I've not seen that use case of a panel I see it much more from the manufacturing position and there the point is all the time put as much projects on as a really small place that's it one over here I use it for example to count drills you have to find single single subjects to check on for example what an idea of mine was to do some checking if for example the paste layer changes you could create a hex digit digest out of the paste layer and then check if it changed so that you know if you have to do a new stencil or not that might be an idea but but you can run aspect tests on your gubba files that's right one over here uh I know this you're right now you look like you're just supporting scoring and writing so there's no more there's no like margin between the boards like you don't not all boards are square and you're not going to always be able to snap yeah the reason why there is no space between the boards is I wanted to keep the example script as simple as possible just add a little spacing so you know just add plus and measurements are in inches here and you have margin that's it that's a nice thing about scripting right you have basic drawing functionality use this just just draw a few lines what we do is we usually mill the PCBs so we draw a milling pass but creating the milling pass is another topic but adding the milling pass to a gubba layer that's the task of Shazaf one question over here panel or the manufacturer I guess you send the whole panel to assembly and then how do you get the updated coordinates for all the all the parts you place on the panel um Shazaf is not able to process pick and place files but my advice is to write down a file with the coordinates given here and then just add them using excel I mean it's Ruby you can just write the file and have the top left coordinate of the of the according PCB it I think gubview has support for picking place files but I did no research on it and as picking place files are somehow arbitrary so everyone has different picking place files I think is really hard to get a binding for it that's it thank you