Re: [GLISS] - alternative viewpoint

2012-09-24 Thread Janek Warchoł
Hi all,

On Mon, Sep 17, 2012 at 11:28 PM, Janek Warchoł
 wrote:
> James,
>
>> [...]
>
> Now i feel offended, both as a user and a developer.
> At first i was going to write a long reply to your email, but then i
> thougt that it would only result in more misunderstandings.  Can we
> chat, either using text or voice?  I'd really like to solve this
> situation.

In case you worry about this: we sorted it out - it turned out to be a
really big misunderstanding on my side: James was only pretending to
be an i-don't-care-fix-that-you-lazy-bum user ;)  I thought that he
was serious, lol! :)

cheers,
Janek

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-24 Thread David Kastrup
"Sue Daniels"  writes:

> Graham Percival wrote Sunday, September 23, 2012 7:50 AM
>
>> On Sat, Sep 22, 2012 at 01:42:46PM +0200, Marc Hohl wrote:
>>
>>> So I repeat my proposal again: a developer *must* include
>>> regression tests, he *should* do the doc work, but if he feels
>>> not very comfortable at writing some paragraphs for the
>>> docs, he should *have to* raise an issue about that.
>> 
>> I don't think that piling up a bunch of issues will help.  Rather,
>> we should try to not alienate our existing documentation writers,
>> and once that's done, recruit new doc writers.  It wouldn't be
>> hard for somebody to write docs for every new feature between each
>> release.
>
> I'd prefer to see an issue raised for the documentation by the developer
> at the time the new feature is pushed to staging.  Otherwise it is likely
> to be forgotten.  It was only by chance that I happened to find the
> change to \time recently and my first action was to raise an issue to
> document it.  If documentation is to be done as a separate activity it
> should be done under an issue anyway, to keep the Bug Squad happy.

The only previous documentation of set-time-signature had been in

Documentation/snippets/new/conducting-signs,-measure-grouping-signs.ly

and the code updated this.  Ok, a snippet is not really a substitute for
real documentation, so apologies.  I only remembered that I eradicated
set-time-signature completely including rewriting its documentation, but
I did not remember it had been so flimsy to start with.

-- 
David Kastrup


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-24 Thread Sue Daniels

Graham Percival wrote Sunday, September 23, 2012 7:50 AM

> On Sat, Sep 22, 2012 at 01:42:46PM +0200, Marc Hohl wrote:
>
>> So I repeat my proposal again: a developer *must* include
>> regression tests, he *should* do the doc work, but if he feels
>> not very comfortable at writing some paragraphs for the
>> docs, he should *have to* raise an issue about that.
> 
> I don't think that piling up a bunch of issues will help.  Rather,
> we should try to not alienate our existing documentation writers,
> and once that's done, recruit new doc writers.  It wouldn't be
> hard for somebody to write docs for every new feature between each
> release.

I'd prefer to see an issue raised for the documentation by the developer
at the time the new feature is pushed to staging.  Otherwise it is likely
to be forgotten.  It was only by chance that I happened to find the
change to \time recently and my first action was to raise an issue to
document it.  If documentation is to be done as a separate activity it
should be done under an issue anyway, to keep the Bug Squad happy.

Trevor
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-24 Thread James
Hello,

On 24 September 2012 09:22, Jan Nieuwenhuizen  wrote:
> David Kastrup writes:
>
>> I think it was during the documentation of the footnote stuff that we
>> came up with several examples (including use of s1*0/<>) that made clear
>> that we were better off refining the code rather than the documentation.
>>
>> And that's fine.  Changing code because it would be too embarrassing to
>> document it is certainly a better option than leaving it undocumented.
>
> New functionality must come with minimal documentation, otherwise it
> does not exist.  We cannot expect from documentation writers to work
> from reading the code.
>

I think we kind of had this conversation a few months (last year?) and
that the very least it should appear here:

http://lilypond.org/doc/v2.16/Documentation/changes/index.html

Most developers do try, or at least say there is no/should be
documentation for a new feature.

@devs-in-general

I've always offered to tidy up any submitted documentation (i.e. via
email or text file) and form a patch if that is too time consuming;
all I ask is to suggest an appropriate place/section that it should go
- this saves me a lot of time. The hardest thing to come up with are
'good' lilypond examples - indeed the footnote documentation in the NR
(initially) was spawned from Mikes own reg tests, that is better than
nothing.

James

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-24 Thread Jan Nieuwenhuizen
David Kastrup writes:

> I think it was during the documentation of the footnote stuff that we
> came up with several examples (including use of s1*0/<>) that made clear
> that we were better off refining the code rather than the documentation.
>
> And that's fine.  Changing code because it would be too embarrassing to
> document it is certainly a better option than leaving it undocumented.

New functionality must come with minimal documentation, otherwise it
does not exist.  We cannot expect from documentation writers to work
from reading the code.

Jan

-- 
Jan Nieuwenhuizen  | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar®  http://AvatarAcademy.nl  

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-23 Thread Marc Hohl

Am 23.09.2012 08:50, schrieb Graham Percival:

On Sat, Sep 22, 2012 at 01:42:46PM +0200, Marc Hohl wrote:

Am 21.09.2012 11:00, schrieb David Kastrup:

A user interface change without documentation or regtest is dead code.

Regtests are somewhat mandatory:

http://lilypond.org/doc/v2.17/Documentation/contributor/write-regression-tests

but the documentation work is not a "you'll have to do" but rather a
"it would be nice if" rule.

Yes, that's deliberate.  There's no point holding back programmers
who are not comfortable writing code.

Yes, that's how I understand it as well.



But at least there should be some automatism that raises an
issue "xyz-needs documentation" whenever a patch has made it
through the revision process but lacks of a proper documentation
(*if* the patch concerns a major change, like my bar line stuff).

There's already some sort of this:
   git diff -u -r release/2.14.0-1 -r release/2.15.95-1 \
 input/regression/
then check if the new features were added to the docs.

It's already listed in the Major release checklist, although we
skipped over it at Waltrop.

Ah, ok. The word 'automatism' was perhaps not the best
choice – I had something like a developer's rule in mind:
"If you have a strong feeling that this patch does something
overwhelming and the documentaion is not changed accordingly,
thou mightst raise an issue for that." (carved in stone, scanned,
and included in the CG, of course ;-)



In my case, I *will* tackle documentation if nobody else wants to,
because I know that this feature needs a change in the docs, but
the patch itself has undergone quite 60+ comments (part 1 and 2
altogether), so when the documentation work would have been
included yet, I think we would be at 100+ (or I had already given
up ;-).

I suggest doing the documentation as a separate patch.

Of course.



We might as well remove it before the next stable release.

No.


So I repeat my proposal again: a developer *must* include
regression tests, he *should* do the doc work, but if he feels
not very comfortable at writing some paragraphs for the
docs, he should *have to* raise an issue about that.

I don't think that piling up a bunch of issues will help.  Rather,
we should try to not alienate our existing documentation writers,
and once that's done, recruit new doc writers.  It wouldn't be
hard for somebody to write docs for every new feature between each
release.

Well, my idea was:
(a) to avoid that this issue gets lost
(b) not to alienate the documentation writers, of course!
(c) helping them to find the issues where the docs have to be
improved
(d) to include the user community by announcing these issues
on -user, because
(e) if a user finds out that doing such a task is not very difficult,
he might at some point turn into a developer ;-)

Regards,

Marc



___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-23 Thread David Kastrup
James  writes:

> But I believe unless we now do something that is backward-incompatible
> with a (yet) undocumented function in the Notation or Learning manuals
> that we don't hold back the patch for the code, it would be nice to
> have it all documented as well, but that isn't always the case.
>
> The later footnote syntax was a case in point (I think) where we did
> change the syntax significantly enough that the old documentation
> would have been incorrect as opposed to incomplete/missing, we
> couldn't really push that on the users until had had been documented.

Well, it is unrealistic to expect both code and documentation to be
created entirely linearly, without the need of iterations.

In fact, sometimes it is while documenting things that it becomes clear
that an interface was chosen ill-advisedly.  And then it sometimes makes
sense to restart the interface design.

I think it was during the documentation of the footnote stuff that we
came up with several examples (including use of s1*0/<>) that made clear
that we were better off refining the code rather than the documentation.

And that's fine.  Changing code because it would be too embarrassing to
document it is certainly a better option than leaving it undocumented.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-23 Thread James
Hello,

On 23 September 2012 11:14, David Kastrup  wrote:
> "Sue Daniels"  writes:
>
>> Graham Percival wrote Sunday, September 23, 2012 7:50 AM
>>
>
>> If documentation is to be done as a separate activity it should be
>> done under an issue anyway, to keep the Bug Squad happy.
>
> The initial batch of documentation is really the task of the original
> author.  You can't expect a good documentation writer to decipher the
> code and take a guess what it does.  But with some luck, a good
> documentation writer has the skills or experience to decipher what a
> good coder mistakes for good documentation, and take a guess at what it
> was supposed to mean.

That is exactly what happened with Mike Solomon's original footnote
and pure-unpure container documentation - I still couldn't tell you
what one is now, but Mike at least created a half formed patch and
sent it to me, I tidied it up - a lot of the 'work' is also
understanding/remembering the texinfo syntax and CG guidelines - gave
it back to Mike to make sure it still made technical sense, he gave me
another edit and explained what I hadn't got quite right (lost in
translation so to speak) and it went back and forth a bit. Then when
it was ok (for me and Mike) I, as a Doc editor, made a patch and then
others chipped in. Mike had the good grace to answer the comments even
though I submitted the patch (it was his work after all) and I then
made the appropriate edits.

But I believe unless we now do something that is backward-incompatible
with a (yet) undocumented function in the Notation or Learning manuals
that we don't hold back the patch for the code, it would be nice to
have it all documented as well, but that isn't always the case.

The later footnote syntax was a case in point (I think) where we did
change the syntax significantly enough that the old documentation
would have been incorrect as opposed to incomplete/missing, we
couldn't really push that on the users until had had been documented.

James

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-23 Thread David Kastrup
"Sue Daniels"  writes:

> Graham Percival wrote Sunday, September 23, 2012 7:50 AM
>
>> On Sat, Sep 22, 2012 at 01:42:46PM +0200, Marc Hohl wrote:
>>
>>> So I repeat my proposal again: a developer *must* include
>>> regression tests, he *should* do the doc work, but if he feels
>>> not very comfortable at writing some paragraphs for the
>>> docs, he should *have to* raise an issue about that.
>> 
>> I don't think that piling up a bunch of issues will help.  Rather,
>> we should try to not alienate our existing documentation writers,
>> and once that's done, recruit new doc writers.  It wouldn't be
>> hard for somebody to write docs for every new feature between each
>> release.
>
> I'd prefer to see an issue raised for the documentation by the developer
> at the time the new feature is pushed to staging.  Otherwise it is likely
> to be forgotten.  It was only by chance that I happened to find the
> change to \time recently and my first action was to raise an issue to
> document it.

I want to point out that the original issue also included documentation.
I readily admit that the quality and discoverability of it might have
warranted the attention of more capable documentation writers, but it is
not of the "I change this for my own sake and don't care whether it will
or even can be useful to anybody else ever after" quality.

> If documentation is to be done as a separate activity it should be
> done under an issue anyway, to keep the Bug Squad happy.

The initial batch of documentation is really the task of the original
author.  You can't expect a good documentation writer to decipher the
code and take a guess what it does.  But with some luck, a good
documentation writer has the skills or experience to decipher what a
good coder mistakes for good documentation, and take a guess at what it
was supposed to mean.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-22 Thread Graham Percival
On Sat, Sep 22, 2012 at 01:42:46PM +0200, Marc Hohl wrote:
> Am 21.09.2012 11:00, schrieb David Kastrup:
> >A user interface change without documentation or regtest is dead code.
> Regtests are somewhat mandatory:
> 
> http://lilypond.org/doc/v2.17/Documentation/contributor/write-regression-tests
> 
> but the documentation work is not a "you'll have to do" but rather a
> "it would be nice if" rule.

Yes, that's deliberate.  There's no point holding back programmers
who are not comfortable writing code.

> But at least there should be some automatism that raises an
> issue "xyz-needs documentation" whenever a patch has made it
> through the revision process but lacks of a proper documentation
> (*if* the patch concerns a major change, like my bar line stuff).

There's already some sort of this:
  git diff -u -r release/2.14.0-1 -r release/2.15.95-1 \
input/regression/
then check if the new features were added to the docs.

It's already listed in the Major release checklist, although we
skipped over it at Waltrop.

> In my case, I *will* tackle documentation if nobody else wants to,
> because I know that this feature needs a change in the docs, but
> the patch itself has undergone quite 60+ comments (part 1 and 2
> altogether), so when the documentation work would have been
> included yet, I think we would be at 100+ (or I had already given
> up ;-).

I suggest doing the documentation as a separate patch.

> >We might as well remove it before the next stable release.

No.

> So I repeat my proposal again: a developer *must* include
> regression tests, he *should* do the doc work, but if he feels
> not very comfortable at writing some paragraphs for the
> docs, he should *have to* raise an issue about that.

I don't think that piling up a bunch of issues will help.  Rather,
we should try to not alienate our existing documentation writers,
and once that's done, recruit new doc writers.  It wouldn't be
hard for somebody to write docs for every new feature between each
release.

- Graham

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-22 Thread Janek Warchoł
On Sat, Sep 22, 2012 at 1:42 PM, Marc Hohl  wrote:
> It would be interesting to post such issues on the -user list,
> because this would give users a possiblility to contribute *and*
> to describe the new feature from a user's point of view which
> is not a bad thing, after all.

+1.  It would also be a good check whether the issue has good enough
description - without good description a user wouldn't know what it's
supposed to do.

