<br><br><div class="gmail_quote">On Sat, Oct 29, 2011 at 1:26 PM, Matthew Brett <span dir="ltr">&lt;<a href="mailto:matthew.brett@gmail.com">matthew.brett@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi,<br>
<br>
On Sat, Oct 29, 2011 at 12:19 PM, Charles R Harris<br>
<div><div></div><div class="h5">&lt;<a href="mailto:charlesr.harris@gmail.com">charlesr.harris@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; On Sat, Oct 29, 2011 at 1:04 PM, Matthew Brett &lt;<a href="mailto:matthew.brett@gmail.com">matthew.brett@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hi,<br>
&gt;&gt;<br>
&gt;&gt; On Sat, Oct 29, 2011 at 3:26 AM, Ralf Gommers<br>
&gt;&gt; &lt;<a href="mailto:ralf.gommers@googlemail.com">ralf.gommers@googlemail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Sat, Oct 29, 2011 at 1:37 AM, Matthew Brett &lt;<a href="mailto:matthew.brett@gmail.com">matthew.brett@gmail.com</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Hi,<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; On Fri, Oct 28, 2011 at 4:21 PM, Ralf Gommers<br>
&gt;&gt; &gt;&gt; &lt;<a href="mailto:ralf.gommers@googlemail.com">ralf.gommers@googlemail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; On Sat, Oct 29, 2011 at 12:37 AM, Matthew Brett<br>
&gt;&gt; &gt;&gt; &gt; &lt;<a href="mailto:matthew.brett@gmail.com">matthew.brett@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; Hi,<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; On Fri, Oct 28, 2011 at 3:14 PM, Charles R Harris<br>
&gt;&gt; &gt;&gt; &gt;&gt; &lt;<a href="mailto:charlesr.harris@gmail.com">charlesr.harris@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; No, that&#39;s not what Nathaniel and I are saying at all. Nathaniel was<br>
&gt;&gt; &gt;&gt; &gt;&gt; pointing to links for projects that care that everyone agrees before<br>
&gt;&gt; &gt;&gt; &gt;&gt; they go ahead.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; It looked to me like there was a serious intent to come to an<br>
&gt;&gt; &gt;&gt; &gt; agreement,<br>
&gt;&gt; &gt;&gt; &gt; or<br>
&gt;&gt; &gt;&gt; &gt; at least closer together. The discussion in the summer was going<br>
&gt;&gt; &gt;&gt; &gt; around<br>
&gt;&gt; &gt;&gt; &gt; in<br>
&gt;&gt; &gt;&gt; &gt; circles though, and was too abstract and complex to follow. Therefore<br>
&gt;&gt; &gt;&gt; &gt; Mark&#39;s<br>
&gt;&gt; &gt;&gt; &gt; choice of implementing something and then asking for feedback made<br>
&gt;&gt; &gt;&gt; &gt; sense<br>
&gt;&gt; &gt;&gt; &gt; to<br>
&gt;&gt; &gt;&gt; &gt; me.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; I should point out that the implementation hasn&#39;t - as far as I can<br>
&gt;&gt; &gt;&gt; see - changed the discussion.  The discussion was about the API.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Implementations are useful for agreed APIs because they can point out<br>
&gt;&gt; &gt;&gt; where the API does not make sense or cannot be implemented.  In this<br>
&gt;&gt; &gt;&gt; case, the API Mark said he was going to implement - he did implement -<br>
&gt;&gt; &gt;&gt; at least as far as I can see.  Again, I&#39;m happy to be corrected.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Implementations can also help the discussion along, by allowing people<br>
&gt;&gt; &gt; to<br>
&gt;&gt; &gt; try out some of the proposed changes. It also allows to construct<br>
&gt;&gt; &gt; examples<br>
&gt;&gt; &gt; that show weaknesses, possibly to be solved by an alternative API. Maybe<br>
&gt;&gt; &gt; you<br>
&gt;&gt; &gt; can hold the complete history of this topic in your head and comprehend<br>
&gt;&gt; &gt; it,<br>
&gt;&gt; &gt; but for me it would be very helpful if someone said:<br>
&gt;&gt; &gt; - here&#39;s my dataset<br>
&gt;&gt; &gt; - this is what I want to do with it<br>
&gt;&gt; &gt; - this is the best I can do with the current implementation<br>
&gt;&gt; &gt; - here&#39;s how API X would allow me to solve this better or simpler<br>
&gt;&gt; &gt; This can be done much better with actual data and an actual<br>
&gt;&gt; &gt; implementation<br>
&gt;&gt; &gt; than with a design proposal. You seem to disagree with this statement.<br>
&gt;&gt; &gt; That&#39;s fine. I would hope though that you recognize that concrete<br>
&gt;&gt; &gt; examples<br>
&gt;&gt; &gt; help people like me, and construct one or two to help us out.<br>
&gt;&gt; That&#39;s what use-cases are for in designing APIs.  There are examples<br>
&gt;&gt; of use in the NEP:<br>
&gt;&gt;<br>
&gt;&gt; <a href="https://github.com/numpy/numpy/blob/master/doc/neps/missing-data.rst" target="_blank">https://github.com/numpy/numpy/blob/master/doc/neps/missing-data.rst</a><br>
&gt;&gt;<br>
&gt;&gt; the alterNEP:<br>
&gt;&gt;<br>
&gt;&gt; <a href="https://gist.github.com/1056379" target="_blank">https://gist.github.com/1056379</a><br>
&gt;&gt;<br>
&gt;&gt; and my longer email to Travis:<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; <a href="http://article.gmane.org/gmane.comp.python.numeric.general/46544/match=ignored" target="_blank">http://article.gmane.org/gmane.comp.python.numeric.general/46544/match=ignored</a><br>
&gt;&gt;<br>
&gt;&gt; Mark has done a nice job of documentation:<br>
&gt;&gt;<br>
&gt;&gt; <a href="http://docs.scipy.org/doc/numpy/reference/arrays.maskna.html" target="_blank">http://docs.scipy.org/doc/numpy/reference/arrays.maskna.html</a><br>
&gt;&gt;<br>
&gt;&gt; If you want to understand what the alterNEP case is, I&#39;d suggest the<br>
&gt;&gt; email, just because it&#39;s the most recent and I think the terminology<br>
&gt;&gt; is slightly clearer.<br>
&gt;&gt;<br>
&gt;&gt; Doing the same examples on a larger array won&#39;t make the point easier<br>
&gt;&gt; to understand.  The discussion is about what the right concepts are,<br>
&gt;&gt; and you can help by looking at the snippets of code in those<br>
&gt;&gt; documents, and deciding for yourself whether you think the current<br>
&gt;&gt; masking / NA implementation seems natural and easy to explain, or<br>
&gt;&gt; rather forced and difficult to explain, and then email back trying to<br>
&gt;&gt; explain your impression (which is not always easy).<br>
&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; In saying that we are insisting on our way, you are saying,<br>
&gt;&gt; &gt;&gt; &gt;&gt; implicitly,<br>
&gt;&gt; &gt;&gt; &gt;&gt; &#39;I<br>
&gt;&gt; &gt;&gt; &gt;&gt; am not going to negotiate&#39;.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; That is only your interpretation. The observation that Mark<br>
&gt;&gt; &gt;&gt; &gt; compromised<br>
&gt;&gt; &gt;&gt; &gt; quite a bit while you didn&#39;t seems largely correct to me.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; The problem here stems from our inability to work towards agreement,<br>
&gt;&gt; &gt;&gt; rather than standing on set positions.  I set out what changes I think<br>
&gt;&gt; &gt;&gt; would make the current implementation OK.  Can we please, please have<br>
&gt;&gt; &gt;&gt; a discussion about those points instead of trying to argue about who<br>
&gt;&gt; &gt;&gt; has given more ground.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt; That commitment would of course be good. However, even if that were<br>
&gt;&gt; &gt;&gt; &gt; possible<br>
&gt;&gt; &gt;&gt; &gt; before writing code and everyone agreed that the ideas of you and<br>
&gt;&gt; &gt;&gt; &gt; Nathaniel<br>
&gt;&gt; &gt;&gt; &gt; should be implemented in full, it&#39;s still not clear that either of<br>
&gt;&gt; &gt;&gt; &gt; you<br>
&gt;&gt; &gt;&gt; &gt; would<br>
&gt;&gt; &gt;&gt; &gt; be willing to write any code. Agreement without code still doesn&#39;t<br>
&gt;&gt; &gt;&gt; &gt; help<br>
&gt;&gt; &gt;&gt; &gt; us<br>
&gt;&gt; &gt;&gt; &gt; very much.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; I&#39;m going to return to Nathaniel&#39;s point - it is a highly valuable<br>
&gt;&gt; &gt;&gt; thing to set ourselves the target of resolving substantial discussions<br>
&gt;&gt; &gt;&gt; by consensus.   The route you are endorsing here is &#39;implementor<br>
&gt;&gt; &gt;&gt; wins&#39;.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I&#39;m not. All I want to point out is is that design and implementation<br>
&gt;&gt; &gt; are<br>
&gt;&gt; &gt; not completely separated either.<br>
&gt;&gt;<br>
&gt;&gt; No, they often interact.  I was trying to explain why, in this case,<br>
&gt;&gt; the implementation hasn&#39;t changed the issues substantially, as far as<br>
&gt;&gt; I can see.   If you think otherwise, then that is helpful information,<br>
&gt;&gt; because you can feed back about where the initial discussion has been<br>
&gt;&gt; overtaken by the implementation, and so we can strip down the<br>
&gt;&gt; discussion to its essential parts.<br>
&gt;&gt;<br>
&gt;&gt; &gt;&gt; We don&#39;t need to do it that way.  We&#39;re a mature sensible<br>
&gt;&gt; &gt;&gt; bunch of adults<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Agreed:)<br>
&gt;&gt;<br>
&gt;&gt; Ah - if only it was that easy :)<br>
&gt;&gt;<br>
&gt;&gt; &gt;&gt; who can talk out the issues until we agree they are<br>
&gt;&gt; &gt;&gt; ready for implementation, and then implement.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; The history of this discussion doesn&#39;t suggest it straightforward to get<br>
&gt;&gt; &gt; a<br>
&gt;&gt; &gt; design right first time. It&#39;s a complex subject.<br>
&gt;&gt;<br>
&gt;&gt; Right - and it&#39;s more complex when only some of the people involved<br>
&gt;&gt; are interested in the discussion coming to a resolution.   That&#39;s<br>
&gt;&gt; Nathaniel&#39;s point - that although it seems inefficient, working<br>
&gt;&gt; towards a good resolution of big issues like this is very valuable in<br>
&gt;&gt; getting the ideas right.<br>
&gt;&gt;<br>
&gt;&gt; &gt; The second part of your statement, &quot;and then implement&quot;, sounds so<br>
&gt;&gt; &gt; simple.<br>
&gt;&gt; &gt; The reality is that there are only a handful of developers who have done<br>
&gt;&gt; &gt; a<br>
&gt;&gt; &gt; significant amount of work on the numpy core in the last two years. I<br>
&gt;&gt; &gt; haven&#39;t seen anyone saying they are planning to implement (part of)<br>
&gt;&gt; &gt; whatever<br>
&gt;&gt; &gt; design the outcome of this discussion will be. I don&#39;t think it&#39;s<br>
&gt;&gt; &gt; strange to<br>
&gt;&gt; &gt; keep this in mind to some extent.<br>
&gt;&gt;<br>
&gt;&gt; No, but consensus building is a little bit all or none.   I guess we&#39;d<br>
&gt;&gt; all like consensus, but then sometimes, as Nathaniel points out, it is<br>
&gt;&gt; inconvenient and annoying.  If we have no stated commitment to<br>
&gt;&gt; consensus, at some unpredictable point in the discussion, those who<br>
&gt;&gt; are implementing will - obviously - just duck out and do the<br>
&gt;&gt; implementation.  I would do that, I guess.  Maybe I have done in the<br>
&gt;&gt; projects I&#39;m involved in.   The question Nathaniel is raising, and me<br>
&gt;&gt; too, in a less coherent way, is - is that fine?    Does it matter that<br>
&gt;&gt; we are short-cutting through substantial discussions?   Is that really<br>
&gt;&gt; - in the long term - a more efficient way of building both the code<br>
&gt;&gt; and the community?<br>
&gt;&gt;<br>
&gt;<br>
&gt; Who is counted in building a consensus? I tend to pay attention to those who<br>
&gt; have made consistent contributions over the years, reviewed code, fixed<br>
&gt; bugs, and have generally been active in numpy development. In any group<br>
&gt; participation is important, people who just walk in the door and demand<br>
&gt; things be done their way aren&#39;t going to get a lot of respect. I&#39;ll happily<br>
&gt; listen to politely expressed feedback, especially if the feedback comes from<br>
&gt; someone who shows up to work, but that hasn&#39;t been my impression of the<br>
&gt; disagreements in this case. Heck, Nathaniel wasn&#39;t even tracking the Numpy<br>
&gt; pull requests or Mark&#39;s repository. That doesn&#39;t spell &quot;participant&quot; in my<br>
&gt; dictionary.<br>
<br>
</div></div>I&#39;m sorry, I am not obeying Ben&#39;s 10 minute rule.<br>
<br>
This is a very important point you are making, which is that those who<br>
write the code have the final say.<br>
<br>
Is it fair to say that your responses show that you don&#39;t think either<br>
Nathaniel or I have much of a say?<br>
<br>
It&#39;s fair to say I haven&#39;t contributed much code to numpy.<br>
<br></blockquote><div><br>But you have contributed some, which immediately gives you more credibility.<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

I could imagine some sort of voting system for which the voting is<br>
weighted by lines of code contributed.<br></blockquote><div><br>Mark has been the man over the last year. By comparison, the rest of us have just been diddling around.<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<br>
I suspect you are thinking of an implicit version of such a system,<br>
continuously employed.<br>
<br>
But Nathaniel&#39;s point is that other projects have gone out of their<br>
way to avoid voting.  To quote from:<br>
<br>
<a href="http://producingoss.com/en/consensus-democracy.html" target="_blank">http://producingoss.com/en/consensus-democracy.html</a><br>
<br>
&quot;In general, taking a vote should be very rare—a last resort for when<br>
all other options have failed. Don&#39;t think of voting as a great way to<br>
resolve debates. It isn&#39;t. It ends discussion, and thereby ends<br>
creative thinking about the problem. As long as discussion continues,<br>
there is the possibility that someone will come up with a new solution<br>
everyone likes. &quot;<br>
<div><div></div><div class="h5"><br></div></div></blockquote><div><br>As Ralf pointed out, the core developers are a small handful at the moment. Now in one sense that presents an opportunity: anyone who has the time and inclination to contribute code and review pull requests is going to make an impact and rapidly gain influence. In a sense, leadership in the numpy community is up for grabs. But before you can claim the kingdom, there is the small matter of completing a quest or two.<br>
<br>Chuck<br></div><br></div>