kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #22104
Re: [RFC] Wildcard and/or regex support in the component chooser
You do realize we've already argued over pretty much all the points you
made, and _finished_ the patch already?
On Sun, Dec 20, 2015 at 01:17:07PM +0800, David Godfrey wrote:
> Wow, 2 posts from me in the same day!
> That is unprecedented ;-)
>
> Comments inline.....
>
> On 19/12/15 04:56, Wayne Stambaugh wrote:
>
> On 12/18/2015 2:22 PM, Chris Pavlina wrote:
>
> Thanks, and I don't mean to sound grouchy about it. I don't want to try
> to be a backseat driver and start insisting we do things My Way, or
> anything like that. It's just that my proposed change is really quick
> and simple, and would scratch a massive itch of mine - I'd definitely
> not object to adding even more stuff, but I've been really limited on
> time lately... fuzzy matching sounds kinda interesting, and it'd be cool
> to see it added. It just wouldn't do anything for the reason I wanted to
> add wildcard matching, and as much as I wish I had time to spend coding
> cool things that _don't_ help me... I don't have any. :(
>
> You're allowed sound grouchy! You're the one who's implementing it so
> you get the lion's share of the say. That's not to say other devs input
> isn't useful but at the end of the day, you're one writing the code.
> Here is my 2 cents. From an advanced users point of view, wildcard and
> regex searching is great so I'm all for it. However, how many users
> really know how to use regex or even simple wildcard searches?
> Experience has taught me that very few actually do. In fact, the only
> users I know that know how to use them are developers. We (myself
> included) should always keep that in mind when writing code. One simple
> option might to create and abstract pattern matching base class
> (EDA_PATTERN_MATCH) and only implement a wildcard and/or regex
> implementation. That way in the future, if someone feels really
> ambitious, they can create any number of fancy pattern matching
> algorithms without having to rewrite the code that utilizes it.
>
>
> Can I suggest using the time honoured method of a set of radio buttons (or
> dropdown list) allowing selection of what type search you want to perform.
> mcedit (midnight commander editor) has a good example of this in it's text
> user interface....
>
> I think in the long run we may want to support
>
> • Normal
> unless enclosed in /'s or ~'s it is a simple substring search with
> implied wild cards at start and end of the pattern
> • Wildcard
> • Regex
> • Fuzzy / Smart search
>
> There should be a help popup associated with a small ? button alongside
> each option.
>
> I also think we should change our existing default search type to include
> the implied wildcards at start and end of the pattern.
> This would go a long way to helping non technical (from a programming
> perspective) users find the parts they want.
> We could also assume that (if the selected type is "normal")
>
> • if the pattern is enclosed in a pair of /'s it is a regex
> • if the pattern is enclosed in a pair of ~'s it is a fuzzy search (once
> implemented)
> • if it is not a regex or fuzzy search and contains a wildcard [*?] then
> it is a simple wildcard match
>
> Use of / or ~ to identify a regex or fuzzy pattern should not be required,
> as the user could have overridden this by making a manual selection of the
> type.
>
> By requiring that a regex or fuzzy pattern be enclosed in / or ~ chars for
> auto type selection (if entered in the search box) it allows any pattern
> type to contain these characters even as the first character of the
> pattern by simply selecting the pattern type from the radio or dropdown
> list.
>
> This is not all of the solution, but should allow extra capabilities to be
> added during the life of the software supporting both normal users and
> users with more knowledge.
> Also it helps to educate users that there are other ways of searching that
> may be more useful.
>
> The tilde (~) is often used to indicate approximation (in the world
> outside programming) hence the suggestion it is used to denote a fuzzy
> search.
> This does conflict with a common programming use of the tilde to indicate
> a regex, but as regexes are often (think grep and awk) wrapped in /'s it
> is a good compromise.
>
> So, if Wayne &c don't object to adding a simple wildcard search, I'd
> happily spend a few hours on that. But if we decide we want something
> more complicated - I won't complain and object, but I don't really have
> much time to work on it either.
>
> No objection but please consider my base pattern matching class and
> wherever you use pattern matching, that code should take a reference or
> pointer to the base pattern matching class.
>
> Completely agree with this.
> The class should, if possible, include a link to one or more graphical
> objects that provide the search type options.
> If there is more than one graphical object only one should be required per
> search window, any extras should be replacements that offer a different
> layout or group of visible features. These would be used where a feature
> doesn't make sense such as a case sensitive search on data that is always
> case insensitive (eg: net names if config says they are case insensitive)
> .
>
>
> On Fri, Dec 18, 2015 at 01:57:16PM -0500, Jon Evans wrote:
>
> Hi Chris, thanks for the feedback. I certainly don't expect you to waste
> your time implementing something that you don't want/need! I think if you
> end up implementing wildcard match it will be a good starting point for
> adding fuzzy matching later if someone wants to take that on (maybe even I
> would!), at which point we can try it out and see if anyone else besides me
> thinks it's a better way to search.
>
> BR,
> Jon
>
> On Fri, Dec 18, 2015 at 1:51 PM, Chris Pavlina [1]<pavlina.chris@xxxxxxxxx>
> wrote:
>
>
> This is just going to clutter up the results with a bunch of annoying
> false positives. If you want it, fine, but I'm not going to waste my own
> limited time on it. All I want is a simple, predictable pattern match.
> On Dec 18, 2015 13:32, "Mark Roszko" [2]<mark.roszko@xxxxxxxxx> wrote:
>
>
> We can probably implement it ourselves as a wx based control,
>
> The JS implementation is only 100 lines.
> [3]https://github.com/mattyork/fuzzy/blob/master/lib/fuzzy.js
>
> You don't need a C++ library or anything
>
>
> A problem I can see with fuzzy searches is how to set the boundaries that
> define where extra characters can be present.
> A common fuzzy search that we would use (eg: 74123 ) may convert to a
> wildcard search that looks like....
> *74*123*
> We would probably not want it to return results that match
> *7*4*1*2*3*
> which is what the simplest implementation of a fuzzy search would return
>
> For some fuzzy patterns it will be fairly obvious what the intended
> boundaries are (like the 74123 example)
> for others we can imply the boundaries as being at the transition between
> character types,
> 74hc123 => *74*hc*123* + *74*123* + *hc*123*
> As you can see it gets complicated fast for our use case....
> Converting that same fuzzy search (74hc123) to a regex may make more
> sense.
> 74hc123 => 7+.*4+.*h+.*c+.*1+.*2+.*3+.*
> (the above regex is based on the definition found in linux's (man 7 regex)
> As this shows we can expect to get a lot of unwanted matches unless we
> recognize some expected patterns and produce special cases for each one.
> The results of the special cases should always be presented first, with
> the full (anything can be between each character) results presented last.
>
> This is an oversimplification of the problems we can expect to face with a
> user-friendly implementation of a fuzzy search.
> Regardless of anything else, a good regex implementation would be
> desirable first as a fuzzy search should just be a conversion from the
> input pattern to a single or group of regex's.
> Any other way is probably duplicating much of the regex code anyway.
>
> Regards
> David G
>
> References
>
> Visible links
> 1. mailto:pavlina.chris@xxxxxxxxx
> 2. mailto:mark.roszko@xxxxxxxxx
> 3. https://github.com/mattyork/fuzzy/blob/master/lib/fuzzy.js
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~kicad-developers
> More help : https://help.launchpad.net/ListHelp
Follow ups
References
-
Re: [RFC] Wildcard and/or regex support in the component chooser
From: Jon Evans, 2015-12-18
-
Re: [RFC] Wildcard and/or regex support in the component chooser
From: Chris Pavlina, 2015-12-18
-
Re: [RFC] Wildcard and/or regex support in the component chooser
From: Jon Evans, 2015-12-18
-
Re: [RFC] Wildcard and/or regex support in the component chooser
From: Tomasz Wlostowski, 2015-12-18
-
Re: [RFC] Wildcard and/or regex support in the component chooser
From: Mark Roszko, 2015-12-18
-
Re: [RFC] Wildcard and/or regex support in the component chooser
From: Chris Pavlina, 2015-12-18
-
Re: [RFC] Wildcard and/or regex support in the component chooser
From: Jon Evans, 2015-12-18
-
Re: [RFC] Wildcard and/or regex support in the component chooser
From: Chris Pavlina, 2015-12-18
-
Re: [RFC] Wildcard and/or regex support in the component chooser
From: Wayne Stambaugh, 2015-12-18
-
Re: [RFC] Wildcard and/or regex support in the component chooser
From: David Godfrey, 2015-12-20