cheers,
Janek

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-22 Thread Janek Warchoł
On Thu, Sep 20, 2012 at 11:56 AM, David Kastrup  wrote:
> David Kastrup  writes:
>
>> Within your own scores, be consistent in your choices.  How this
>> consistency looks, does not matter.  Within LilyPond, there is a large
>> consistency which elements are uppercase, and which lowercase.  The one
>> thing that actually gets annoying is CamelCase.  However, as a rule,
>> camelcase starts with lowercase letters.  With recent changes in the
>> lexer, it would be possible to replace the CamelCase words with dashed
>> words.  That would allow for things like
>>
>> \slur-up \slur-down \voice-one \one-voice \voice-two and so on.  I am
>> personally not a big fan of CamelCase.  You would, of course, get the
>> same principal problem "I can't remember where and whether to put
>> dashes" when making use of that option.
>>
>> Weeding out CamelCase would not, in itself, change the classes of things
>> that we use uppercase for, lowercase for, and dashes for (there would be
>> some overlap in classes since we _do_ have a few existing
>> words-with-dashes and \commands-with-dashes, but distinguishing those
>> classes is actually not important, unlike the pure lower/uppercase
>> distinction we actually use for Grob and Context names).
>
> Just quoting this as yet another example where I offer some concrete
> suggestions in a GLISS thread with nobody bothering to even reply.

I apologize.  My reply is:

1) i agree that changing CamelCase to dashes won't solve the problem.

2)

> Weeding out CamelCase would not, in itself, change the classes of things
> that we use uppercase for, lowercase for, and dashes for (there would be
> some overlap in classes since we _do_ have a few existing
> words-with-dashes and \commands-with-dashes, but distinguishing those
> classes is actually not important,

you mean that we could change different naming styles that GrobNames,
property-names and Engraver_names have?  So that all of them would be,
for example, in CamelCase?  I think doing so might be a good idea - i
remember it was very confusing for me when i was a beginner.

> unlike the pure lower/uppercase
> distinction we actually use for Grob and Context names).

I'm not sure i understand - you are referring to the fact that
lowercase strings are note names, while upper case denotes Grobs and
Contexts?  Or that grobs and contexts differ in case somewhere?

>> I don't think that this characterization is doing justice to the
>> developers since it basically assumes that their main incentive is
>> making fun of users.
>>
>> Part of the reason working on LilyPond is less rewarding than it could
>> be is this atmosphere of distrust, and the urge to rein in developers
>> who apparently have nothing better to do than damage LilyPond.
>
> "distrust" is maybe too strong a word.  "non-involvement" may be closer
> to the truth.  Regarding the GLISS discussions and proposals in that
> context becoming official project policy, participation of programmers
> is actively discouraged.  Goals are being set without bothering to look
> at how the existing and developing code base and its underlying design
> will support them.

Sure, we shouldn't set goals without looking at how the existing and
developing code base and its underlying design will support them.
However, apart from GLISS' general goal ("let's improve the syntax") i
don't remember any specific goal that was actually set, nor any
decision finally made.  Maybe i overlooked something - can you point
me to some goal that was set already?  All i see is a lot of pondering
about ideas, in a "what about doing x?" manner.

> For me, one of the pillars of userfriendliness is
> coherence of design.  When a user is able to predict how to do
> something.

+1

> If programmers are not supposed to participate in the design
> process,

Are you referring to Graham's suggestion that you should not bother
about current GLISS discussions?  Or something else?

> and non-programmers will not be participating in executing this
> design, we get to the situation where those who have the means of
> implementing a design will do this ad-hoc, stealthily, and without
> communication or coordination.

indeed, that is bad.

> "Stealthily" may seem like too strong a word, but quite a few of the
> actual usability/language features are proposed and finally implemented
> in the way we see in
> http://code.google.com/p/lilypond/issues/detail?id=2717>.  There is
> minimal feedback by few persons (this particular issue has already
> gotten more feedback than usual in its changingfirst iterations and will
> presumably pass into LilyPond silently once nobody can think of
> something to particularly dislike).

i apologize for not participating in that discussion.

> If you take a look at our "Changes" file from 2.16 and take a look at
> how many of those changes were the result from following through with
> active and planned policy decisions rather than spontaneously done work,
> it does not appear that our purported planning 

Re: [GLISS] - alternative viewpoint

2012-09-22 Thread Janek Warchoł
On Sun, Sep 16, 2012 at 6:05 PM, David Kastrup  wrote:
> Janek Warchoł  writes:
>> Hmm, this sounds complicated.  Do you mean that implementing more
>> informative ("custom") error messages with current parser will wreak
>> havoc, but if we simplify the parser first, it would be possible to do
>> this in a sane way?
>
> No.  I don't mean "wreak havoc" but rather "will be in the way while I
> am still reworking the parser internals".

ok

> It's like putting up tapestry
> and setting up furniture before doing the plumbing.

I'd say that this situation has a high probability of wreaking havoc
on tapestry and furniture :)

Janek

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-22 Thread Janek Warchoł
Hi,

i'm sorry for the delay :-(  There are so many emails flying around
that i find it hard to keep up.
Don't feel obliged to reply to any "i don't understand" part - i have
so many emails to write that some of my questions may remain
unanswered.

On Sun, Sep 16, 2012 at 6:02 PM, David Kastrup  wrote:
> Janek Warchoł  writes:
>
>> On Sat, Sep 15, 2012 at 10:20 AM, David Kastrup  wrote:
>>> b) our C++ engravers announce to the type system (and via that, to the
>>> documentation) which context properties they read, modify and write.
>>> There is no reason that this does not also include the Grob descriptions
>>> which are even now a special case of context property.
>>
>> I didn't understand this part well, but it guess it's not that
>> important to have me understand it now (?).
>
> Take a look in the internals manual.  It knows which engravers access
> which context properties.

Hmm.  I thought that i will see chordNameLowercaseMinor listed under
Chord name engraver
(http://lilypond.org/doc/v2.17/Documentation/internals-big-page#chord_005fname_005fengraver),
but i don't.

> A Grob is actually just a (substructured)
> context property,

That's surprising to me.

> so it can be documented in the same manner.

agreed.

>> (i write this just to provide you with feedback on the difficulty of
>> some of your emails)
>
> This is the developer list, after all.

In my opinion the difference between user and developer list should be
mostly in topics discussed, not necessarily in the difficulty of the
emails.
Granted, some things are impossible to make really easy, though.

>> So,
>>   \override BarNumber #'font-size = 5
>> would actually result in
>>   \override Score.BarNumber #'font-size = 5
>> ?
>
> Yes, that's the idea.  As long as you have no engraver at Staff level
> looking at the BarNumber properties.  Maybe it would be more robust to
> explicitly declare the default context for writing each property.  After
> all, that is a one-time job.

Maybe.

> Or declare an engraver "canonical" for some properties, so that if
> _that_ engraver is moved, the default context moves along.  At the
> current point of time, an engraver declares which properties it
> reads/modifies/writes (why do we need all three?), and we might let it
> declare which it "owns" with respect to the default context.

I don't have any opinion here, sorry.

>>> Of course, this is not without drawback either: if there are multiple
>>> engravers looking at that property at multiple levels and you are
>>> interested in overriding the behavior of the engraver in an outer
>>> level, the unspecific override will be done in the inner level and
>>> again not have an apparent effect.
>>
>> I think i won't understand this w/o an example.
>
> Write an engraver at Staff level which looks at currentBarNumber, and
> \override currentBarNumber will just work at Staff level instead of
> Score level.

Ah, ok.  Thanks.

>>> One might argue that users who are able to write to a mailing list
>>> after looking for it in the manual make up for less than 1% of our
>>> targeted demographic group, users who come to LilyPond not primarily
>>> since they enjoy being in total control over the data structures
>>> their typesetting program uses.
>>>
>>> And particularly for those it makes a big selling point if naive
>>> expectations disregarding the technical necessities and
>>> implementation constraints happen to hit the mark semi-regularly.  Of
>>> course, we can't make that 100%, but 80% is a lot more encouraging
>>> than 2%.  If you get everything wrong at first try, that's a big
>>> turnoff.  Even if some smart helpful guy explains to you why
>>> everything is wrong.
>>
>> If i understand correctly, you mean that we don't have many emails
>> from people being confused by pre/postfix issues because these people
>> never make it to the mailing list (i.e. they are too discouraged by
>> their first Lily try that they quit immediately)?  I think you're
>> right.  *We* may never notice that some change simplified things
>> (because we're already used to Lily), but newcomers will.
>
> I think that if your first five attempts to do something on your own all
> end catastrophically, you'll just quit again.

I don't understand why you wrote "again" here.

>>> a) reflection.  Should \displayLilyMusic recognize expressions that
>>> can be produced by a wrapper and output them?  If we answer "yes" to
>>> that question, it would make sense to provide some infrastructure
>>> for specifying appropriate reverse engineering rules to LilyPond in
>>> a manner that is not significantly more complex to specify than the
>>> wrapper itself.
>>
>> I don't understand what you mean here.
>
> \displayLilyMusic \once\erase Accidental
>
> might choose to display \once\erase Accidental instead of
>
> \once\override Accidental #'stencil = ##f
>
> But for that there must be an easy way to teach \displayLilyMusic about
> \erase.

Ah, i think i understand now.  Therefore, my ans

Re: [GLISS] - alternative viewpoint

2012-09-22 Thread Marc Hohl

Am 21.09.2012 11:00, schrieb David Kastrup:

Marc Hohl  writes:


But I don't want to tackle around with the documentation *yet* while
it is not sure that my patch gets accepted and the new interface is
considered a good idea by most of the developers.  So while in an
ideal world every programmer enhances the documentation on the fly, I
don't think it would be a good idea to *force* them to do so.

A user interface change without documentation or regtest is dead code.

Regtests are somewhat mandatory:

http://lilypond.org/doc/v2.17/Documentation/contributor/write-regression-tests

but the documentation work is not a "you'll have to do" but rather a
"it would be nice if" rule.

I am quite sure that there are people who are better in writing
documentation than in programming and the other way round.
But at least there should be some automatism that raises an
issue "xyz-needs documentation" whenever a patch has made it
through the revision process but lacks of a proper documentation
(*if* the patch concerns a major change, like my bar line stuff).

In my case, I *will* tackle documentation if nobody else wants to,
because I know that this feature needs a change in the docs, but
the patch itself has undergone quite 60+ comments (part 1 and 2
altogether), so when the documentation work would have been
included yet, I think we would be at 100+ (or I had already given
up ;-).


We might as well remove it before the next stable release.

Of course.

So I repeat my proposal again: a developer *must* include
regression tests, he *should* do the doc work, but if he feels
not very comfortable at writing some paragraphs for the
docs, he should *have to* raise an issue about that.

It would be interesting to post such issues on the -user list,
because this would give users a possiblility to contribute *and*
to describe the new feature from a user's point of view which
is not a bad thing, after all.

Regards,

Marc






___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-21 Thread David Kastrup
Marc Hohl  writes:

> But I don't want to tackle around with the documentation *yet* while
> it is not sure that my patch gets accepted and the new interface is
> considered a good idea by most of the developers.  So while in an
> ideal world every programmer enhances the documentation on the fly, I
> don't think it would be a good idea to *force* them to do so.

A user interface change without documentation or regtest is dead code.
We might as well remove it before the next stable release.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-21 Thread Marc Hohl

Am 21.09.2012 00:31, schrieb Thomas Morley:

[...]
  Hi David, Marc,

  speaking only for me: I'm terrible sorry that I currently can't give
  you the feedback you desire. Since my injury, I wasn't able to
  concentrate on any more involved project or to finish any larger one.
  Also, I let Marc alone with the bar-line-code, we started to tackle together.

  Marc, please accept my apologies.

No problem for me at all – I had some bad feelings that I grabbed
your ideas and modified it to my needs without some discussion
with you. I hope that's ok for you.


  So I mostly limited my activities to answer questions on the user-list, FWIW.

And you do a great job there, BTW!


  But perhaps you may accept some summarizing thoughts about involving
  users in the development-process. (Most of them already mentioned)
  Or better: why it doesn't work, currently.

  Thinking of an average user, subscribing the user-list only:
  (1)
  He's often not informed that sth is planned/discussed/in-work.

Sure.

  (2)
  If he's informed and looks at the code on Rietveld, he doesn't know
  what to do with it, because very often there's no
  example/regtest/snippet _how_ to use the new
  syntax/feature/code/whatever.
  Ok, Rietveld is not the place to put in such additional, illustrating
  examples, etc.
  But I think you get my point.

Ok. But this means that the programmer who worked on the patch should
do the documentation part at the same time, so that any one will understand
what the patch is all about.

I second this if it is about writing inline comments in the source code.
I did this with by current bar line patch, because more often than not
I have to try to understand some parts of a programm *I* had written
myself some months ago.

But for the bar line patch: I would be glad if someone else wanted to
write some paragraphs about the new interface, but I think this task
will be mine anyway ;-) But I don't want to tackle around with the 
documentation
*yet* while it is not sure that my patch gets accepted and the new 
interface is

considered a good idea by most of the developers.
So while in an ideal world every programmer enhances the documentation
on the fly, I don't think it would be a good idea to *force* them to do so.

So, you either have to figure out for yourself how the patch is supposed 
to work
(as a user), or there is a possibility to include some small test files 
that show

the functionality. I think *every* developer has some 'quicktest.ly' files
around that he uses for testing, and they would serve as a testbed for
anyone trying to get a grip on the new stuff.

  (3)
  Thinking of more involved tasks like testing a patch (and managing the
  tools needed to do so), I assume this is not a task an average-user is
  expected to manage, with the current system.

  At least I had some larger problems installing LilyDev (I wasn't able
  to install the required fontforge-version, I had to ask for help)
  Also, learning how to deal with the new world of git-commands is
time-consuming.
  etc etc

So I repeat my proposal: in this case we need *precompiled* test versions.
I don't know if that is feasible in terms of disk space and work load 
(it had to

be done on GUB), but at least patches with a major impact on lilypond's
usability/syntax/whatever could then easily be tested by a broader user
community if this just means to download and install an executable
and recompile your current scores with it.

Regards,

Marc


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-20 Thread Thomas Morley
Sorry, forgot to complete the mail adresses.

 2012/9/20 David Kastrup :
> Marc Hohl  writes:
 [...]
> But we don't have users involved either.  And those are actually the
> ones for which such additions are made.  Involving them instead in a
> planning stage largely disconnected from actual developments is a poor
> substitute.
 [...]
> the target audience are users (a superset of developers,
> hopefully).  But we don't have them involved in the feedback.
>
> And I don't think we should wait with getting them involved until my
> devious plan of turning users into programmers almost without noticing
> bears fruit.
>
>> Do you propose that the user base should get more information
>> about development work?
>
> Yes.
>
>> When working on tablature features, I got an *overwhelming*
>> response of other users, a lot of "how about x/can you do y"
>> stuff which more often than not found its way into tablature.scm.
>>
>> In other areas, the response was about nil.
>>
>> So there is no common rule how to get people involved.
>
> Sure.  But with our issue tracker, users don't get involved as a rule.
> Even on issues started from a user report.
>
>>> We definitely can make use of a _lot_ more of this kind of user
>>> involvement and exchange of knowledge, interest, and inspiration, but I
>>> don't see that the syntax discussions and decisions detached from the
>>> actual development are facilitating this.
>>
>> Well, I am still not sure about the latter.
>
> Within specific sub-areas like tablature support, this apparently works
> better than when LilyPond as a whole is concerned.
>
> "Let's write a subsystem/package for this" is just much more manageable
> than "let's change LilyPond as a whole".
>
> Obviously, we should strive to change LilyPond as a whole in order to
> make it easier to delegate problems to the subsystem/package level.
> That allows for much more parallelized processing.
>
> --
> David Kastrup

 Hi David, Marc,

 speaking only for me: I'm terrible sorry that I currently can't give
 you the feedback you desire. Since my injury, I wasn't able to
 concentrate on any more involved project or to finish any larger one.
 Also, I let Marc alone with the bar-line-code, we started to tackle together.

 Marc, please accept my apologies.

 So I mostly limited my activities to answer questions on the user-list, FWIW.

 But perhaps you may accept some summarizing thoughts about involving
 users in the development-process. (Most of them already mentioned)
 Or better: why it doesn't work, currently.

 Thinking of an average user, subscribing the user-list only:
 (1)
 He's often not informed that sth is planned/discussed/in-work.
 (2)
 If he's informed and looks at the code on Rietveld, he doesn't know
 what to do with it, because very often there's no
 example/regtest/snippet _how_ to use the new
 syntax/feature/code/whatever.
 Ok, Rietveld is not the place to put in such additional, illustrating
 examples, etc.
 But I think you get my point.
 (3)
 Thinking of more involved tasks like testing a patch (and managing the
 tools needed to do so), I assume this is not a task an average-user is
 expected to manage, with the current system.

 At least I had some larger problems installing LilyDev (I wasn't able
 to install the required fontforge-version, I had to ask for help)
 Also, learning how to deal with the new world of git-commands is
time-consuming.
 etc etc

 So I second Marc:

 2012/9/20 Marc Hohl :

> but in other cases
> you'll need a way to allow users to test patches, and that's more
> difficult,

 -Harm

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-20 Thread Marc Hohl

[sorry, forgot to hit "Reply to all"]
Am 20.09.2012 19:02, schrieb David Kastrup:

Marc Hohl  writes:


[...]

The problem is not people not interested in this kind of
discussions/proposals.  The problem is people who stop being interested
in an oh so important problem the moment one tries offering different,
more feasible solutions than what they were thinking of.

If the problem is not important enough to give feasible approaches at a
solution serious consideration (which most certainly would include
explaining in which way they appear inferior to the less feasible
approaches), then it is hard to consider it important enough to bother
with the infeasible approaches.

That's true.



I can only speak for myself, but the main "problem" is that most of
the time I can spend for working on LilyPond is put into the actual
patches; the reviewing process is handled rather shabbily, I confess.

With regard to reviewing user interface additions, it may indeed be the
case that other developers don't care much since they could get along
fine previously, trust they'll get along fine in future, and maybe trust
other developers not to do all too much damage.

But we don't have users involved either.  And those are actually the
ones for which such additions are made.  Involving them instead in a
planning stage largely disconnected from actual developments is a poor
substitute.

+1


[...]

Do you propose that the user base should get more information
about development work?

Yes.

[...]
Within specific sub-areas like tablature support, this apparently works
better than when LilyPond as a whole is concerned.

The strategy to split the development process into sub-areas
and announce them on -user might be a good plan; this means that
someone has to provide a reasonable "interface" so that users
can be easily informed about topic x.
This is probably easy when topic x is about extending some features
or defining new features lilypond should have, but in other cases
you'll need a way to allow users to test patches, and that's more
difficult, I think (except there is a way to extend the automatic patch
test mechanism so that users can download special precompiled
versions of lilypond including a certain patch set and test it thoroughly
before this feature becomes official).


"Let's write a subsystem/package for this" is just much more manageable
than "let's change LilyPond as a whole".

Obviously, we should strive to change LilyPond as a whole in order to
make it easier to delegate problems to the subsystem/package level.
That allows for much more parallelized processing.

+1

Do you already have a strategy how to split the whole system
into subsystems?
Do you think of extending the way the work on lilypond is done at present
(i.e. the patch revision system and the code guidelines stay mostly
unchanged) or rather to allow for something like the macro packages
in LaTeX, where anyone can roll his own package, writes a documentation
for it and may upload it on some server?

Regards,

Marc





___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-20 Thread David Kastrup
Marc Hohl  writes:

> Am 20.09.2012 11:56, schrieb David Kastrup:
>> David Kastrup  writes:
>>
>>> Within your own scores, be consistent in your choices.  How this
>>> consistency looks, does not matter.  Within LilyPond, there is a large
>>> consistency which elements are uppercase, and which lowercase.  The one
>>> thing that actually gets annoying is CamelCase.  However, as a rule,
>>> camelcase starts with lowercase letters.  With recent changes in the
>>> lexer, it would be possible to replace the CamelCase words with dashed
>>> words.  That would allow for things like
>>>
>>> \slur-up \slur-down \voice-one \one-voice \voice-two and so on.  I am
>>> personally not a big fan of CamelCase.  You would, of course, get the
>>> same principal problem "I can't remember where and whether to put
>>> dashes" when making use of that option.
>>>
>>> Weeding out CamelCase would not, in itself, change the classes of things
>>> that we use uppercase for, lowercase for, and dashes for (there would be
>>> some overlap in classes since we _do_ have a few existing
>>> words-with-dashes and \commands-with-dashes, but distinguishing those
>>> classes is actually not important, unlike the pure lower/uppercase
>>> distinction we actually use for Grob and Context names).
>> Just quoting this as yet another example where I offer some concrete
>> suggestions in a GLISS thread with nobody bothering to even reply.
> It is not that I am not interested in this kind of
> discussions/proposals, it is just that I have no problem
> with camelCase/uppercase/lowercase stuff, so I don't need
> a change here; on the other hand, if this would make it
> easier for everyone, then I would not object to a
> "lilypond is all lowercase" change.

The problem is not people not interested in this kind of
discussions/proposals.  The problem is people who stop being interested
in an oh so important problem the moment one tries offering different,
more feasible solutions than what they were thinking of.

If the problem is not important enough to give feasible approaches at a
solution serious consideration (which most certainly would include
explaining in which way they appear inferior to the less feasible
approaches), then it is hard to consider it important enough to bother
with the infeasible approaches.

> I can only speak for myself, but the main "problem" is that most of
> the time I can spend for working on LilyPond is put into the actual
> patches; the reviewing process is handled rather shabbily, I confess.

With regard to reviewing user interface additions, it may indeed be the
case that other developers don't care much since they could get along
fine previously, trust they'll get along fine in future, and maybe trust
other developers not to do all too much damage.

But we don't have users involved either.  And those are actually the
ones for which such additions are made.  Involving them instead in a
planning stage largely disconnected from actual developments is a poor
substitute.

> I take a look at nearly *every* issue when I got an email
> notification, but I often do not find the time to get deeper into the
> problem to understand what the current proposal means or what the
> patch to be review actually does. And just a quick "LGTM, but not
> tested" doesn't help anybody.

That's more or less topical for code changes, like the stuff Mike does.
For documentation and user interface changes (probably with the
exception of things like "try removing the closed music category" which
focuses on obliterating behavior that was not really suitable for
documenting), the target audience are users (a superset of developers,
hopefully).  But we don't have them involved in the feedback.

And I don't think we should wait with getting them involved until my
devious plan of turning users into programmers almost without noticing
bears fruit.

> Do you propose that the user base should get more information
> about development work?

Yes.

> When working on tablature features, I got an *overwhelming*
> response of other users, a lot of "how about x/can you do y"
> stuff which more often than not found its way into tablature.scm.
>
> In other areas, the response was about nil.
>
> So there is no common rule how to get people involved.

Sure.  But with our issue tracker, users don't get involved as a rule.
Even on issues started from a user report.

>> We definitely can make use of a _lot_ more of this kind of user
>> involvement and exchange of knowledge, interest, and inspiration, but I
>> don't see that the syntax discussions and decisions detached from the
>> actual development are facilitating this.
>
> Well, I am still not sure about the latter.

Within specific sub-areas like tablature support, this apparently works
better than when LilyPond as a whole is concerned.

"Let's write a subsystem/package for this" is just much more manageable
than "let's change LilyPond as a whole".

Obviously, we should strive to change LilyPond as a whole in order to
make

Re: [GLISS] - alternative viewpoint

2012-09-20 Thread Marc Hohl

Am 20.09.2012 11:56, schrieb David Kastrup:

David Kastrup  writes:


Within your own scores, be consistent in your choices.  How this
consistency looks, does not matter.  Within LilyPond, there is a large
consistency which elements are uppercase, and which lowercase.  The one
thing that actually gets annoying is CamelCase.  However, as a rule,
camelcase starts with lowercase letters.  With recent changes in the
lexer, it would be possible to replace the CamelCase words with dashed
words.  That would allow for things like

\slur-up \slur-down \voice-one \one-voice \voice-two and so on.  I am
personally not a big fan of CamelCase.  You would, of course, get the
same principal problem "I can't remember where and whether to put
dashes" when making use of that option.

Weeding out CamelCase would not, in itself, change the classes of things
that we use uppercase for, lowercase for, and dashes for (there would be
some overlap in classes since we _do_ have a few existing
words-with-dashes and \commands-with-dashes, but distinguishing those
classes is actually not important, unlike the pure lower/uppercase
distinction we actually use for Grob and Context names).

Just quoting this as yet another example where I offer some concrete
suggestions in a GLISS thread with nobody bothering to even reply.

It is not that I am not interested in this kind of
discussions/proposals, it is just that I have no problem
with camelCase/uppercase/lowercase stuff, so I don't need
a change here; on the other hand, if this would make it
easier for everyone, then I would not object to a
"lilypond is all lowercase" change.



I don't think that this characterization is doing justice to the
developers since it basically assumes that their main incentive is
making fun of users.

Part of the reason working on LilyPond is less rewarding than it could
be is this atmosphere of distrust, and the urge to rein in developers
who apparently have nothing better to do than damage LilyPond.

"distrust" is maybe too strong a word.  "non-involvement" may be closer
to the truth.  Regarding the GLISS discussions and proposals in that
context becoming official project policy, participation of programmers
is actively discouraged.  Goals are being set without bothering to look
at how the existing and developing code base and its underlying design
will support them.

I think that defining _goals_ can be done seriously only by
taking the underlying design, the developers etc. into account,
but _discussions_ should have any amount of freedom they
need.



[...]

"Stealthily" may seem like too strong a word, but quite a few of the
actual usability/language features are proposed and finally implemented
in the way we see in
http://code.google.com/p/lilypond/issues/detail?id=2717>.  There is
minimal feedback by few persons (this particular issue has already
gotten more feedback than usual in its first iterations and will
presumably pass into LilyPond silently once nobody can think of
something to particularly dislike).

You are right.

I can only speak for myself, but the main "problem" is that most
of the time I can spend for working on LilyPond is put into the
actual patches; the reviewing process is handled rather shabbily,
I confess.
I take a look at nearly *every* issue when I got an email notification,
but I often do not find the time to get deeper into the problem to
understand what the current proposal means or what the patch
to be review actually does. And just a quick "LGTM, but not tested"
doesn't help anybody.


If you take a look at our "Changes" file from 2.16 and take a look at
how many of those changes were the result from following through with
active and planned policy decisions rather than spontaneously done work,
it does not appear that our purported planning is connected much to what
actually gets done, and users could exercise more influence if they
actually commented on issues in the tracker accompanying actual work in
progress rather than participating in a hypothetical discussion detached
from the realities of both our code base and worker base.

One issue/review that recently profited a lot from interaction of
developers and users was
http://code.google.com/p/lilypond/issues/detail?id=2823> where
people cooperated in collecting and completing information, leading to a
much better informed approach to actual work.  If you take a look at
_who_ collected the various bits of information, however, you'll see the
usual suspects again: seasoned programmers, just that some of them acted
in the capacity of users in the context of this issue.

Do you propose that the user base should get more information
about development work?

When working on tablature features, I got an *overwhelming*
response of other users, a lot of "how about x/can you do y"
stuff which more often than not found its way into tablature.scm.

In other areas, the response was about nil.

So there is no common rule how to get people involved.



We definitely can make use of a _

Re: [GLISS] - alternative viewpoint

2012-09-20 Thread David Kastrup
David Kastrup  writes:

> Within your own scores, be consistent in your choices.  How this
> consistency looks, does not matter.  Within LilyPond, there is a large
> consistency which elements are uppercase, and which lowercase.  The one
> thing that actually gets annoying is CamelCase.  However, as a rule,
> camelcase starts with lowercase letters.  With recent changes in the
> lexer, it would be possible to replace the CamelCase words with dashed
> words.  That would allow for things like
>
> \slur-up \slur-down \voice-one \one-voice \voice-two and so on.  I am
> personally not a big fan of CamelCase.  You would, of course, get the
> same principal problem "I can't remember where and whether to put
> dashes" when making use of that option.
>
> Weeding out CamelCase would not, in itself, change the classes of things
> that we use uppercase for, lowercase for, and dashes for (there would be
> some overlap in classes since we _do_ have a few existing
> words-with-dashes and \commands-with-dashes, but distinguishing those
> classes is actually not important, unlike the pure lower/uppercase
> distinction we actually use for Grob and Context names).

Just quoting this as yet another example where I offer some concrete
suggestions in a GLISS thread with nobody bothering to even reply.

> I don't think that this characterization is doing justice to the
> developers since it basically assumes that their main incentive is
> making fun of users.
>
> Part of the reason working on LilyPond is less rewarding than it could
> be is this atmosphere of distrust, and the urge to rein in developers
> who apparently have nothing better to do than damage LilyPond.

"distrust" is maybe too strong a word.  "non-involvement" may be closer
to the truth.  Regarding the GLISS discussions and proposals in that
context becoming official project policy, participation of programmers
is actively discouraged.  Goals are being set without bothering to look
at how the existing and developing code base and its underlying design
will support them.  For me, one of the pillars of userfriendliness is
coherence of design.  When a user is able to predict how to do
something.  If programmers are not supposed to participate in the design
process, and non-programmers will not be participating in executing this
design, we get to the situation where those who have the means of
implementing a design will do this ad-hoc, stealthily, and without
communication or coordination.

"Stealthily" may seem like too strong a word, but quite a few of the
actual usability/language features are proposed and finally implemented
in the way we see in
http://code.google.com/p/lilypond/issues/detail?id=2717>.  There is
minimal feedback by few persons (this particular issue has already
gotten more feedback than usual in its first iterations and will
presumably pass into LilyPond silently once nobody can think of
something to particularly dislike).

If you take a look at our "Changes" file from 2.16 and take a look at
how many of those changes were the result from following through with
active and planned policy decisions rather than spontaneously done work,
it does not appear that our purported planning is connected much to what
actually gets done, and users could exercise more influence if they
actually commented on issues in the tracker accompanying actual work in
progress rather than participating in a hypothetical discussion detached
from the realities of both our code base and worker base.

One issue/review that recently profited a lot from interaction of
developers and users was
http://code.google.com/p/lilypond/issues/detail?id=2823> where
people cooperated in collecting and completing information, leading to a
much better informed approach to actual work.  If you take a look at
_who_ collected the various bits of information, however, you'll see the
usual suspects again: seasoned programmers, just that some of them acted
in the capacity of users in the context of this issue.

We definitely can make use of a _lot_ more of this kind of user
involvement and exchange of knowledge, interest, and inspiration, but I
don't see that the syntax discussions and decisions detached from the
actual development are facilitating this.

-- 
David Kastrup


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-18 Thread Jan Nieuwenhuizen
Janek Warchoł writes:

> The most efficient way of doing things doesn't have to be the one
> which makes people most happy/satisfied.

Free software is a labor of love.  People put their heart in it and
identify with [their work on] the project, which inevitably leads to
violent disagreements.

Key is remember that everyone shares a similar love for the project and
get into violent agreement.

Discussions are good.  When a discussion starts to include personal
attacks, it has already gone to far.  It is no longer a discussion,
it's a fight.

The first thing to do is to stop taking part -- to stop the flow of
emails.  The best thing to do next is to restore the personal connection
by voice chat.  And if there's no personal connection yet, try a video
chat or come to the next developers meeting.  If you haven't experienced
this already, you'll be amazed how meeting someone in person can
dissolve any willingness to fight.

Easiest is if the other guy does this, so try to be the other guy.

Jan

-- 
Jan Nieuwenhuizen  | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar®  http://AvatarAcademy.nl  

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-17 Thread Werner LEMBERG
>> ... but as David has correctly mentioned previously, it is not
>> fruitful to discuss something for a long time and make everyone
>> agree to it, just to find out later on that the idea can't be
>> implemented in the current framework.
> 
> I agree that doing so isn't fruitful.  However, it may be better to
> waste some time and be sure that something is a bad idea than not to
> discuss it at all and have bad feelings about it.

Of course.  However, we had some discussions, then David essentially
said `this won't work', and people were still discussing exactly the
same thing as if David hadn't said anything.

> The most efficient way of doing things doesn't have to be the one
> which makes people most happy/satisfied.

The most efficient way of doing things is to listen to others, not
ignoring the arguments.  Sometimes David's replies are lengthy and
hard to understand, but noone except you has explicitly said `I don't
understand'.  It's obviously much easier to skip such answers instead
of trying to grasp them.  I must confess that this sometimes happens
to me also.


Werner

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-17 Thread David Kastrup
Janek Warchoł  writes:

> On Sat, Sep 15, 2012 at 5:25 PM, Werner LEMBERG  wrote:
>>
>>> If there is widespread agreement that the idea is good, then at some
>>> point it could be implemented.
>>
>> ... but as David has correctly mentioned previously, it is not
>> fruitful to discuss something for a long time and make everyone agree
>> to it, just to find out later on that the idea can't be implemented in
>> the current framework.
>
> I agree that doing so isn't fruitful.  However, it may be better to
> waste some time and be sure that something is a bad idea than not to
> discuss it at all and have bad feelings about it.

Our track record for decreasing bad feelings through discussion
certainly offers a lot of room for improvement.

> The most efficient way of doing things doesn't have to be the one
> which makes people most happy/satisfied.

Ah, but this is a hobbyist project.  Its ultimate goal is to make more
people happy.

-- 
David Kastrup


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-17 Thread Janek Warchoł
On Sat, Sep 15, 2012 at 5:25 PM, Werner LEMBERG  wrote:
>
>> If there is widespread agreement that the idea is good, then at some
>> point it could be implemented.
>
> ... but as David has correctly mentioned previously, it is not
> fruitful to discuss something for a long time and make everyone agree
> to it, just to find out later on that the idea can't be implemented in
> the current framework.

I agree that doing so isn't fruitful.  However, it may be better to
waste some time and be sure that something is a bad idea than not to
discuss it at all and have bad feelings about it.

The most efficient way of doing things doesn't have to be the one
which makes people most happy/satisfied.

cheers,
Janek

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-17 Thread Janek Warchoł
James,

On Sat, Sep 15, 2012 at 3:45 PM, James  wrote:
>
>> Third, the numbers of short user-definable abbreviations gets halved.
>> Something like
>>
>>   F = \markup { "Horn in F" }
>>
>> would no longer be possible because \f is already in use.
>
> So what? You are a developer, fix that. I do want to not have to
> remember what case I am supposed to be using.

Now i feel offended, both as a user and a developer.
At first i was going to write a long reply to your email, but then i
thougt that it would only result in more misunderstandings.  Can we
chat, either using text or voice?  I'd really like to solve this
situation.

best,
Janek

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-17 Thread Francisco Vila
2012/9/17 David Kastrup :
> Francisco Vila  writes:
>
>> 2012/9/16 David Kastrup :
>>> This is the developer list, after all.
>>
>> Hey, I have the Dragon Book in my bedside table, I can give a language
>> to my daughter for her birthday, and still find some things difficult.
>
> Why am I the one figuring out then until which time I can swap out the
> lookahead token of an LALR(1) parser from under it without getting it
> into unrecoverable states?

No children, perhaps? The rainbow of specific circumpstances is endless.

> At any rate, this is the developer list.  Some things _are_ difficult
> but that does not means that one should be precluded from talking about
> them.  It's not like I try to be opaque or anything.

I fully agree, but a sound feedback, whatever our level is, is always good.

-- 
Francisco Vila. Badajoz (Spain)
www.paconet.org , www.csmbadajoz.com

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-17 Thread David Kastrup
Francisco Vila  writes:

> 2012/9/16 David Kastrup :
>> This is the developer list, after all.
>
> Hey, I have the Dragon Book in my bedside table, I can give a language
> to my daughter for her birthday, and still find some things difficult.

Why am I the one figuring out then until which time I can swap out the
lookahead token of an LALR(1) parser from under it without getting it
into unrecoverable states?

I'm an electrical engineer, not a computer scientist.

At any rate, this is the developer list.  Some things _are_ difficult
but that does not means that one should be precluded from talking about
them.  It's not like I try to be opaque or anything.

-- 
David Kastrup


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-16 Thread Francisco Vila
2012/9/16 David Kastrup :
> This is the developer list, after all.

Hey, I have the Dragon Book in my bedside table, I can give a language
to my daughter for her birthday, and still find some things difficult.

-- 
Francisco Vila. Badajoz (Spain)
www.paconet.org , www.csmbadajoz.com

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-16 Thread David Kastrup
Janek Warchoł  writes:

> Hi,
>
> On Sat, Sep 15, 2012 at 10:20 AM, David Kastrup  wrote:
>> Yup.  Here is my multi-stage plan for that:
>
> Great!  It's inspiring to see such a big plan :)
>
>> b) our C++ engravers announce to the type system (and via that, to the
>> documentation) which context properties they read, modify and write.
>> There is no reason that this does not also include the Grob descriptions
>> which are even now a special case of context property.
>
> I didn't understand this part well, but it guess it's not that
> important to have me understand it now (?).

Take a look in the internals manual.  It knows which engravers access
which context properties.  A Grob is actually just a (substructured)
context property, so it can be documented in the same manner.

> (i write this just to provide you with feedback on the difficulty of
> some of your emails)

This is the developer list, after all.

>> d) \override xxx is equivalent to \override Bottom.xxx, with Bottom
>> being a context without \defaultchild (to be recursively created from
>> the current context, if that is not a bottom context, by creating the
>> respective defaultchildren in sequence until hitting bottom).  If all
>> our engravers had correctly registered the context properties they read,
>> \override xxx could instead set the property in the context closest to
>> bottom that will actually _look_ at the changed property.
>
> So,
>   \override BarNumber #'font-size = 5
> would actually result in
>   \override Score.BarNumber #'font-size = 5
> ?

Yes, that's the idea.  As long as you have no engraver at Staff level
looking at the BarNumber properties.  Maybe it would be more robust to
explicitly declare the default context for writing each property.  After
all, that is a one-time job.

Or declare an engraver "canonical" for some properties, so that if
_that_ engraver is moved, the default context moves along.  At the
current point of time, an engraver declares which properties it
reads/modifies/writes (why do we need all three?), and we might let it
declare which it "owns" with respect to the default context.

> Wonderful!

>> Of course, this is not without drawback either: if there are multiple
>> engravers looking at that property at multiple levels and you are
>> interested in overriding the behavior of the engraver in an outer
>> level, the unspecific override will be done in the inner level and
>> again not have an apparent effect.
>
> I think i won't understand this w/o an example.

Write an engraver at Staff level which looks at currentBarNumber, and
\override currentBarNumber will just work at Staff level instead of
Score level.

>> #'4 and #4 and 4 should be quite equivalent in most cases...
>
> You mean that they are quite equivalent now or that we want them to be
> equivalent in the future?

Where function arguments are concerned, they are equivalent.  Not
everything is a function argument, and #4 or #'4 cannot be used as a
duration.

> Anyway, being equivalent in most cases is, in my opinion, only
> marginally helpful: exceptions to the "most cases" introduce
> confusion.  If we want to simplify things, we need equivalence in all
> cases.

4 has several different meanings, #4 is a number.  I don't think I want
#4 . to be a valid duration.

>> One might argue that users who are able to write to a mailing list
>> after looking for it in the manual make up for less than 1% of our
>> targeted demographic group, users who come to LilyPond not primarily
>> since they enjoy being in total control over the data structures
>> their typesetting program uses.
>>
>> And particularly for those it makes a big selling point if naive
>> expectations disregarding the technical necessities and
>> implementation constraints happen to hit the mark semi-regularly.  Of
>> course, we can't make that 100%, but 80% is a lot more encouraging
>> than 2%.  If you get everything wrong at first try, that's a big
>> turnoff.  Even if some smart helpful guy explains to you why
>> everything is wrong.
>
> If i understand correctly, you mean that we don't have many emails
> from people being confused by pre/postfix issues because these people
> never make it to the mailing list (i.e. they are too discouraged by
> their first Lily try that they quit immediately)?  I think you're
> right.  *We* may never notice that some change simplified things
> (because we're already used to Lily), but newcomers will.

I think that if your first five attempts to do something on your own all
end catastrophically, you'll just quit again.

>> There are several lashback issues connected with convenience wrappers,
>> and they focus around the question:
>>
>> To what degree does a convenience wrapper become part of LilyPond's
>> language?
>
> Good question.  I think this is what Graham had in mind when he wrote
> about "ly vs. ly++".
>
>> There are several questions following from that starting point.
>>
>> a) reflection.  Should \displayLilyMusic recognize ex

Re: [GLISS] - alternative viewpoint

2012-09-16 Thread David Kastrup
Janek Warchoł  writes:

> On Sat, Sep 15, 2012 at 11:35 AM, David Kastrup  wrote:
>>
>> You mean, currently we basically see the default error message from the
>> parser generator.  Improving this involves basically accepting errors in
>> input and acting on them by putting out hand-tailored messages.
>>
>> Currently, the parser is still undergoing significant restructuring work
>> in major areas and mechanisms.  That work entails a lot of time spent on
>> ironing out parser conflicts where some input would correspond to
>> multiple and diverging interpretations according to the current syntax.
>> It is significant work ironing out those conflicts.  Adding additional
>> rules for erroneous input means more potential for conflict, so it would
>> make the ongoing work even harder.  I am working towards recognizing
>> elements of the syntax in isolation, and then pasting them together.
>> The "pasting together" is then done outside of the immediate control of
>> the parser and can trigger independent error messages based on the
>> assumption that at least the elements used for combining were, by
>> themselves, recognized correctly.  Those error messages can be more
>> specific and helpful than the boilerplate parse errors from the parser
>> generator.
>
> Hmm, this sounds complicated.  Do you mean that implementing more
> informative ("custom") error messages with current parser will wreak
> havoc, but if we simplify the parser first, it would be possible to do
> this in a sane way?

