Excellent, I have just performed some additional tests, added a few more fixes and everything seems fine, no observable performance drop. Thank you Jon, your patch has been merged.
Regards, Orson On 03/01/2017 10:37 PM, Wayne Stambaugh wrote: > Got it! Then I'm ok with the changes assuming they don't break anything > else. > > On 3/1/2017 4:28 PM, Jon Evans wrote: >> The caching was only used by the auto router before. Orson's patch >> implements local caching in the auto router, and other sites just >> regenerate the bbox when they need to retrieve it, which is the same >> behavior as before. >> >> We can't add a caching system that didn't exist before without the board >> dirty flag that I mentioned would be a ton of work to implement. >> >> -Jon >> >> On Mar 1, 2017 16:25, "Wayne Stambaugh" <stambau...@gmail.com >> <mailto:stambau...@gmail.com>> wrote: >> >> I thought we were retaining the cached behavior for existing code and >> implementing a secondary feature to always recalculate the bounding box. >> It looks to me as though the cached behavior has completely been >> removed unless I'm missing something. >> >> On 3/1/2017 9:07 AM, Jon Evans wrote: >> > It was in this thread; I've attached them both again for convenience. >> > The "0001-Remove-BOARD-SetBoundingBox.patch" is applied after applying >> > the other patch. >> > >> > On Wed, Mar 1, 2017 at 8:59 AM, Wayne Stambaugh >> <stambau...@gmail.com <mailto:stambau...@gmail.com> >> > <mailto:stambau...@gmail.com <mailto:stambau...@gmail.com>>> wrote: >> > >> > On 3/1/2017 8:54 AM, Jon Evans wrote: >> > > Wayne, Orson's latest patch is basically Option 2 but >> implemented >> > > another way. Can you check it out and let us know if you >> are OK merging >> > > it as-is, or if we should change the implementation to be >> more like what >> > > I described? >> > >> > I don't remember seeing this patch. Was it posted to the dev >> list? >> > >> > > >> > > Thanks, >> > > Jon >> > > >> > > On Wed, Mar 1, 2017 at 8:43 AM, Wayne Stambaugh >> <stambau...@gmail.com <mailto:stambau...@gmail.com> >> <mailto:stambau...@gmail.com <mailto:stambau...@gmail.com>> >> > > <mailto:stambau...@gmail.com <mailto:stambau...@gmail.com> >> <mailto:stambau...@gmail.com <mailto:stambau...@gmail.com>>>> wrote: >> > > >> > > Option 2 seems fine. It may be easier to just add an option >> > argument to >> > > the existing GetBoundingBox() function to either return >> the cached >> > > bounding box or recalculate the bounding box on demand >> rather than >> > > create a different function for the cached vs. uncached >> version. >> > > >> > > On 3/1/2017 2:51 AM, Maciej Sumiński wrote: >> > > > Wayne, what do you think? If it is acceptable, then I >> would >> > like to >> > > > merge the patches. I should not judge my code, as I >> might be >> > > tempted to >> > > > consider it a good solution. >> > > > >> > > > In case my proposal to cache the bounding box in >> autorouter code >> > > is not >> > > > approved, then I would say #2 would do the job. >> > > > >> > > > Cheers, >> > > > Orson >> > > > >> > > > On 03/01/2017 01:23 AM, Jon Evans wrote: >> > > >> Update: after some more testing, I think Orson's patch on >> > top of >> > > mine is >> > > >> the way to go. It pulls the computation out of the >> loops for >> > > autorouter, >> > > >> and that's the only place where the board's bounding >> box is >> > used >> > > >> repetitively. Since the other call sites are only >> going to >> > get the >> > > >> bounding box intermittently, I don't think it's worth any >> > effort >> > > doing >> > > >> complicated things to track and recompute the >> bounding box when >> > > things are >> > > >> changed. >> > > >> >> > > >> So, I think my patch and Orson's should be merged. >> > > >> >> > > >> -Jon >> > > >> >> > > >> On Tue, Feb 28, 2017 at 6:51 PM, Jon Evans >> > <j...@craftyjon.com <mailto:j...@craftyjon.com> >> <mailto:j...@craftyjon.com <mailto:j...@craftyjon.com>> >> > > <mailto:j...@craftyjon.com <mailto:j...@craftyjon.com> >> <mailto:j...@craftyjon.com <mailto:j...@craftyjon.com>>>> wrote: >> > > >> >> > > >>> I'm finally back to this problem now that I have some >> > other WIP >> > > committed. >> > > >>> >> > > >>> As far as I can tell, there two paths to go down for >> this >> > problem: >> > > >>> >> > > >>> 1) Implement auto-caching of the bounding box. This >> > requires some >> > > >>> mechanism to tell BOARD that it needs to update the >> cache, >> > be it >> > > OBSERVABLE >> > > >>> or some other update function added to BOARD_ITEM. >> No matter >> > > how it's >> > > >>> done, this method seems not great to me because it >> requires >> > > touching a ton >> > > >>> of code to provide coverage for every possible entry >> point >> > that >> > > could end >> > > >>> up having an effect on the bounding box. >> > > >>> >> > > >>> 2) Have two different calls to get the bounding box >> for an >> > > EDA_ITEM, one >> > > >>> that always re-generates the cache and one that just >> returns a >> > > cached >> > > >>> value. Update the call sites that hit the bounding box >> > frequently >> > > >>> (autorouter, etc) to make use of the cached value; keep >> > the call >> > > sites that >> > > >>> always re-generate the bounding box in today's code >> > working that >> > > way. >> > > >>> Performance shouldn't be any better or worse than it >> is now. >> > > >>> >> > > >>> 3) Track whether a board is clean/dirty in some >> other way >> > > besides looking >> > > >>> at BOARD_ITEMs. This might not be practical while >> we still >> > > support legacy, >> > > >>> but once there is only GAL, I could see this maybe being >> > > possible through >> > > >>> the tool framework. For example, actions could be >> marked as >> > > possibly >> > > >>> impacting the board or not (i.e. move item does, >> zoom does >> > not) >> > > >>> >> > > >>> So, unless someone suggests otherwise, I'm going to try >> > > implementing #2, >> > > >>> and suggest #3 as a future improvement that would >> improve >> > > performance for >> > > >>> some edge case operations (i.e. "zoom to fit screen" >> would be >> > > instantaneous >> > > >>> if nothing has modified the board since the last >> time the bbox >> > > was cached, >> > > >>> even on large boards) >> > > >>> >> > > >>> -Jon >> > > >>> >> > > >>> On Fri, Feb 24, 2017 at 11:01 AM, Wayne Stambaugh >> > > <stambau...@gmail.com <mailto:stambau...@gmail.com> >> <mailto:stambau...@gmail.com <mailto:stambau...@gmail.com>> >> > <mailto:stambau...@gmail.com <mailto:stambau...@gmail.com> >> <mailto:stambau...@gmail.com <mailto:stambau...@gmail.com>>>> >> > > >>> wrote: >> > > >>> >> > > >>>> On 2/24/2017 10:30 AM, Maciej Sumiński wrote: >> > > >>>>> Most of the operations one can do on a BOARD_ITEM >> > potentially >> > > affects >> > > >>>>> the board bounding box. It means there might be >> many places >> > > where the >> > > >>>>> notifications should be added. >> > > >>>>> >> > > >>>>> Some time ago, Michael Steinberg has put in place >> > OBSERVABLE class >> > > >>>>> (include/observable.h) that could facilitate the task. >> > > >>>> >> > > >>>> It could be useful but I'm not sure it would be a >> better >> > design >> > > than the >> > > >>>> child object informing it's parent that it's >> bounding box has >> > > changed. >> > > >>>> I'm not sure the additional code would make the >> code any more >> > > readable. >> > > >>>> The only benefit would be if other observers were >> required. >> > > >>>> >> > > >>>>> >> > > >>>>> With the current approach, developers have to guess >> > whether to >> > > update >> > > >>>>> the bounding box with ComputeBoundingBox() or take the >> > cached >> > > value. >> > > >>>>> Update is called in very few places, so I really >> wonder what >> > > kind of >> > > >>>>> magic makes it work, but I might have missed >> something here. >> > > >>>> >> > > >>>> This solution would require limiting the entry >> points in >> > the BOARD >> > > >>>> object that allow changes to the BOARD's child items. >> > > Conceptually this >> > > >>>> is probably easier to understand but requires >> developers >> > to be >> > > diligent >> > > >>>> when making changes to the BOARD object or not >> trying to >> > bypass >> > > these >> > > >>>> entry points. >> > > >>>> >> > > >>>>> >> > > >>>>> Regards, >> > > >>>>> Orson >> > > >>>>> >> > > >>>>> On 02/24/2017 04:06 PM, Wayne Stambaugh wrote: >> > > >>>>>> Every BOARD_ITEM has a parent/child relationship >> or at >> > least >> > > it did if >> > > >>>>>> someone did not break it. You can always find >> the parent >> > > BOARD object >> > > >>>>>> by walking up the BOARD_ITEM parent list. There is >> > already a >> > > >>>>>> BOARD_ITEM::GetBoard() call that should return >> the parent >> > > board. You >> > > >>>>>> could use that to notify the BOARD object when a >> child >> > BOARD_ITEM >> > > >>>> change >> > > >>>>>> effects the bounding box. >> > > >>>>>> >> > > >>>>>> On 2/24/2017 9:27 AM, Jon Evans wrote: >> > > >>>>>>> We need a solution that allows GetBoundingBox to >> be called >> > > blindly, >> > > >>>>>>> without knowing if (or how) an EDA_ITEM subclass >> needs to >> > > have the >> > > >>>>>>> bounding box updated. >> > > >>>>>>> >> > > >>>>>>> Does anyone have ideas about how complicated it >> would >> > be to >> > > give the >> > > >>>>>>> BOARD class knowledge of whether or not anything >> > inside it has >> > > >>>> changed? >> > > >>>>>>> This is what I tried to implement at first, but >> Orson >> > > pointed out that >> > > >>>>>>> the way I did it would miss some kinds of changes. >> > > >>>>>>> >> > > >>>>>>> Figuring out the above also seems useful for >> other reasons >> > > -- for >> > > >>>>>>> example, autosave / backup features are easier to >> > implement >> > > if there >> > > >>>> is >> > > >>>>>>> a global "dirty/clean" flag for things like BOARD. >> > > >>>>>>> >> > > >>>>>>> If there is no good way to implement caching, I >> guess >> > > another way >> > > >>>> would >> > > >>>>>>> be to implement caching at the sites that use >> the BOARD >> > > bounding box >> > > >>>>>>> heavily (autorouter etc) >> > > >>>>>>> >> > > >>>>>>> -Jon >> > > >>>>>>> >> > > >>>>>>> On Fri, Feb 24, 2017 at 9:22 AM, Wayne Stambaugh < >> > > >>>> stambau...@gmail.com <mailto:stambau...@gmail.com> >> <mailto:stambau...@gmail.com <mailto:stambau...@gmail.com>> >> > <mailto:stambau...@gmail.com <mailto:stambau...@gmail.com> >> <mailto:stambau...@gmail.com <mailto:stambau...@gmail.com>>> >> > > >>>>>>> <mailto:stambau...@gmail.com >> <mailto:stambau...@gmail.com> >> > <mailto:stambau...@gmail.com <mailto:stambau...@gmail.com>> >> <mailto:stambau...@gmail.com <mailto:stambau...@gmail.com> >> > <mailto:stambau...@gmail.com <mailto:stambau...@gmail.com>>>>> >> > > wrote: >> > > >>>>>>> >> > > >>>>>>> On 2/24/2017 4:16 AM, Maciej Sumiński wrote: >> > > >>>>>>> > Hi Jon, >> > > >>>>>>> > >> > > >>>>>>> > The current version looks much better to me. >> > From what >> > > I see >> > > >>>> there is no >> > > >>>>>>> > actual bounding box caching, as >> GetBoundingBox() >> > > always calls >> > > >>>>>>> > ComputeBoundingBox(). I am fine with that, but >> > before >> > > I push >> > > >>>> the patch I >> > > >>>>>>> > need to ask: does anyone know why the >> board bounding >> > > box is >> > > >>>> cached? I >> > > >>>>>>> > believe it must have been done to boost >> > performance of >> > > certain >> > > >>>> parts of >> > > >>>>>>> > the code, but I wonder if it is really >> necessary. >> > > Especially >> > > >>>> that one >> > > >>>>>>> > needs to know that it has to be updated using >> > > >>>> ComputeBoundingBox(). >> > > >>>>>>> >> > > >>>>>>> It was cached so it didn't need to be >> recalculated >> > every >> > > time the >> > > >>>>>>> bounding box was required. It should or at >> least >> > it did >> > > >>>> recalculate >> > > >>>>>>> only when the changes were made since the >> last call to >> > > fetch the >> > > >>>>>>> bounding box. On very complex boards, this >> can take a >> > > while. >> > > >>>> Getting >> > > >>>>>>> the bounding box is called fairly often so this >> > can add >> > > up. I >> > > >>>> don't see >> > > >>>>>>> any reason to recalculate the bounding box on >> > every get >> > > bounding >> > > >>>> box >> > > >>>>>>> call. If the current bounding box behavior >> is broken, >> > > then it >> > > >>>> should be >> > > >>>>>>> fixed. I don't see any reason to get rid of the >> > caching >> > > method. >> > > >>>> If you >> > > >>>>>>> are operating outside of the normal methods >> for adding >> > > and/or >> > > >>>> editing >> > > >>>>>>> board objects that prevents the correct >> bounding box >> > > from being >> > > >>>>>>> calculated, that is your fault and you need >> to fix >> > your code >> > > >>>>>>> accordingly. >> > > >>>>>>> >> > > >>>>>>> > >> > > >>>>>>> > Just by looking at the code, I noticed >> that the >> > > autorouter calls >> > > >>>>>>> > BOARD::GetBoundingBox() frequently, but I >> could not >> > > see much >> > > >>>>>>> difference >> > > >>>>>>> > with caching disabled. Likely, the routing >> > algorithm takes >> > > >>>>>>> significantly >> > > >>>>>>> > more time than the bounding box calculations. >> > > >>>>>>> > >> > > >>>>>>> > Personally I would completely remove >> > m_BoundingBox field >> > > >>>> instead of >> > > >>>>>>> > making it mutable. Also, I have noticed >> there are a >> > > few places >> > > >>>>>>> where the >> > > >>>>>>> > bounding box is overridden with >> SetBoundingBox(). It >> > > seems to >> > > >>>> me a bit >> > > >>>>>>> > dubious, as bounding box should depend >> solely on >> > the items >> > > >>>>>>> belonging to >> > > >>>>>>> > the board. I attach a patch to show what I >> would >> > > change. Any >> > > >>>> comments, >> > > >>>>>>> > especially from Wayne & Jean-Pierre? >> > > >>>>>>> > >> > > >>>>>>> > Regards, >> > > >>>>>>> > Orson >> > > >>>>>>> > >> > > >>>>>>> > On 02/23/2017 01:49 PM, Jon Evans wrote: >> > > >>>>>>> >> Hi Orson, >> > > >>>>>>> >> >> > > >>>>>>> >> Here's an updated patch with the changes you >> > > requested. The >> > > >>>> only >> > > >>>>>>> issue is, >> > > >>>>>>> >> without some kind of caching, I had to >> change the >> > > call sites >> > > >>>> that >> > > >>>>>>> were >> > > >>>>>>> >> interested in the board bounding box with >> edges >> > only, >> > > so the >> > > >>>>>>> patch has >> > > >>>>>>> >> grown in scope. Let me know if this >> looks better. >> > > >>>>>>> >> >> > > >>>>>>> >> Best, >> > > >>>>>>> >> Jon >> > > >>>>>>> >> >> > > >>>>>>> >> On Thu, Feb 23, 2017 at 4:17 AM, Maciej >> Sumiński >> > > >>>>>>> <maciej.sumin...@cern.ch >> <mailto:maciej.sumin...@cern.ch> >> > <mailto:maciej.sumin...@cern.ch <mailto:maciej.sumin...@cern.ch>> >> > > <mailto:maciej.sumin...@cern.ch >> <mailto:maciej.sumin...@cern.ch> >> > <mailto:maciej.sumin...@cern.ch >> <mailto:maciej.sumin...@cern.ch>>> <mailto:maciej.sumin...@cern.ch >> <mailto:maciej.sumin...@cern.ch> >> > <mailto:maciej.sumin...@cern.ch <mailto:maciej.sumin...@cern.ch>> >> > > <mailto:maciej.sumin...@cern.ch >> <mailto:maciej.sumin...@cern.ch> >> > <mailto:maciej.sumin...@cern.ch >> <mailto:maciej.sumin...@cern.ch>>>>> >> > > >>>>>>> >> wrote: >> > > >>>>>>> >> >> > > >>>>>>> >>> Hi Jon, >> > > >>>>>>> >>> >> > > >>>>>>> >>> I really like the generic approach in >> the zoom >> > > methods. This >> > > >>>> part I >> > > >>>>>>> >>> would merge instantly, but there is an >> issue with >> > > caching the >> > > >>>> board >> > > >>>>>>> >>> bounding box. It does not take into >> account that >> > > items already >> > > >>>>>>> added to >> > > >>>>>>> >>> board may change their position and >> affect the >> > > bounding box. >> > > >>>> I would >> > > >>>>>>> >>> remove caching completely, what do you >> think? >> > > >>>>>>> >>> >> > > >>>>>>> >>> If you are going to modify the patch, would >> > you rename >> > > >>>> boardBBox in >> > > >>>>>>> >>> COMMON_TOOLS::ZoomFitScreen() to bbox or >> anything >> > > that is not >> > > >>>>>>> related to >> > > >>>>>>> >>> board? Thank you in advance. >> > > >>>>>>> >>> >> > > >>>>>>> >>> Regards, >> > > >>>>>>> >>> Orson >> > > >>>>>>> >>> >> > > >>>>>>> >>> On 02/23/2017 05:34 AM, Jon Evans wrote: >> > > >>>>>>> >>>> Hi all, >> > > >>>>>>> >>>> >> > > >>>>>>> >>>> This patch finishes off the refactor I >> did a few >> > > days ago, by >> > > >>>>>>> enabling >> > > >>>>>>> >>>> ZoomFitScreen to work without knowledge >> of the >> > > BOARD class. >> > > >>>>>>> >>>> >> > > >>>>>>> >>>> In order to make this work, I changed >> the way >> > > GetBoundingBox >> > > >>>> and >> > > >>>>>>> >>>> ComputeBoundingBox work so that the >> call sites of >> > > >>>>>>> GetBoundingBox don't >> > > >>>>>>> >>> have >> > > >>>>>>> >>>> to also call ComputeBoundingBox if they >> don't >> > need >> > > to use the >> > > >>>>>>> >>>> aBoardEdgesOnly flag. >> > > >>>>>>> >>>> >> > > >>>>>>> >>>> Those with good knowledge of BOARD >> should review >> > > this to make >> > > >>>>>>> sure I >> > > >>>>>>> >>> caught >> > > >>>>>>> >>>> all the instances where we should mark the >> > bounding >> > > box as >> > > >>>>>>> needing to be >> > > >>>>>>> >>>> re-computed. >> > > >>>>>>> >>>> >> > > >>>>>>> >>>> Best, >> > > >>>>>>> >>>> Jon >> > > >>>>>>> >>>> >> > > >>>>>>> >>>> >> > > >>>>>>> >>>> >> > > >>>>>>> >>>> >> _______________________________________________ >> > > >>>>>>> >>>> Mailing list: >> > > https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >>>>>>> <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>>> >> > > >>>>>>> >>>> Post to : >> > kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>> >> > > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>>> >> > > >>>>>>> <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>> >> > > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>>>> >> > > >>>>>>> >>>> Unsubscribe : >> > > https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >>>>>>> <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>>> >> > > >>>>>>> >>>> More help : >> https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>> >> > > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>>> >> > > >>>>>>> <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>> >> > > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>>>> >> > > >>>>>>> >>>> >> > > >>>>>>> >>> >> > > >>>>>>> >>> >> > > >>>>>>> >>> >> > > >>>>>>> >>> >> _______________________________________________ >> > > >>>>>>> >>> Mailing list: >> > > https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >>>>>>> <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>>> >> > > >>>>>>> >>> Post to : >> kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>> >> > > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>>> >> > > >>>>>>> <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>> >> > > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>>>> >> > > >>>>>>> >>> Unsubscribe : >> > > https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >>>>>>> <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>>> >> > > >>>>>>> >>> More help : >> https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>> >> > > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>>> >> > > >>>>>>> <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>> >> > > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>>>> >> > > >>>>>>> >>> >> > > >>>>>>> >>> >> > > >>>>>>> >> >> > > >>>>>>> > >> > > >>>>>>> > >> > > >>>>>>> > >> > > >>>>>>> > >> _______________________________________________ >> > > >>>>>>> > Mailing list: >> https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >>>>>>> <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>>> >> > > >>>>>>> > Post to : >> kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>> >> > > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>>> >> > > >>>>>>> <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>> >> > > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>>>> >> > > >>>>>>> > Unsubscribe : >> https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >>>>>>> <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>>> >> > > >>>>>>> > More help : >> https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>> >> > > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>>> >> > > >>>>>>> <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>> >> > > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>>>> >> > > >>>>>>> > >> > > >>>>>>> >> > > >>>>>>> >> > > >>>>>>> _______________________________________________ >> > > >>>>>>> Mailing list: >> https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >>>>>>> <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>>> >> > > >>>>>>> Post to : >> kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>> >> > > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>>> >> > > >>>>>>> <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>> >> > > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>>>> >> > > >>>>>>> Unsubscribe : >> > https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >>>>>>> <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>>> >> > > >>>>>>> More help : >> https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>> >> > > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>>> >> > > >>>>>>> <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>> >> > > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>>>> >> > > >>>>>>> >> > > >>>>>>> >> > > >>>>>> >> > > >>>>>> >> > > >>>>>> _______________________________________________ >> > > >>>>>> Mailing list: >> https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >>>>>> Post to : >> kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>> >> > > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>>> >> > > >>>>>> Unsubscribe : >> https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >>>>>> More help : https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>> >> > > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>>> >> > > >>>>>> >> > > >>>>> >> > > >>>>> >> > > >>>>> >> > > >>>>> >> > > >>>>> _______________________________________________ >> > > >>>>> Mailing list: >> https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >>>>> Post to : kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>> >> > > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>>> >> > > >>>>> Unsubscribe : >> https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >>>>> More help : https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>> >> > > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>>> >> > > >>>>> >> > > >>>> >> > > >>>> >> > > >>>> _______________________________________________ >> > > >>>> Mailing list: >> https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >>>> Post to : kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>> >> > > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>>> >> > > >>>> Unsubscribe : >> https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >>>> More help : https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>> >> > > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>>> >> > > >>>> >> > > >>> >> > > >>> >> > > >> >> > > >> >> > > >> >> > > >> _______________________________________________ >> > > >> Mailing list: https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >> Post to : kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>> >> > > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>>> >> > > >> Unsubscribe : https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > >> More help : https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>> >> > > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>>> >> > > >> >> > > > >> > > > >> > > > >> > > > >> > > > _______________________________________________ >> > > > Mailing list: https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > > Post to : kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>> >> > > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>>> >> > > > Unsubscribe : https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > > More help : https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>> >> > > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>>> >> > > > >> > > >> > > _______________________________________________ >> > > Mailing list: https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > Post to : kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>> >> > > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> > <mailto:kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net>>> >> > > Unsubscribe : https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>> >> > > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers> >> > <https://launchpad.net/~kicad-developers >> <https://launchpad.net/~kicad-developers>>> >> > > More help : https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>> >> > > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp> >> > <https://help.launchpad.net/ListHelp >> <https://help.launchpad.net/ListHelp>>> >> > > >> > > >> > >> > >> >> > > _______________________________________________ > Mailing list: https://launchpad.net/~kicad-developers > Post to : kicad-developers@lists.launchpad.net > Unsubscribe : https://launchpad.net/~kicad-developers > More help : https://help.launchpad.net/ListHelp >
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : kicad-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp