Re: [Kicad-developers] Ideas on higher-visibility indication of (un)connected pins?

2015-06-03 Thread Vesa Solonen
26/05/15, 20:38, Nick Østergaard kirjoitti:
 I think option #2 is good, the one where we remove the red circle when
 it is connected.  This is also analog with what we see on the plots.

The same, but I'd keep the original grey hint or make it just a tiny bit
more strong. #2 is especially good because it _removes_ attention
seeking detail from the screen when the attention needing operation is
completed.

-Vesa


___
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


Re: [Kicad-developers] s-exp file read/write refactoring

2015-06-03 Thread Kaspar Emanuel
In case it helps you, I wrote a parser and serialiser for the .kicad_mod
files in Haskell
https://github.com/kasbah/haskell-kicad-data/blob/master/Data/Kicad/SExpr/Parse.hs.
I test this against all the available GitHub libraries and it is also
property tested (with randomly generated data) for internal consistency
(i.e. writing and then parsing results in the same data as the one
written). Obviously you can’t add Haskell code to KiCad itself but it might
help in getting an overview or just some inspiration.
​

On 1 June 2015 at 20:27, Chris Pavlina pavlina.ch...@gmail.com wrote:

 It's easy to understand, sure. My issue with it is things like this,
 from kicad_plugin.cpp:

 // line 514
 m_out-Print( aNestLevel+1, (no_connects %d)\n,
 aBoard-GetUnconnectedNetCount() );

 We're writing out the file by hand, including all of the formatting such
 as parentheses, having to remember to manually escape things that need
 to be escaped, etc. Every single one of those is a place where one of
 these things can be forgotten. Some errors of that type, like forgetting
 to escape, can both go undetected for quite some time and possibly pose
 security risks.

 What I'd like is to have separate, data-agnostic and well tested
 s-expression code that reads in the file all at once into an internal
 data structure. Parsing everything correctly is handled at this point,
 and then all of the data can be trusted. The same structure can be
 written out by this s-expression code, which uses the same small routine
 for everything. This way, we ensure that the data is always written out
 correctly.

 It's a fairly simple change, really. Reading the data would even stay
 essentially the same: instead of asking the parser for a token, you're
 just traversing a data tree. The key is more in writing, where instead
 of printing out a formatted string to the file manually, you would add a
 string object to the structure - that string object, being the same as
 all the others, is guaranteed to know how to handle its data.

 A possible simpler route than an intermediate, in-memory structure would
 be to implement functions that perform all of these things, and call
 /them/ instead. For example, the above line 514 might become something
 like this:

 WriteSExpPair(no_connects, aBoard-GetUnconnectedNetCount();

 Where WriteSExpPair will write the parens correctly, validate
 no_connects to make sure there aren't accidentally any forbidden
 symbols typed in it, and would be overloaded to accept numbers, strings,
 etc. intelligently.

 (Even better would be if no_connects were a constant referred to by
 name instead of a literal, so the compiler could verify it...)

 On Mon, Jun 01, 2015 at 01:14:06PM -0400, Wayne Stambaugh wrote:
  Chris,
 
  I'm not sure what your proposing.  This code is fairly well designed and
  very easy to understand and modify which was one of the original design
  goals.  The s-expr tokens are well defined and immutable for each file
  format and are automatically generated from a text file containing a
  list of the tokens.  The only thing that varies is parsing of none token
  values such as numbers.  I need some examples of what changes you are
  proposing before I would be willing to give you the go ahead.
 
  Cheers,
 
  Wayne
 
  On 6/1/2015 12:29 AM, Chris Pavlina wrote:
   Hi,
  
   I've been having a look through some of the file I/O code in pcbnew,
 and
   I'm not really comfortable with it. Despite the nice new structured
   s-exp format, we're still printing data out by hand and parsing it back
   in similarly - rather a recipe for trouble, and at least for
   inconsistent files. I'd like to put in some work after the release to
   refactor this into a self-contained, data-agnostic S-expression
   parser/writer library. This should make it easier to consistently
   continue using the format later in the planned eeschema work. Also, it
   should significant reduce the risk of errors being introduced in read
   and write, since everything involving dirty external data will be
   contained in one place.
  
   Anyone object to this, or have thoughts to contribute? Obviously it
   shall continue to read and write the exact same format, no format
 changes.
  
   --
   Chris
  
  
   ___
   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
 
  ___
  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

 ___
 Mailing list: https://launchpad.net/~kicad-developers
 Post to : kicad-developers@lists.launchpad.net
 Unsubscribe : 

Re: [Kicad-developers] s-exp file read/write refactoring

2015-06-03 Thread Wayne Stambaugh
You might want to look at boost::property_tree.  There is an example for
the s-expr netlist format in eeschema/backanno.cpp.  One thing that I
would make mandatory is that the formatter and parser are object
agnostic.  There should be no interdependency between the s-expression
code and any board and/or schematic objects.  This would make it useful
for passing messages between the kiways using KiwayExpress messaging.
Also, please put this code in the common folder.  If it's designed
properly, it will be useful in many places other than pcbnew.

On 6/3/2015 9:11 AM, Kaspar Emanuel wrote:
 In case it helps you, I wrote a parser and serialiser for the .kicad_mod
 files in Haskell
 https://github.com/kasbah/haskell-kicad-data/blob/master/Data/Kicad/SExpr/Parse.hs.
 I test this against all the available GitHub libraries and it is also
 property tested (with randomly generated data) for internal consistency
 (i.e. writing and then parsing results in the same data as the one
 written). Obviously you can’t add Haskell code to KiCad itself but it
 might help in getting an overview or just some inspiration.
 
 ​
 
 On 1 June 2015 at 20:27, Chris Pavlina pavlina.ch...@gmail.com
 mailto:pavlina.ch...@gmail.com wrote:
 
 It's easy to understand, sure. My issue with it is things like this,
 from kicad_plugin.cpp:
 
 // line 514
 m_out-Print( aNestLevel+1, (no_connects %d)\n,
 aBoard-GetUnconnectedNetCount() );

I can see exactly what the output will be.  If you obfuscate this, I
will be reluctant to accept changes that make this code less readable.

 
 We're writing out the file by hand, including all of the formatting such
 as parentheses, having to remember to manually escape things that need
 to be escaped, etc. Every single one of those is a place where one of
 these things can be forgotten. Some errors of that type, like forgetting
 to escape, can both go undetected for quite some time and possibly pose
 security risks.
 
 What I'd like is to have separate, data-agnostic and well tested
 s-expression code that reads in the file all at once into an internal
 data structure. Parsing everything correctly is handled at this point,
 and then all of the data can be trusted. The same structure can be
 written out by this s-expression code, which uses the same small routine
 for everything. This way, we ensure that the data is always written out
 correctly.
 
 It's a fairly simple change, really. Reading the data would even stay
 essentially the same: instead of asking the parser for a token, you're
 just traversing a data tree. The key is more in writing, where instead
 of printing out a formatted string to the file manually, you would add a
 string object to the structure - that string object, being the same as
 all the others, is guaranteed to know how to handle its data.
 
 A possible simpler route than an intermediate, in-memory structure would
 be to implement functions that perform all of these things, and call
 /them/ instead. For example, the above line 514 might become something
 like this:
 
 WriteSExpPair(no_connects, aBoard-GetUnconnectedNetCount();

How about using string formatting with variable arguments:

WriteSExprPair(no_connects %d, aBoard-GetUnconnectedNetCount());

Otherwise you would have to provide an overloaded version of
WriteSExprPair for every data type which is not very readable.

 
 Where WriteSExpPair will write the parens correctly, validate
 no_connects to make sure there aren't accidentally any forbidden
 symbols typed in it, and would be overloaded to accept numbers, strings,
 etc. intelligently.
 
 (Even better would be if no_connects were a constant referred to by
 name instead of a literal, so the compiler could verify it...)
 
 On Mon, Jun 01, 2015 at 01:14:06PM -0400, Wayne Stambaugh wrote:
  Chris,
 
  I'm not sure what your proposing.  This code is fairly well
 designed and
  very easy to understand and modify which was one of the original
 design
  goals.  The s-expr tokens are well defined and immutable for each file
  format and are automatically generated from a text file containing a
  list of the tokens.  The only thing that varies is parsing of none
 token
  values such as numbers.  I need some examples of what changes you are
  proposing before I would be willing to give you the go ahead.
 
  Cheers,
 
  Wayne
 
  On 6/1/2015 12:29 AM, Chris Pavlina wrote:
   Hi,
  
   I've been having a look through some of the file I/O code in
 pcbnew, and
   I'm not really comfortable with it. Despite the nice new structured
   s-exp format, we're still printing data out by hand and parsing
 it back
   in similarly - rather a recipe for trouble, and at least for
   inconsistent files. I'd like to put in some work after the
 release to