No.  I don't mean "wreak havoc" but rather "will be in the way while I
am still reworking the parser internals".  It's like putting up tapestry
and setting up furniture before doing the plumbing.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-16 Thread Janek Warchoł
On Sat, Sep 15, 2012 at 11:35 AM, David Kastrup  wrote:
>
> You mean, currently we basically see the default error message from the
> parser generator.  Improving this involves basically accepting errors in
> input and acting on them by putting out hand-tailored messages.
>
> Currently, the parser is still undergoing significant restructuring work
> in major areas and mechanisms.  That work entails a lot of time spent on
> ironing out parser conflicts where some input would correspond to
> multiple and diverging interpretations according to the current syntax.
> It is significant work ironing out those conflicts.  Adding additional
> rules for erroneous input means more potential for conflict, so it would
> make the ongoing work even harder.  I am working towards recognizing
> elements of the syntax in isolation, and then pasting them together.
> The "pasting together" is then done outside of the immediate control of
> the parser and can trigger independent error messages based on the
> assumption that at least the elements used for combining were, by
> themselves, recognized correctly.  Those error messages can be more
> specific and helpful than the boilerplate parse errors from the parser
> generator.

Hmm, this sounds complicated.  Do you mean that implementing more
informative ("custom") error messages with current parser will wreak
havoc, but if we simplify the parser first, it would be possible to do
this in a sane way?


On Sat, Sep 15, 2012 at 11:53 AM, Phil Holmes  wrote:
> - Original Message - From: "David Kastrup" 
>> You need to elaborate.  It is not clear what you mean with that, and
>> what kind of remedy you envision.
>
> \new Staff works.  \New staff doesn't.  There's no reason for that - we
> don't have two separate \new \New commands that do different things, nor two
> contexts Staff and staff that are different.  Worse is that \slurUp works
> but only with that precise casing.  TBH this specific one doesn't cause me
> worry, since I remember it, but there are much more arcane casings that I
> have to refer to the manual to find - so I can remember the command, but not
> the casing!

I think we should make the casing/naming uniform across all names, for example:
\New Staff
\SlurUp
LyricExtenderEngraver
SomePropertyName

> From a user perspective, it would be much simpler if everything
> they write was ToLower()-ed before further processing.

This sounds interesting to me, but David signalled an important
problem - distinguising notenames (which are always lower case) from
grob names ant other things.
Another solution would be to have Frescobaldi auto-correct the casing.

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-16 Thread Janek Warchoł
Hi,

On Sat, Sep 15, 2012 at 10:20 AM, David Kastrup  wrote:
> Yup.  Here is my multi-stage plan for that:

Great!  It's inspiring to see such a big plan :)

> b) our C++ engravers announce to the type system (and via that, to the
> documentation) which context properties they read, modify and write.
> There is no reason that this does not also include the Grob descriptions
> which are even now a special case of context property.

I didn't understand this part well, but it guess it's not that
important to have me understand it now (?).
(i write this just to provide you with feedback on the difficulty of
some of your emails)

> d) \override xxx is equivalent to \override Bottom.xxx, with Bottom
> being a context without \defaultchild (to be recursively created from
> the current context, if that is not a bottom context, by creating the
> respective defaultchildren in sequence until hitting bottom).  If all
> our engravers had correctly registered the context properties they read,
> \override xxx could instead set the property in the context closest to
> bottom that will actually _look_ at the changed property.

So,
  \override BarNumber #'font-size = 5
would actually result in
  \override Score.BarNumber #'font-size = 5
?
Wonderful!

> Of course, this is not without drawback either: if there are multiple
> engravers looking at that property at multiple levels and you are
> interested in overriding the behavior of the engraver in an outer level,
> the unspecific override will be done in the inner level and again not
> have an apparent effect.

I think i won't understand this w/o an example.

> #'4 and #4 and 4 should be quite equivalent in most cases...

You mean that they are quite equivalent now or that we want them to be
equivalent in the future?

Anyway, being equivalent in most cases is, in my opinion, only
marginally helpful: exceptions to the "most cases" introduce
confusion.  If we want to simplify things, we need equivalence in all
cases.

> One might argue that users who are able to write to a mailing list after
> looking for it in the manual make up for less than 1% of our targeted
> demographic group, users who come to LilyPond not primarily since they
> enjoy being in total control over the data structures their typesetting
> program uses.
>
> And particularly for those it makes a big selling point if naive
> expectations disregarding the technical necessities and implementation
> constraints happen to hit the mark semi-regularly.  Of course, we can't
> make that 100%, but 80% is a lot more encouraging than 2%.  If you get
> everything wrong at first try, that's a big turnoff.  Even if some smart
> helpful guy explains to you why everything is wrong.

If i understand correctly, you mean that we don't have many emails
from people being confused by pre/postfix issues because these people
never make it to the mailing list (i.e. they are too discouraged by
their first Lily try that they quit immediately)?  I think you're
right.  *We* may never notice that some change simplified things
(because we're already used to Lily), but newcomers will.

> There are several lashback issues connected with convenience wrappers,
> and they focus around the question:
>
> To what degree does a convenience wrapper become part of LilyPond's
> language?

Good question.  I think this is what Graham had in mind when he wrote
about "ly vs. ly++".

> There are several questions following from that starting point.
>
> a) reflection.  Should \displayLilyMusic recognize expressions that
> can be produced by a wrapper and output them?  If we answer "yes" to
> that question, it would make sense to provide some infrastructure
> for specifying appropriate reverse engineering rules to LilyPond in
> a manner that is not significantly more complex to specify than the
> wrapper itself.

I don't understand what you mean here.

> b) When and how are third-party tools supposed to learn about such
> wrappers when they are supposed to be part of LilyPond?

ditto.

> c) MusicXML?

ditto.

>> And providing error messages when an override has no effect because it
>> was at the voice context and should have been at staff?
>
> See above.  If the system knows what needs to be done, there is little
> point in warning rather than doing it.  Of course, if "Voice" has been
> explicitly specified rather than via the implicit "Bottom.", using the
> same mechanisms and internally available information for producing a
> warning seems reasonable.  Basically I prefer the behaviors:
>
> a) implicit default choice is non-working -> make the right choice instead
> b) explicit choice is non-working -> obey but warn

+1!

> Now one might argue that this currently is rather a discussion on
> meta-bikeshedding, namely getting something right that will serve as a
> template for future bikeshedding, but it is quite clear that with
> convenience wrappers, everybody actually _can_ contribute his opinion
> without requirin

Re: [GLISS] - alternative viewpoint

2012-09-16 Thread Janek Warchoł
On Fri, Sep 14, 2012 at 6:56 PM, Phil Holmes  wrote:
> What does get me more concerned is how hard it is to find some of the
> correct ways of tweaking output.  Using voice.SomeValue (or is it
> Voice.someValue) when it should be staff.Somevalue (or was it
> Staff.someValue) frequently results in no change to the output.  And is it
> \override or \set?  And \revert or \override back to something else.  And
> finding what comes after the \override staff.Something - is it ##f. or #'4
> or 4 or { 4} or what?

I agree, this is a problem.

> I personally think that providing more of these simple syntax features would
> make it much easier for the average user

+1

On Fri, Sep 14, 2012 at 7:10 PM, m...@mikesolomon.org
 wrote:
> consider doing Z" or even a "?" token one can put before or after an object 
> to have help messages
> printed to the logfile as well as detailed information about the command in 
> question and what it applies to.

interesting idea.

Janek

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread David Kastrup
David Kastrup  writes:

> There are also override collections like \voiceOne, and not all
> overrides might apply in every context they are used in: in that case we
> don't want a warning.  So it is not an issue quite as simple as it may
> seem at first, but it is definitely on my agenda when I rework the
> property system.
>
> Which does not mean that people are free to beat me to it within the
> current system.

Got my nots all knotted.  "Which does not mean that people would not be
free to beat me to it within the current system."

-- 
David Kastrup


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread David Kastrup
Keith OHara  writes:

> David Kastrup  gnu.org> writes:

>>  d) \override xxx is equivalent to \override Bottom.xxx, with Bottom
>> being a context without \defaultchild (to be recursively created from
>> the current context, if that is not a bottom context, by creating the
>> respective defaultchildren in sequence until hitting bottom).

For clarity: the above describes the _current_ situation.

>> If all our engravers had correctly registered the context properties
>> they read, \override xxx could instead set the property in the
>> context closest to bottom that will actually _look_ at the changed
>> property.
>  
> These two steps alone will drastically increase usability and the user-base.
>
>> Of course, this is not without drawback either: if there are multiple
>> engravers looking at that property at multiple levels 
>
> This 'drawback' is still an improvement relative to the current situation.
>  \once\override TimeSignature #'stencil = ##f
> If the override has effect only for one staff when we wanted it to affect
> a StaffGroup, it is easier to discover the solution than currently, where
> the override is ignored entirely.

I was more thinking of the situation where multiple _unrelated_
engravers look at the same property for different reasons.  In that case
you likely need to set the property at the outermost level where
somebody is listening.  In contrast, when there are multiple related or
identical engravers listening, the _innermost_ level is quite
appropriate since it is _desired_ that the outer engravers of the same
kind don't get the same information.

There are also override collections like \voiceOne, and not all
overrides might apply in every context they are used in: in that case we
don't want a warning.  So it is not an issue quite as simple as it may
seem at first, but it is definitely on my agenda when I rework the
property system.

Which does not mean that people are free to beat me to it within the
current system.

-- 
David Kastrup


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread Keith OHara
David Kastrup  gnu.org> writes:

> "Phil Holmes"  philholmes.net> writes:
> 
> > What does get me more concerned is how hard
> > it is to find some of the correct ways of tweaking output.  Using
> > voice.SomeValue (or is it Voice.someValue) when it should be
> > staff.Somevalue (or was it Staff.someValue) frequently results in no
> > change to the output.
> 

As they say, "Me too."  This is the reason I gave up on LilyPond, several
times now.

> Yup.  Here is my multi-stage plan for that:

>  b) our C++ engravers announce to the type system (and via that, to the
> documentation) which context properties they read, modify and write.
> There is no reason that this does not also include the Grob descriptions
> which are even now a special case of context property.

>  d) \override xxx is equivalent to \override Bottom.xxx, with Bottom
> being a context without \defaultchild (to be recursively created from
> the current context, if that is not a bottom context, by creating the
> respective defaultchildren in sequence until hitting bottom).  If all
> our engravers had correctly registered the context properties they read,
> \override xxx could instead set the property in the context closest to
> bottom that will actually _look_ at the changed property.
 
These two steps alone will drastically increase usability and the user-base.

> Of course, this is not without drawback either: if there are multiple
> engravers looking at that property at multiple levels 

This 'drawback' is still an improvement relative to the current situation.
 \once\override TimeSignature #'stencil = ##f
If the override has effect only for one staff when we wanted it to affect
a StaffGroup, it is easier to discover the solution than currently, where
the override is ignored entirely.


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: allowing \f and \F (was: [GLISS] - alternative viewpoint)

2012-09-15 Thread Keith OHara
Graham Percival  percival-music.ca> writes:

> On Sat, Sep 15, 2012 at 07:56:52PM +0200, Werner LEMBERG wrote:
> > 
> > > Distinguishing \f and \F while ignoring case is going to be a rather
> > > difficult operation.  
> 
> I agree that distinguishing \f and \F is difficult.  However, if
> the programmers-as-developers were willing to discuss ideas and
> look for solutions, there are other options.  What is the
> fundamental desire here, and is there any way of accomplishing
> this?

I did not hear any serious desire to allow both \f and \F as distinct.
We have them as distinct identifiers now, of course, but do not like it
when different functions differ only by case.

To the contrary, the request was to accept (and complain) if we mistype
 \SlurDown

The complete request might be,
 If the users types an identifier that is not defined, request that LilyPond
attempt to find the lower-cased (C-locale) identifier among the lower-cased
versions of defined identifiers (picking the first found in case of duplicates)
and warn of the substitution "Don't know \SlurDown assuming you mean \slurDown"

In the troublesome case, when both \f and \F are defined, LilyPond would have
to count on the user to type the correct case, but we would separately try
to avoid depending on such distinctions



___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


allowing \f and \F (was: [GLISS] - alternative viewpoint)

2012-09-15 Thread Graham Percival
On Sat, Sep 15, 2012 at 07:56:52PM +0200, Werner LEMBERG wrote:
> 
> > Distinguishing \f and \F while ignoring case is going to be a rather
> > difficult operation.  While I generally try to accommodate a lot of
> > "make that work" requests, there are limits to what one can achieve
> > when fighting not just the current code base, but rather plain
> > logic.
> 
> :-)

I agree that distinguishing \f and \F is difficult.  However, if
the programmers-as-developers were willing to discuss ideas and
look for solutions, there are other options.  What is the
fundamental desire here, and is there any way of accomplishing
this?

For example, what about my hated idea of splitting namespaces of
music fuctions and identifiers?  I'm not fond of perl, but
something like this is unambiguous:

  $F = \markup { "Horn in F" }
  {
c$F
  }

We could even retain the current method of creating identifiers;
this doesn't need to break existing scores.  The remaining
question is whether to make $names case-sensitive or not -- or,
for that matter, whether to allow only ascii characters in $names
or whether to allow any utf-8 character.  Maybe non-native English
speakers would appreciate being able to name their music in their
native language.


I will undoubtedly now be subjected to a steam of abuse from
programmers about problems that I did not think of in the past 3
minutes.  As a pre-emptive attempt to mitigate that abuse, I will
state THAT I DO NOT EXPECT, NOR EVEN DESIRE, DAVID TO IMPLEMENT
THIS.  THIS IS AN IDEA, NOT A COMMAND FROM THE UBER-BOSS.

- Graham

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread Werner LEMBERG

> Distinguishing \f and \F while ignoring case is going to be a rather
> difficult operation.  While I generally try to accommodate a lot of
> "make that work" requests, there are limits to what one can achieve
> when fighting not just the current code base, but rather plain
> logic.

:-)


Werner

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread David Kastrup
Werner LEMBERG  writes:

