For clarity's sake, let's call the current state of NuPIC "NuPIC Alpha",
and the proposed state of NuPIC (once the C++ core is extracted and we've
solidified the core API) "NuPIC Beta".

Regarding the proposal that Grok continue using the legacy codebase (NuPIC
Alpha) while a copied version is refactored in parallel (NuPIC Beta)...

While this does allow unfettered freedom for us to create exactly the
architecture we want without worrying about client contracts, it makes me
uncomfortable to have Grok detached from the "development head" of the
evolving NuPIC project. A solid regression test suite takes a considerable
amount of time to create, and the only form of one we have right now runs
within the Grok QA pipelines. Taking away the Grok dependency essentially
means taking away the only regression testing NuPIC currently has.

If we diverged Grok from NuPIC Beta in this fashion, I would want to get
Grok pointing to the NuPIC Beta architecture ASAP, which would mean that if
any unknown performance changes were introduced during the refactoring,
they would be exposed only at the point when we started building Grok off
NuPIC Beta. It also means that these problems might be quite hard to debug
and fix, because we won't be able to point to a specific change that caused
the regression failure. And the longer Grok goes without using NuPIC Beta,
the more danger NuPIC Alpha is in of diverging algorithmically from NuPIC
Alpha.

Another reason to keep the Grok dependency is because Grok engineers might
need to make algorithmic changes to NuPIC to support customer requirements
for Grok, in which case they would have to make those changes on NuPIC
Alpha. These changes would potentially span over the python and C++
codebases, and applying these changes to NuPIC Beta at the same time would
have to be done by the NuPIC community, and it could get messy.

If we apply this refactoring in incremental steps, assuring that the Grok
pipeline continues to run and pass along the way, I feel like we'll end up
with a stabler product in the end. I also don't think it will bind our
hands to make the kinds of API changes the community wants. In fact, I
think the current C++ API is rather close to fulfilling the needs of
everyone. If changes to the C++ API are made, we simply update the
dependent python bindings and client that Grok uses. Grok should not have
to change at all. Other projects the community has created around NuPIC
would also not need to change, because the python client they are using
will not mutate.

I don't want Grok to change in response to this refactoring (except to
update the NuPIC build process due to repository and dependency changes).
NuPIC already has a specific use-case with Grok, and we shouldn't break
this. We can change the core C++ API all we want, as long as the Python
client Grok uses doesn't change.

In Summary, I don't want to detach Grok from NuPIC Alpha because:
- we lose regression testing
- potential of nasty algorithm merges from NuPIC Alpha by Grok engineers
- the python API currently exposed to Grok by NuPIC Alpha should not change
with NuPIC Beta
- the extra abstraction layer of the python bindings and client provide us
the flexibility to change the core API however we want


---------
Matt Taylor
OS Community Flag-Bearer
Numenta


On Fri, Jan 24, 2014 at 8:52 AM, Fergal Byrne
<fergalbyrnedub...@gmail.com>wrote:

> Hi Matt,
>
>
> That email was amending its immediate predecessor, where I was suggesting
> a layout for all the nupic.* repos. I'd left out nupic itself as it
> currently is.
>
> My last mail (sent 9.46 this morning my time) supercedes this somewhat, as
> it contains an alternative strategy for the extraction and future
> development. Essentially what I'm saying is that a total internal fork is
> the safest way to go. This leaves nupic entirely as it is today, and makes
> essentially two copies - one for continuing incremental development for
> Grok's purposes, using a split-out of the existing nupic into nupic/nta
> (C++) and nupic.py.legacy (python); the other for radical and user-free
> development of nupic.core (C++) and nupic.py (bindings, clients).
>
> Having to mix Grok's requirements for a stable codebase with the need to
> build a real modular system creates incidental complexity which will
> severely retard or prevent the success of the new development.
>
> This layout allows Grok to pick and choose from new improvements to both
> C++ and python codebases (simply by pulling them in to nupic/nta or
> nupic.py.legacy), but never to require that the new side continuously
> passes all the Grok-required tests.
>
> Since improvements will either be to one or the other codebase, there is
> no great overhead in managing the expanded list of repos. Grok never has to
> compromise on what goes into nupic, and the community has the freedom to
> make drastic (but planned and orderly) changes to the new architecture.
>
> Regards,
>
> Fergal Byrne
>
>
> On Fri, Jan 24, 2014 at 3:58 PM, Matthew Taylor <m...@numenta.org> wrote:
>
>> On Fri, Jan 24, 2014 at 1:07 AM, Fergal Byrne <
>> fergalbyrnedub...@gmail.com> wrote:
>>
>>> Insert at top of my list
>>>
>>> nupic repo remains with entire current contents
>>>
>>> nupic.core etc...
>>>
>>
>> Can you explain this? I don't understand what you're saying.
>>
>> ---------
>> Matt Taylor
>> OS Community Flag-Bearer
>> Numenta
>>
>> _______________________________________________
>> nupic mailing list
>> nupic@lists.numenta.org
>> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org
>>
>>
>
>
> --
>
> Fergal Byrne, Brenter IT
>
> <http://www.examsupport.ie>http://inbits.com - Better Living through
> Thoughtful Technology
>
> e:fergalbyrnedub...@gmail.com t:+353 83 4214179
> Formerly of Adnet edi...@adnet.ie http://www.adnet.ie
>
> _______________________________________________
> nupic mailing list
> nupic@lists.numenta.org
> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org
>
>
_______________________________________________
nupic mailing list
nupic@lists.numenta.org
http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org

Reply via email to