>> What we're discussing is ideas.  No-one has to implement ideas.
>
> Well...
>
>> If there is widespread agreement that the idea is good, then at some
>> point it could be implemented.
>
> ... but as David has correctly mentioned previously, it is not
> fruitful to discuss something for a long time and make everyone agree
> to it, just to find out later on that the idea can't be implemented in
> the current framework.

"Case insensitity" is something that comes up a lot in computing, like
with file systems.  The general trend is that more and more systems that
have started out case insensitive are moving to case sensitivity since
the problems caused by inconsistent usage can't be all salvaged
automatically.  Most programmers with significant exposure to making
case insensitivity work develop a deep dislike against the barrage of
recurring problems.

So before choosing case insensitivity as a solution to some problem, it
might make sense to revisit the problem and see whether, for example,
killing CamelCaps and/or other naming choices and/or replacing them by
different schemes will not make the problem less relevant as it now
appears to users.

> It's a matter of fact that we are bound to what we have.  Everything
> else would be a complete redesign of LilyPond, which is certainly a
> noble goal but far, far away.  I don't think this is the intention of
> GLISS.

Guile itself would not mind case-insensitivity much, but our existing
code base would.  Not on a technical level, but with regard to the
current naming choices and possible conflicts.

>> We could certainly use it as a way to direct development - "hey,
>> David, when you're working on the parser, could you also work towards
>> making it case insensitive?".

Reserved words are lowercase anyway.  For the rest, try

(read-enable 'case-insensitive)

at the top of scm/lily.scm.

Good luck.  I really have no idea how far this will get you.  But I
don't want this in LilyPond myself: as I said, allowing inconsistent
entry does not buy you anything but sloppiness and surprises.

> The case sensitivity is special since it doesn't need syntactical
> changes.  However, other issues we've discussed recently are very
> difficult to implement for reasons that most of us don't understand.

Well, some of the things that _are_ implemented are very difficult to
implement as well (I am working on dialing back the complexity, too).
But if things create _conceptual_ complexity rather than implementation
complexity (due to parser limitations), I like them even less.

-- 
David Kastrup


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread David Kastrup
James  writes:

> Hello,
>
> On 15 September 2012 13:55, Werner LEMBERG  wrote:
>>
 I'm strictly against case-insensivity.
>>>
>>> And I and others are for it.  Could you state your reasoning,
>>> please?  I've already stated mine.
>>
>> First, it is confusing.  Virtually all programming languages of today
>> (and lilypond's input code resembles that) are case-sensitive.
>
> So what? I am not a programmer. I am a user.

Within your own scores, be consistent in your choices.  How this
consistency looks, does not matter.  Within LilyPond, there is a large
consistency which elements are uppercase, and which lowercase.  The one
thing that actually gets annoying is CamelCase.  However, as a rule,
camelcase starts with lowercase letters.  With recent changes in the
lexer, it would be possible to replace the CamelCase words with dashed
words.  That would allow for things like

\slur-up \slur-down \voice-one \one-voice \voice-two and so on.  I am
personally not a big fan of CamelCase.  You would, of course, get the
same principal problem "I can't remember where and whether to put
dashes" when making use of that option.

Weeding out CamelCase would not, in itself, change the classes of things
that we use uppercase for, lowercase for, and dashes for (there would be
some overlap in classes since we _do_ have a few existing
words-with-dashes and \commands-with-dashes, but distinguishing those
classes is actually not important, unlike the pure lower/uppercase
distinction we actually use for Grob and Context names).

>> Second, as David has already mentioned, the conversion to either
>> lowercase or uppercase is locale dependent.
>
> User's don't care, I don't care. I want to not have to remember
> whether it is \Mycommand, \myCommand or  \MyCommand or \mycommand or
> \MYCOMMAND - make them all work or make one of them work.

Uh, one of them _will_ work.

>> Third, the numbers of short user-definable abbreviations gets halved.
>> Something like
>>
>>   F = \markup { "Horn in F" }
>>
>> would no longer be possible because \f is already in use.
>
> So what? You are a developer, fix that. I do want to not have to
> remember what case I am supposed to be using.

Distinguishing \f and \F while ignoring case is going to be a rather
difficult operation.  While I generally try to accommodate a lot of
"make that work" requests, there are limits to what one can achieve when
fighting not just the current code base, but rather plain logic.

> Phil (user) says why something pretty basic is flawed, David
> (developer) jumps in with a valid technically accurate, but frankly
> meaningless description to a user (can we do it or not?), next we'll
> have a 'developer-not-user' pitch in with an opinion on changing
> containers and contexts and properties and other things
> 'users-don't-care-about' and then David (developer) will reply with
> another technically accurate answer, probably with some 'arcane' (to a
> user-not-developer) reasoning, the rest of the developer-not-users all
> chime in, and the original 'problem' is forgotten as they all digress
> their way down some chain of gobbledygook that most of those who
> started to follow end up glazing over and realising that this is now
> beyond them as the conversation ends with words like 'lexer' and
> 'parser' and 'post-fix', and wonder if their contribution has actually
> been listened to. We wait a few more emails, cannot see if our
> suggestion is even being thought about or has it been forgotten - user
> leaves conversation wondering why he/she bothered.

I don't think that this characterization is doing justice to the
developers since it basically assumes that their main incentive is
making fun of users.

Part of the reason working on LilyPond is less rewarding than it could
be is this atmosphere of distrust, and the urge to rein in developers
who apparently have nothing better to do than damage LilyPond.

If you take a look at the "Changes" section for LilyPond 2.16, you will
find a large number of entries in the syntax department that make things
more straightforward, more consistent, more powerful, and easier to
understand.  I have been working to that end, and rather hard.

If you take a look at the feedback I received, there are a lot of users
who express their belief and trust that I am on the right track by
providing me with the financial means to continue, and that frankly
means a lot to me beyond allowing me to eat.

If you take a look at the feedback from the developers and the developer
list, you'll see that 95% of all code reviews remain without comment,
and there is basically no interest at all, either for helping with the
results, or for putting them to actual use.

Now if there is a single person working on a large and important
project, and making remarkable progress, wouldn't the normal question be
"how can we give him constructive feedback with regard to work he has
already done or is planning to do"?

But that is not what happens.  Instead the focus is on i

Re: [GLISS] - alternative viewpoint

2012-09-15 Thread David Kastrup
Werner LEMBERG  writes:

>> Currently, the parser is still undergoing significant restructuring
>> work in major areas and mechanisms.  That work entails a lot of time
>> spent on ironing out parser conflicts where some input would
>> correspond to multiple and diverging interpretations according to
>> the current syntax.  It is significant work ironing out those
>> conflicts.  Adding additional rules for erroneous input means more
>> potential for conflict, so it would make the ongoing work even
>> harder.
>
> I suggest that the possibility of improved error messages should be
> taken into account while doing design decisions.

Well, the "accumulate expressions that make sense on their own" approach
means that the accumulation can provide useful error messages.  It
basically leads to an "accept and complain" approach in the parser
regarding the actual syntax ("accept" does not mean that anything useful
is or can be done, just that the parser does not get lost altogether).

The disadvantage is that the syntax description of LilyPond (in the
appendices of the notational manual) becomes less and less useful for
figuring out what a syntactically correct LilyPond program is supposed
to look like.

At the moment, not many "design decisions" actually are happening in
parser work: most of the work focuses on creating a more coherent and
logical framework able to reflect the existing design while being better
extensible and manageable.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread Werner LEMBERG

> What we're discussing is ideas.  No-one has to implement ideas.

Well...

> If there is widespread agreement that the idea is good, then at some
> point it could be implemented.

... but as David has correctly mentioned previously, it is not
fruitful to discuss something for a long time and make everyone agree
to it, just to find out later on that the idea can't be implemented in
the current framework.

It's a matter of fact that we are bound to what we have.  Everything
else would be a complete redesign of LilyPond, which is certainly a
noble goal but far, far away.  I don't think this is the intention of
GLISS.

> We could certainly use it as a way to direct development - "hey,
> David, when you're working on the parser, could you also work
> towards making it case insensitive?".

The case sensitivity is special since it doesn't need syntactical
changes.  However, other issues we've discussed recently are very
difficult to implement for reasons that most of us don't understand.
Admittedly, David tends to answer everything far too detailed (and he
probably he reads the e-mails too carefully)...

BTW, a survey of the most wanted changes to LilyPond would be a good
idea.  Maybe someone can set up such a poll, similar to the git
survey, on survs.com or a similar site.


Werner

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread Werner LEMBERG

>> Fourth, Scheme is not case-insensitive.
> 
> That's not traditional.

Ah, interesting.  I wasn't aware of that.  Thanks for the correction.


Werner

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread David Kastrup
Werner LEMBERG  writes:

>>> I'm strictly against case-insensivity.
>> 
>> And I and others are for it.  Could you state your reasoning,
>> please?  I've already stated mine.
>
> First, it is confusing.  Virtually all programming languages of today
> (and lilypond's input code resembles that) are case-sensitive.
>
> Second, as David has already mentioned, the conversion to either
> lowercase or uppercase is locale dependent.
>
> Third, the numbers of short user-definable abbreviations gets halved.
> Something like
>
>   F = \markup { "Horn in F" }
>
> would no longer be possible because \f is already in use.
>
> Fourth, Scheme is not case-insensitive.

That's not traditional.  However, the current R6RS syntax states

   Case is significant except in representations of booleans, number
objects, and in hexadecimal numbers specifying Unicode scalar values.
For example, `#x1A' and `#X1a' are equivalent.  The identifier `Foo'
is, however, distinct from the identifier `FOO'.

Guile has

6.17.1.4 Case Sensitivity
.

Scheme as defined in R5RS is not case sensitive when reading symbols.
Guile, on the contrary is case sensitive by default, so the identifiers

 guile-whuzzy
 Guile-Whuzzy

   are the same in R5RS Scheme, but are different in Guile.

   It is possible to turn off case sensitivity in Guile by setting the
reader option `case-insensitive'.  For more information on reader
options, *Note Scheme Read::.

 (read-enable 'case-insensitive)

   Note that this is seldom a problem, because Scheme programmers tend
not to use uppercase letters in their identifiers anyway.

in its documentation, so the previous Scheme default has been different.

> Should everything starting with `#' be case-sensitive then?  Otherwise
> we couldn't fully access our own extension language.

I doubt Guile makes use of different case versions in the predefined
stuff.

But LilyPond does.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread Phil Holmes
- Original Message - 
From: "Werner LEMBERG" 

To: 
Cc: 
Sent: Saturday, September 15, 2012 3:24 PM
Subject: Re: [GLISS] - alternative viewpoint


Mhmm.  May I recommend a sheet of paper and a pencil instead,
then? :-)


Perhaps you'd prefer to recommend Sibelius, which has no such 
difficulties...



> Users are ready to accept change, it seems that many developers are
> not or are too blinkered or half-empty to even want to understand
> why something is discussed, instead its taken as a personal affront
> to them or their code.



The very problem is that some must implement these changes.  As David
has said, this is far from trivial.


No.  Absolutely not.  What we're discussing is ideas.  No-one has to 
implement ideas.  If there is widespread agreement that the idea is good, 
then at some point it could be implemented.  We could certainly use it as a 
way to direct development - "hey, David, when you're working on the parser, 
could you also work towards making it case insensitive?".  But if we are 
abused for making suggestions that would make life easier for users, as 
opposed to developers, then we should agree to stop discussion and drop 
GLISS.


--
Phil Holmes 



___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread Werner LEMBERG

 I'm strictly against case-insensivity.
>>
>> First, it is confusing.  Virtually all programming languages of today
>> (and lilypond's input code resembles that) are case-sensitive.
>
> So what? I am not a programmer. I am a user.

Urgh.  This is a real knock-out argument for everything.  Even TeX,
which has been written more than 30 years ago, and which is used by
millions of non-programmers, is case-sensitive.

>> Second, as David has already mentioned, the conversion to either
>> lowercase or uppercase is locale dependent.
>
> User's don't care, I don't care. I want to not have to remember
> whether it is \Mycommand, \myCommand or \MyCommand or \mycommand or
> \MYCOMMAND - make them all work or make one of them work.

Then use a front-end which corrects you!  I can easily imagine that
you get command completion with the TAB key, or a scroll-down list of
command names for die-hard mouse users.

I don't see any reason to cripple lilypond itself, given that a layer
on top of it can hide such really `nasty' details like uppercase and
lowercase.

>> Third, the numbers of short user-definable abbreviations gets
>> halved.
>
> So what? You are a developer, fix that. I do want to not have to
> remember what case I am supposed to be using.

Again, use a frontend which manages that for you, for example, by
disallowing you to enter macro names which contain uppercase letters.

>> Fourth, Scheme is not case-insensitive.  [...]
>
> So what?
>
> I am not typing Scheme I am typing \mycommand. What is Scheme
> anyway?  Where do I find that in the Learning manual?
>
> I came to use lilypond to write music scores not to learn or care
> about programming.

Mhmm.  May I recommend a sheet of paper and a pencil instead,
then? :-)

>> There is actually a reason for that.  Staff, as a context name, is
>> a container for properties, and things like Slur, as a property
>> name, are also principally containers for properties.
>
> [user-not-developer]; huh?

Since you say `huh', you are obviously on the wrong mailing list :-)

> Users are ready to accept change, it seems that many developers are
> not or are too blinkered or half-empty to even want to understand
> why something is discussed, instead its taken as a personal affront
> to them or their code.

The very problem is that some must implement these changes.  As David
has said, this is far from trivial.


Werner

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread James
Hello,

On 15 September 2012 13:55, Werner LEMBERG  wrote:
>
>>> I'm strictly against case-insensivity.
>>
>> And I and others are for it.  Could you state your reasoning,
>> please?  I've already stated mine.
>
> First, it is confusing.  Virtually all programming languages of today
> (and lilypond's input code resembles that) are case-sensitive.

So what? I am not a programmer. I am a user.

>
> Second, as David has already mentioned, the conversion to either
> lowercase or uppercase is locale dependent.

User's don't care, I don't care. I want to not have to remember
whether it is \Mycommand, \myCommand or  \MyCommand or \mycommand or
\MYCOMMAND - make them all work or make one of them work.

>
> Third, the numbers of short user-definable abbreviations gets halved.
> Something like
>
>   F = \markup { "Horn in F" }
>
> would no longer be possible because \f is already in use.

So what? You are a developer, fix that. I do want to not have to
remember what case I am supposed to be using.

>
> Fourth, Scheme is not case-insensitive.  Should everything starting
> with `#' be case-sensitive then?  Otherwise we couldn't fully access
> our own extension language.

So what?

I am not typing Scheme I am typing \mycommand. What is Scheme anyway?
Where do I find that in the Learning manual?

I came to use lilypond to write music scores not to learn or care
about programming.

Also:

On 15 September 2012 11:19, David Kastrup  wrote:
> "Phil Holmes"  writes:
>
>> ----- Original Message -
>> From: "David Kastrup" 
>> To: 
>> Sent: Saturday, September 15, 2012 9:20 AM
>> Subject: Re: [GLISS] - alternative viewpoint
>>
>>
>>> "Phil Holmes"  writes:
>>>
>>>> And getting rid of case-sensitivity in a lot of this?
>>>

>>
>>
>> \new Staff works.  \New staff doesn't.  There's no reason for that -

[user-not-developer]; That's right!

>
> There is actually a reason for that.  Staff, as a context name, is a
> container for properties, and things like Slur, as a property name, are
> also principally containers for properties.

[user-not-developer]; huh?

[James] And there is the problem in a nutshell - not that that is
David's fault, but this is getting Kafka-esque (or Beckett depending
on your 'Absurdist' of choice).

Phil (user) says why something pretty basic is flawed, David
(developer) jumps in with a valid technically accurate, but frankly
meaningless description to a user (can we do it or not?), next we'll
have a 'developer-not-user' pitch in with an opinion on changing
containers and contexts and properties and other things
'users-don't-care-about' and then David (developer) will reply with
another technically accurate answer, probably with some 'arcane' (to a
user-not-developer) reasoning, the rest of the developer-not-users all
chime in, and the original 'problem' is forgotten as they all digress
their way down some chain of gobbledygook that most of those who
started to follow end up glazing over and realising that this is now
beyond them as the conversation ends with words like 'lexer' and
'parser' and 'post-fix', and wonder if their contribution has actually
been listened to. We wait a few more emails, cannot see if our
suggestion is even being thought about or has it been forgotten - user
leaves conversation wondering why he/she bothered.

I've refrained from really joining in with this whole debate because
of the way the discussions _always_ get twisted and turned about to
what can seem to a user-not-developer  a conversation that's seemingly
an I-know-more-than-you or
I-can-think-of-really-special-cases-better-than-the-next-person,
instead of actually wondering why the original suggestion was made in
the first place by the 'rest of us'.

Like Phil has said, he doesn't care whether a command is \foobar and
gets changed to \barfoo. Users are quite resilient they shrug and go
on about their lives as long as it is documented and they have some
way of getting their old scores to work with the new version of
whatever is decided - THAT is probably more important to users than
much else. Those that say 'but what about my custom function in my
scores will no longer work' - well that is acceptable to a user, it's
called a 'hack' in my world, that is why the LSR is not documentation.
Those are hacks. Clever hacks, but hacks nonetheless and they have no
business of holding back development (syntactical or otherwise), I've
had to put up with nonsensical commands, why can't developers change
their ways too?

David made a good explanation about 1% of users on the list vs the
rest w

Re: [GLISS] - alternative viewpoint

2012-09-15 Thread Werner LEMBERG

> Currently, the parser is still undergoing significant restructuring
> work in major areas and mechanisms.  That work entails a lot of time
> spent on ironing out parser conflicts where some input would
> correspond to multiple and diverging interpretations according to
> the current syntax.  It is significant work ironing out those
> conflicts.  Adding additional rules for erroneous input means more
> potential for conflict, so it would make the ongoing work even
> harder.

I suggest that the possibility of improved error messages should be
taken into account while doing design decisions.

> So I would first like to get to a state where I consider the
> parser/syntax to be mostly "in harmony" with its design before
> adding user-helpful error rules that make further work harder.

OK.


Werner

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread Werner LEMBERG

>> I'm strictly against case-insensivity.
> 
> And I and others are for it.  Could you state your reasoning,
> please?  I've already stated mine.

First, it is confusing.  Virtually all programming languages of today
(and lilypond's input code resembles that) are case-sensitive.

Second, as David has already mentioned, the conversion to either
lowercase or uppercase is locale dependent.

Third, the numbers of short user-definable abbreviations gets halved.
Something like

  F = \markup { "Horn in F" }

would no longer be possible because \f is already in use.

Fourth, Scheme is not case-insensitive.  Should everything starting
with `#' be case-sensitive then?  Otherwise we couldn't fully access
our own extension language.


Werner

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread Phil Holmes
- Original Message - 
From: "Werner LEMBERG" 

To: 
Cc: ; 
Sent: Saturday, September 15, 2012 1:08 PM
Subject: Re: [GLISS] - alternative viewpoint



\new Staff works.  \New staff doesn't.  [...]


I'm strictly against case-insensivity.


And I and others are for it.  Could you state your reasoning, please?  I've 
already stated mine.


--
Phil Holmes 



___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread Werner LEMBERG
> \new Staff works.  \New staff doesn't.  [...]

I'm strictly against case-insensivity.  Guiding the user to find the
right command name (this is, finding the `nearest' command or macro
name to the non-existing one[1]) belongs to the error-help category
IMHO, something which I would add as a request to the tracker.


Werner


[1] You can find an overview here:

  http://en.wikipedia.org/wiki/Approximate_string_matching

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread David Kastrup
"Phil Holmes"  writes:

> - Original Message - 
> From: "David Kastrup" 
> To: 
> Sent: Saturday, September 15, 2012 9:20 AM
> Subject: Re: [GLISS] - alternative viewpoint
>
>
>> "Phil Holmes"  writes:
>>
>>> And getting rid of case-sensitivity in a lot of this?
>>
>> You need to elaborate.  It is not clear what you mean with that, and
>> what kind of remedy you envision.
>
>
> \new Staff works.  \New staff doesn't.  There's no reason for that -

There is actually a reason for that.  Staff, as a context name, is a
container for properties, and things like Slur, as a property name, are
also principally containers for properties.  There is a convention to
uppercase them in order to distinguish them from other elements.  When
writing things like

\layout {
  \context {
\Staff
\override ...
  }
}

calling the identifier \Staff for copying an existing context definition
is not syntactically different from calling any other kind of identifier
including functions.  We use the uppercasing here in order to establish
some kind of namespace.

The one consequence that I find actually annoying about that is that we
have the semi-equivalence of \score with \new Score, and that is indeed
less than pretty.

> we don't have two separate \new \New commands that do different
> things, nor two contexts Staff and staff that are different.

But \Score and \score which are entirely different things (the latter is
actually a reserved word, so they can't really be merged).

> Worse is that \slurUp works but only with that precise casing.

Given that it works on a grob called Slur, I agree that some of the
consequences of our naming schemes are not necessarily fortunate.
\upSlur would fit better into the schemes, but I don't fancy its
grammar.  In practice, \voiceOne and \voiceTwo are more often than not
the saner choice (as they make for more consistent results usually since
the user often forgets to include the more obscure *Up/*Down commands),
or using ^ and _ on individual slurs (since it is rare that you actually
want to direct only slurs but nothing else for longer passages).

> TBH this specific one doesn't cause me worry, since I remember it, but
> there are much more arcane casings that I have to refer to the manual
> to find - so I can remember the command, but not the casing!  From a
> user perspective, it would be much simpler if everything they write
> was ToLower()-ed before further processing.

With the current design, it is not as simple as that right now.  Of
course, there is the standard argument (known from filesystem
discussions) that lowercasing is not a well-defined operation since some
people expect \lowercase{I} to be {i} and some expect it to be {ı} and
\uppercase{i} to be either {I} or {İ}.

As long as we allow arbitrary utf8 characters into identifiers, that is
not an entirely hypothetic consideration.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread Jan Nieuwenhuizen
David Kastrup writes:

>> Is there any
>> possibility to fine-tune this as requested by Phil, in particular,
>> emitting the right usage as an example in the error message?
>
> You mean, currently we basically see the default error message from the
> parser generator.  Improving this involves basically accepting errors in
> input and acting on them by putting out hand-tailored messages.

Hopefully stating the obvious...to me, please be careful to keep
mentioning the actual error condition.

It can be very helpful to add error states and hand-tailor messages, and
even a usage example or suggestion may be helpful... if the suggestion
has a very high guestimate of being right.

Some softwares replace the actual error condition -- with whatever good
intention -- by a user friendly message that guessed wrong.  Ugh.

Also, more and more google is your friend with error messages, even or
especially if they're cryptic.  Hmm, people may not know that.  What if
upon error, after the error message, LilyPond prints google's first hit:
and by the way, this is what Google thinks about your problem. ;-)

Jan

-- 
Jan Nieuwenhuizen  | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar®  http://AvatarAcademy.nl  

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread Phil Holmes
- Original Message - 
From: "David Kastrup" 

To: 
Sent: Saturday, September 15, 2012 9:20 AM
Subject: Re: [GLISS] - alternative viewpoint



"Phil Holmes"  writes:


And getting rid of case-sensitivity in a lot of this?


You need to elaborate.  It is not clear what you mean with that, and
what kind of remedy you envision.



\new Staff works.  \New staff doesn't.  There's no reason for that - we 
don't have two separate \new \New commands that do different things, nor two 
contexts Staff and staff that are different.  Worse is that \slurUp works 
but only with that precise casing.  TBH this specific one doesn't cause me 
worry, since I remember it, but there are much more arcane casings that I 
have to refer to the manual to find - so I can remember the command, but not 
the casing!  From a user perspective, it would be much simpler if everything 
they write was ToLower()-ed before further processing.


--
Phil Holmes 



___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread David Kastrup
Werner LEMBERG  writes:

>> Here is my multi-stage plan for that:
>
> I essentially agree with everything.  Thanks for that plan.
>
>> b) our C++ engravers announce to the type system (and via that, to
>> the documentation) which context properties they read, modify and
>> write.  There is no reason that this does not also include the Grob
>> descriptions which are even now a special case of context property.
>
> In general, virtually all (public) Scheme functions of LilyPond
> already have some documentation strings attached to it, and I think it
> is probably one of the most important targets on the documentation
> side to make them appear in the documentation.
>
>> d) \override xxx is equivalent to \override Bottom.xxx, [...]
>
> As soon as this works it would be extremely helpful if we could have a
> command line flag to switch on tracing of those commands so that a
> user can follow which \override gets applied which context.  Actually,
> this would be extremely helpful today too.
>
>>> And finding what comes after the \override staff.Something - is it
>>> ##f. or #'4 or 4 or { 4} or what?
>> 
>> #'4 and #4 and 4 should be quite equivalent in most cases...
>
> Currently, in case of error, we basically see the parser's or lexer's
> error message which isn't very useful for the beginner.  Is there any
> possibility to fine-tune this as requested by Phil, in particular,
> emitting the right usage as an example in the error message?

You mean, currently we basically see the default error message from the
parser generator.  Improving this involves basically accepting errors in
input and acting on them by putting out hand-tailored messages.

Currently, the parser is still undergoing significant restructuring work
in major areas and mechanisms.  That work entails a lot of time spent on
ironing out parser conflicts where some input would correspond to
multiple and diverging interpretations according to the current syntax.
It is significant work ironing out those conflicts.  Adding additional
rules for erroneous input means more potential for conflict, so it would
make the ongoing work even harder.  I am working towards recognizing
elements of the syntax in isolation, and then pasting them together.
The "pasting together" is then done outside of the immediate control of
the parser and can trigger independent error messages based on the
assumption that at least the elements used for combining were, by
themselves, recognized correctly.  Those error messages can be more
specific and helpful than the boilerplate parse errors from the parser
generator.

We have that, to some degree, concerning the type of music function
arguments.  If those don't match expectations, you'll get an error that
usually is quite more specific and user-readable than "syntax error:
unexpected STRING".  However, putting more user-specific error rules in
the syntax rules themselves increases the potential for syntax conflicts
in the parser.  As long as the major contruction work in there is not
finished, the user benefits of such rules will likely be transitory, and
it makes working on the parser even harder.

So I would first like to get to a state where I consider the
parser/syntax to be mostly "in harmony" with its design before adding
user-helpful error rules that make further work harder.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread Werner LEMBERG

> Here is my multi-stage plan for that:

I essentially agree with everything.  Thanks for that plan.

> b) our C++ engravers announce to the type system (and via that, to
> the documentation) which context properties they read, modify and
> write.  There is no reason that this does not also include the Grob
> descriptions which are even now a special case of context property.

In general, virtually all (public) Scheme functions of LilyPond
already have some documentation strings attached to it, and I think it
is probably one of the most important targets on the documentation
side to make them appear in the documentation.

> d) \override xxx is equivalent to \override Bottom.xxx, [...]

As soon as this works it would be extremely helpful if we could have a
command line flag to switch on tracing of those commands so that a
user can follow which \override gets applied which context.  Actually,
this would be extremely helpful today too.

>> And finding what comes after the \override staff.Something - is it
>> ##f. or #'4 or 4 or { 4} or what?
> 
> #'4 and #4 and 4 should be quite equivalent in most cases...

Currently, in case of error, we basically see the parser's or lexer's
error message which isn't very useful for the beginner.  Is there any
possibility to fine-tune this as requested by Phil, in particular,
emitting the right usage as an example in the error message?


Werner

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread David Kastrup
David Kastrup  writes:

> Quite agreed.  That is what I call "extending the vocabulary", and
> making that feasible continues to be a main objective of my work on
> music functions.  We got a few new people on the user list contributing
> music functions so far, but those contributions are not convenience
> wrappers but actually do complex jobs.
>
> There are several lashback issues connected with convenience wrappers,
> and they focus around the question:
>
> To what degree does a convenience wrapper become part of LilyPond's
> language?
>
> There are several questions following from that starting point.
>
> a) reflection.  Should \displayLilyMusic recognize expressions that
> can be produced by a wrapper and output them?  If we answer "yes" to
> that question, it would make sense to provide some infrastructure
> for specifying appropriate reverse engineering rules to LilyPond in
> a manner that is not significantly more complex to specify than the
> wrapper itself.
>
> b) When and how are third-party tools supposed to learn about such
> wrappers when they are supposed to be part of LilyPond?
>
> c) MusicXML?

Oh, and d) bikeshedding.

For a semi-example, see
http://code.google.com/p/lilypond/issues/detail?id=2717> and
particularly the discussion on its Rietveld review
http://codereview.appspot.com/6443087>.

Now one might argue that this currently is rather a discussion on
meta-bikeshedding, namely getting something right that will serve as a
template for future bikeshedding, but it is quite clear that with
convenience wrappers, everybody actually _can_ contribute his opinion
without requiring much expertise.  And it makes some sense as well since
we are, after all, trying to hit the sweet spot of naive expectations.

Meta-bikeshedding makes some sense for prestructuring this space, but
after that, filling in the blanks is pretty much possible for everyone.
In some respects, this may be part of "personal style collections", but
of course some stuff makes sense to be part of the core as well.

-- 
David Kastrup


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-15 Thread David Kastrup
"Phil Holmes"  writes:

> OK - so there's been a lot of discussion of pre- and post-fix, and a
> load of other stuff I don't understand.So I had a think about what it
> is about lilypond syntax that p**s me off.  And I concluded that it's
> nothing to do with whether we write c4 /p for a quiet crochet c, as
> opposed to /p 4c.  I really don't care.  When I was a tyro, I just
> read that and accepted it. What does get me more concerned is how hard
> it is to find some of the correct ways of tweaking output.  Using
> voice.SomeValue (or is it Voice.someValue) when it should be
> staff.Somevalue (or was it Staff.someValue) frequently results in no
> change to the output.

Yup.  Here is my multi-stage plan for that:

a) an \override is really just a subset, namely a change of the context
property named after a grob.  For efficiency reasons, that context
property is not organized as an alist but something more complicated
implemented on top of a pair.  Properties have to be reorganized to
make a hierarchical \set strictly equivalent to an \override.

b) our C++ engravers announce to the type system (and via that, to the
documentation) which context properties they read, modify and write.
There is no reason that this does not also include the Grob descriptions
which are even now a special case of context property.

c) Scheme engravers have no way to "register" like a C++ engraver,
telling the type system what they want to be called, and which context
properties they are accessing.  This needs to change.

d) \override xxx is equivalent to \override Bottom.xxx, with Bottom
being a context without \defaultchild (to be recursively created from
the current context, if that is not a bottom context, by creating the
respective defaultchildren in sequence until hitting bottom).  If all
our engravers had correctly registered the context properties they read,
\override xxx could instead set the property in the context closest to
bottom that will actually _look_ at the changed property.

Of course, this is not without drawback either: if there are multiple
engravers looking at that property at multiple levels and you are
interested in overriding the behavior of the engraver in an outer level,
the unspecific override will be done in the inner level and again not
have an apparent effect.

However, it would be a second-tier nuisance instead of a first-tier
nuisance.

> And is it \override or \set?  And \revert or \override back to
> something else.  And finding what comes after the \override
> staff.Something - is it ##f. or #'4 or 4 or { 4} or what?

#'4 and #4 and 4 should be quite equivalent in most cases...

> If you follow what is asked on -user, it's this stuff that causes
> confusion, not pre- or post-fix.

One might argue that users who are able to write to a mailing list after
looking for it in the manual make up for less than 1% of our targeted
demographic group, users who come to LilyPond not primarily since they
enjoy being in total control over the data structures their typesetting
program uses.

And particularly for those it makes a big selling point if naive
expectations disregarding the technical necessities and implementation
constraints happen to hit the mark semi-regularly.  Of course, we can't
make that 100%, but 80% is a lot more encouraging than 2%.  If you get
everything wrong at first try, that's a big turnoff.  Even if some smart
helpful guy explains to you why everything is wrong.

> Now - I have no idea if this is possible or not, but when I put some
> of these complex overrides into my converter, the commands to the
> converter use a C-like syntax.  For instance, I've written a feature
> that allows the converter to scale durations:
>
> scaleDurationsOn(n,m)
>
> I personally think that providing more of these simple syntax features
> would make it much easier for the average user: we do have a few
> shortcuts of this type: for example:
>
> autoBeamOff = \set autoBeaming = ##f
> melismaEnd = #(context-spec-music (make-property-unset 'melismaBusy)
> Bottom)
>
> Why not focus on making the slightly complex part of Lilypond much
> simpler (not the very complex, like customer scheme functions - if you
> can do that, you don't need help)?

Quite agreed.  That is what I call "extending the vocabulary", and
making that feasible continues to be a main objective of my work on
music functions.  We got a few new people on the user list contributing
music functions so far, but those contributions are not convenience
wrappers but actually do complex jobs.

There are several lashback issues connected with convenience wrappers,
and they focus around the question:

To what degree does a convenience wrapper become part of LilyPond's
language?

There are several questions following from that starting point.

a) reflection.  Should \displayLilyMusic recognize expressions that
can be produced by a wrapper and output them?  If we answer "yes" to
that question, it would make sense to provide some infra

Re: [GLISS] - alternative viewpoint

2012-09-14 Thread Francisco Vila
2012/9/14 Phil Holmes :
> OK - so there's been a lot of discussion of pre- and post-fix, and a load of
> other stuff I don't understand.So I had a think about what it is about
> lilypond syntax that p**s me off.  And I concluded that it's nothing to do
> with whether we write c4 /p for a quiet crochet c, as opposed to /p 4c.  I
> really don't care.  When I was a tyro, I just read that and accepted it.
> What does get me more concerned is how hard it is to find some of the
> correct ways of tweaking output.  Using voice.SomeValue (or is it
> Voice.someValue) when it should be staff.Somevalue (or was it
> Staff.someValue) frequently results in no change to the output.  And is it
> \override or \set?  And \revert or \override back to something else.  And
> finding what comes after the \override staff.Something - is it ##f. or #'4
> or 4 or { 4} or what?
>
> If you follow what is asked on -user, it's this stuff that causes confusion,
> not pre- or post-fix.

The nature of the language, and the wide variety of cases you can
encounter in real scores along with plain old everyday music, makes
two subsets of language rules to exist. One is common music notation,
with no overrides. I think a musician can learn this subset in full,
and enjoy most of lilypond, most of the time. Other is the tweaking
mechanism, which I find impossible to memorize. And what is worse, is
to see the raising eyebrows in faces of people who is suppossed to use
it daily, when you try to teach it to them.

Still, we have the advantage of that, being a human-readable text
format, one can simply copy+paste cool code from LSR that works with a
high probability of success.

I have been tempted of making an automated "absolutely complete whole
collection of all possible overrides -- illustrated" for this purpose.
No time is too late for this.

-- 
Francisco Vila. Badajoz (Spain)
www.paconet.org , www.csmbadajoz.com

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-14 Thread Bernard Hurley
On Fri, Sep 14, 2012 at 10:13:00PM +0200, Marc Hohl wrote:
>
> \include "guitarSettings"
>
> \include "choirSettings" \with { \SATBoptions }
>

So you are thinking along the lines of the LaTex package system.
I would go along with that.

Bernard.

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-14 Thread Marc Hohl

Am 14.09.2012 19:10, schrieb m...@mikesolomon.org:

On 14 sept. 2012, at 19:56, Phil Holmes  wrote:


OK - so there's been a lot of discussion of pre- and post-fix, and a load of 
other stuff I don't understand.So I had a think about what it is about lilypond 
syntax that p**s me off.  And I concluded that it's nothing to do with whether 
we write c4 /p for a quiet crochet c, as opposed to /p 4c.  I really don't 
care.  When I was a tyro, I just read that and accepted it. What does get me 
more concerned is how hard it is to find some of the correct ways of tweaking 
output.  Using voice.SomeValue (or is it Voice.someValue) when it should be 
staff.Somevalue (or was it Staff.someValue) frequently results in no change to 
the output.  And is it \override or \set?  And \revert or \override back to 
something else.  And finding what comes after the \override staff.Something - 
is it ##f. or #'4 or 4 or { 4} or what?

If you follow what is asked on -user, it's this stuff that causes confusion, 
not pre- or post-fix.

Now - I have no idea if this is possible or not, but when I put some of these 
complex overrides into my converter, the commands to the converter use a C-like 
syntax.  For instance, I've written a feature that allows the converter to 
scale durations:

scaleDurationsOn(n,m)

I personally think that providing more of these simple syntax features would 
make it much easier for the average user: we do have a few shortcuts of this 
type: for example:

autoBeamOff = \set autoBeaming = ##f
melismaEnd = #(context-spec-music (make-property-unset 'melismaBusy) 'Bottom)

Why not focus on making the slightly complex part of Lilypond much simpler (not 
the very complex, like customer scheme functions - if you can do that, you 
don't need help)?  And getting rid of case-sensitivity in a lot of this? And 
providing error messages when an override has no effect because it was at the 
voice context and should have been at staff?

+1

What I'd like to add: some kind of style files (as Janek proposed at 
Waltrop) similar to

LaTeX packages.

If I write music for guitar, I need other settings than for a SATB choir.
Enabling them by

\include "guitarSettings"

\include "choirSettings" \with { \SATBoptions }

or something similar would improve the situation a lot without
rethinking the whole syntax in detail.

I completely agree with Phil.  Reading the user list, it is comparatively rare that people seem to get hung 
up on pre-and-post stuff.  What'd really help is "did you mean to do thing X?" or "thing Y 
will have no effect - consider doing Z" or even a "?" token one can put before or after an 
object to have help messages printed to the logfile as well as detailed information about the command in 
question and what it applies to.

+1, too.

Regards,

Marc


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [GLISS] - alternative viewpoint

2012-09-14 Thread m...@mikesolomon.org

On 14 sept. 2012, at 19:56, Phil Holmes  wrote:

> OK - so there's been a lot of discussion of pre- and post-fix, and a load of 
> other stuff I don't understand.So I had a think about what it is about 
> lilypond syntax that p**s me off.  And I concluded that it's nothing to do 
> with whether we write c4 /p for a quiet crochet c, as opposed to /p 4c.  I 
> really don't care.  When I was a tyro, I just read that and accepted it. What 
> does get me more concerned is how hard it is to find some of the correct ways 
> of tweaking output.  Using voice.SomeValue (or is it Voice.someValue) when it 
> should be staff.Somevalue (or was it Staff.someValue) frequently results in 
> no change to the output.  And is it \override or \set?  And \revert or 
> \override back to something else.  And finding what comes after the \override 
> staff.Something - is it ##f. or #'4 or 4 or { 4} or what?
> 
> If you follow what is asked on -user, it's this stuff that causes confusion, 
> not pre- or post-fix.
> 
> Now - I have no idea if this is possible or not, but when I put some of these 
> complex overrides into my converter, the commands to the converter use a 
> C-like syntax.  For instance, I've written a feature that allows the 
> converter to scale durations:
> 
> scaleDurationsOn(n,m)
> 
> I personally think that providing more of these simple syntax features would 
> make it much easier for the average user: we do have a few shortcuts of this 
> type: for example:
> 
> autoBeamOff = \set autoBeaming = ##f
> melismaEnd = #(context-spec-music (make-property-unset 'melismaBusy) 'Bottom)
> 
> Why not focus on making the slightly complex part of Lilypond much simpler 
> (not the very complex, like customer scheme functions - if you can do that, 
> you don't need help)?  And getting rid of case-sensitivity in a lot of this? 
> And providing error messages when an override has no effect because it was at 
> the voice context and should have been at staff?
> 
> --
> Phil Holmes
> 
> 
> 
> ___
> lilypond-devel mailing list
> lilypond-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/lilypond-devel

I completely agree with Phil.  Reading the user list, it is comparatively rare 
that people seem to get hung up on pre-and-post stuff.  What'd really help is 
"did you mean to do thing X?" or "thing Y will have no effect - consider doing 
Z" or even a "?" token one can put before or after an object to have help 
messages printed to the logfile as well as detailed information about the 
command in question and what it applies to.

Chers,
MS
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


[GLISS] - alternative viewpoint

2012-09-14 Thread Phil Holmes
OK - so there's been a lot of discussion of pre- and post-fix, and a load of 
other stuff I don't understand.So I had a think about what it is about 
lilypond syntax that p**s me off.  And I concluded that it's nothing to do 
with whether we write c4 /p for a quiet crochet c, as opposed to /p 4c.  I 
really don't care.  When I was a tyro, I just read that and accepted it. 
What does get me more concerned is how hard it is to find some of the 
correct ways of tweaking output.  Using voice.SomeValue (or is it 
Voice.someValue) when it should be staff.Somevalue (or was it 
Staff.someValue) frequently results in no change to the output.  And is it 
\override or \set?  And \revert or \override back to something else.  And 
finding what comes after the \override staff.Something - is it ##f. or #'4 
or 4 or { 4} or what?


If you follow what is asked on -user, it's this stuff that causes confusion, 
not pre- or post-fix.


Now - I have no idea if this is possible or not, but when I put some of 
these complex overrides into my converter, the commands to the converter use 
a C-like syntax.  For instance, I've written a feature that allows the 
converter to scale durations:


scaleDurationsOn(n,m)

I personally think that providing more of these simple syntax features would 
make it much easier for the average user: we do have a few shortcuts of this 
type: for example:


autoBeamOff = \set autoBeaming = ##f
melismaEnd = #(context-spec-music (make-property-unset 'melismaBusy) 
'Bottom)


Why not focus on making the slightly complex part of Lilypond much simpler 
(not the very complex, like customer scheme functions - if you can do that, 
you don't need help)?  And getting rid of case-sensitivity in a lot of this? 
And providing error messages when an override has no effect because it was 
at the voice context and should have been at staff?


--
Phil Holmes



___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel