On Mon, Apr 30, 2018 at 11:27 PM, Joao De Almeida Pereira <
jdealmeidapere...@pivotal.io> wrote:

> You've lost us with the last reply. We'd love to know what we'd have to do
> to get this patch committed. You mention that "some things are missing at
> some places" and that "there are missing bits".
>
I've already mentioned few of them in the earlier mails about them.

> Please note that this is not a complete solution that we've offered so far.
>
I know and, hence - asked for your understanding of the code (and, asked
for the TODOs.)

> But only one step in a grander effort to effect a more cleaner, more
> maintainable, more testable, code base.
>
Yes - we all want cleaner, maintainable, and testable code base.
As per my understading comments are required for better understanding, and
makes the code more maintainable.

But - if we're going to change everything in one go, it is difficult to
understand the changes.
Let's avoid mix match multiple things in a single patch. And, concerntrate
one functionality at a time.

-- Thanks, Ashesh

>
> Thanks
> Joao and Anthony.
>
> On Mon, Apr 30, 2018 at 11:45 AM Ashesh Vashi <
> ashesh.va...@enterprisedb.com> wrote:
>
>> On Mon, Apr 30, 2018 at 9:07 PM, Dave Page <dp...@pgadmin.org> wrote:
>>
>>>
>>>
>>> On Mon, Apr 30, 2018 at 4:33 PM, Ashesh Vashi <
>>> ashesh.va...@enterprisedb.com> wrote:
>>>
>>>>
>>>> On Mon, Apr 30, 2018 at 8:58 PM, Anthony Emengo <aeme...@pivotal.io>
>>>> wrote:
>>>>
>>>>> I was expecting a separate layer between the tree implementation, and
>>>>>> aciTree adaptor.
>>>>>> Please find the patch for the example.
>>>>>> It will separate the two layers, and easy to replace with the new
>>>>>> implementation in future.
>>>>>
>>>>>
>>>>> In general, we want defer the separation of the layers for now. Even
>>>>> though we might assume that this is the direction we want to go in. It's
>>>>> simply too early to be making such an architectural leap. For right now, 
>>>>> we
>>>>> just know that we need the decoupling, but don't know what if we'd need 
>>>>> the
>>>>> 2 layers *as implemented*. The principle we're adhering to here is
>>>>> the Last Responsible Moment principle, which states that you only make the
>>>>> changes that you feel is necessary for the given problems you're facing:
>>>>> https://blog.codinghorror.com/the-last-responsible-moment/
>>>>>
>>>>> I would not like to see that changes in this patch.
>>>>>> I would like us to come up with the actual design about the hot
>>>>>> pluggability before going in this direction.
>>>>>
>>>>>
>>>>> In our point of view these 2 changes are not related. One thing is the
>>>>> internal code organization of the application, other thing is allowing
>>>>> third party to drop code in the application and it just work. These 2
>>>>> should be talked separately, but the hot pluggability is not something 
>>>>> that
>>>>> will be address by this work we are doing right now.
>>>>>
>>>> Neither - it should be part of this change.
>>>> It should be addressed separately, and discussed.
>>>>
>>>
>>> I agree. As long as this work doesn't make the pluggability problem
>>> worse, that problem should be considered separately.
>>>
>>> So given Anthony's comments, are you happy with this patch?
>>>
>> I liked the design so far.
>> But - as Khushboo mentioned ealier - it is missing at some places.
>> I had to read through the code to understand the execution flow for some.
>>
>> And, there is still a lot missing bits, and pieces to consider for commit
>> in the repo.
>>
>> -- Thanks, Ashesh
>>
>>>
>>>
>>>>
>>>> -- Thanks, Ashesh
>>>>
>>>>>
>>>>> Anthony && Joao
>>>>>
>>>>> On Mon, Apr 30, 2018 at 11:03 AM, Ashesh Vashi <
>>>>> ashesh.va...@enterprisedb.com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Apr 30, 2018 at 8:30 PM, Ashesh Vashi <
>>>>>> ashesh.va...@enterprisedb.com> wrote:
>>>>>>
>>>>>>> On Sat, Apr 28, 2018 at 3:55 AM, Joao De Almeida Pereira <
>>>>>>> jdealmeidapere...@pivotal.io> wrote:
>>>>>>>
>>>>>>>> Hi Hackers,
>>>>>>>> As you are aware we kept on working on the patch, so we are
>>>>>>>> attaching to this email a new version of the patch.
>>>>>>>> This new version contains all the changes in the previous one plus
>>>>>>>> more extractions of functions and refactoring of code.
>>>>>>>>
>>>>>>>> The objective of this patch is to create a separation between
>>>>>>>> pgAdmin and the ACI Tree. We are doing this because we realized that at
>>>>>>>> this point in time we have the ACI Tree all over the code of pgAdmin. I
>>>>>>>> found a very interesting article that really talks about this:
>>>>>>>> https://medium.freecodecamp.org/code-dependencies-are-the-
>>>>>>>> devil-35ed28b556d
>>>>>>>>
>>>>>>>> In this patch there are some visions and ideas about the location
>>>>>>>> of the code, the way to organize it and also try to pave the future 
>>>>>>>> for a
>>>>>>>> application that is stable, easy to develop on and that can be release 
>>>>>>>> at a
>>>>>>>> times notice.
>>>>>>>>
>>>>>>>> We are investing a big chunk of our time in doing this refactoring,
>>>>>>>> but while doing that we also try to respond to the patches sent to the
>>>>>>>> mailing list. We would like the feedback from the community because we
>>>>>>>> believe this is a changing point for the application. The idea is to 
>>>>>>>> change
>>>>>>>> the way we develop this application, instead of only correcting a bug 
>>>>>>>> of
>>>>>>>> developing a feature, with every commit we should correct the bug or
>>>>>>>> develop a feature but leave the code a little better than we found it
>>>>>>>> (Refactoring, refactoring, refactoring). This is hard work but that is 
>>>>>>>> what
>>>>>>>> the users from pgAdmin expect from this community of developers.
>>>>>>>>
>>>>>>>>
>>>>>>>> ======
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> It is a huge patch
>>>>>>>>                           86 files changed, 5492 inserts, 1840
>>>>>>>> deletions
>>>>>>>> and we would like to get your feedback as soon as possible, because
>>>>>>>> we are continuing to work on it which means it is going to grow in 
>>>>>>>> size.
>>>>>>>>
>>>>>>>>
>>>>>>>> At this point in time we still have 124 of 176 calls to the
>>>>>>>> function itemData from ACITree.
>>>>>>>>
>>>>>>>> What does each patch contain:
>>>>>>>> 0001:
>>>>>>>>   Very simple patch, we found out that the linter was not looking
>>>>>>>> into all the javascript test files, so this patch will ensure it is
>>>>>>>>
>>>>>>> Committed the patch along with the regression introduced because of
>>>>>>> this patch.
>>>>>>>
>>>>>>>>
>>>>>>>> 0002:
>>>>>>>>   New Tree abstraction. This patch contains the new Tree that works
>>>>>>>> as an adaptor for ACI Tree and is going to be used on all the 
>>>>>>>> extractions
>>>>>>>> that we are doing.
>>>>>>>>
>>>>>>>
>>>>>>> I was expecting a separate layer between the tree implementation,
>>>>>>> and aciTree adaptor.
>>>>>>> Please find the patch for the example.
>>>>>>>
>>>>>>> It will separate the two layers, and easy to replace with the new
>>>>>>> implemenation in future.
>>>>>>>
>>>>>>
>>>>>> Oops forgot to attach the patch.
>>>>>> Please find the patch attached.
>>>>>>
>>>>>> -- Thanks, Ashesh
>>>>>>
>>>>>>>
>>>>>>>> 0003:
>>>>>>>>   Code that extracts, wrap with tests and replace ACI Tree
>>>>>>>> invocations.
>>>>>>>>
>>>>>>> There are many small cases left in the patches.
>>>>>>> Hence - I would like to know the TODO list created by you.
>>>>>>>
>>>>>>> e.g. When we remove any of the object from the database server,
>>>>>>> we're not yet removing the respective node from the new implementation, 
>>>>>>> and
>>>>>>> its children.
>>>>>>>
>>>>>>>>
>>>>>>>>   We start creating new pattern for the location of Javascript
>>>>>>>> files and their structure.
>>>>>>>>
>>>>>>> I would not like to see that changes in this patch.
>>>>>>> I would like us to come up with the actual design about the hot
>>>>>>> pluggability before going in this direction.
>>>>>>>
>>>>>>>>   Create patterns for creation of dialogs (backup and restore)
>>>>>>>>
>>>>>>> It's better - we don't change the directory structure at the moment.
>>>>>>>
>>>>>>> I am not against dividing the big javascript files in small chunks,
>>>>>>> but - I would like us to discuss first about the hot plugins design 
>>>>>>> first.
>>>>>>>
>>>>>>> -- Thanks, Ashesh
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>> Joao
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fri, Apr 27, 2018 at 5:34 AM Ashesh Vashi <
>>>>>>>> ashesh.va...@enterprisedb.com> wrote:
>>>>>>>>
>>>>>>>>> I have quite a few comments for the patch.
>>>>>>>>> I will send them soon.
>>>>>>>>>
>>>>>>>>> On Fri, Apr 27, 2018, 14:45 Dave Page <dp...@pgadmin.org> wrote:
>>>>>>>>>
>>>>>>>>>> How is your work on this going Ashesh? Will you be committing
>>>>>>>>>> today?
>>>>>>>>>>
>>>>>>>>>> On Wed, Apr 25, 2018 at 8:52 AM, Dave Page <dp...@pgadmin.org>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> Ashesh; you had agreed to work on this early this week. Please
>>>>>>>>>>> ensure you do so today.
>>>>>>>>>>>
>>>>>>>>>>> Thanks.
>>>>>>>>>>>
>>>>>>>>>>> On Tue, Apr 24, 2018 at 8:13 PM, Joao De Almeida Pereira <
>>>>>>>>>>> jdealmeidapere...@pivotal.io> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi Hackers,
>>>>>>>>>>>>
>>>>>>>>>>>> Can someone review and merge this patch?
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks
>>>>>>>>>>>> Joao
>>>>>>>>>>>>
>>>>>>>>>>>> On Wed, Apr 18, 2018 at 10:23 AM Joao De Almeida Pereira <
>>>>>>>>>>>> jdealmeidapere...@pivotal.io> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi Hackers,
>>>>>>>>>>>>> Any other comment about this patch?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>> Joao
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Tue, Apr 10, 2018 at 12:00 PM Joao De Almeida Pereira <
>>>>>>>>>>>>> jdealmeidapere...@pivotal.io> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hello Khushboo
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Mon, Apr 9, 2018 at 1:59 AM Khushboo Vashi <
>>>>>>>>>>>>>> khushboo.va...@enterprisedb.com> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi Joao,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I have reviewed your patch and have some suggestions.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Sat, Apr 7, 2018 at 12:43 AM, Joao De Almeida Pereira <
>>>>>>>>>>>>>>> jdealmeidapere...@pivotal.io> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Hello Murtuza/Dave,
>>>>>>>>>>>>>>>> Yes now the extracted functions are spread into different
>>>>>>>>>>>>>>>> files. The intent would be to make the files as small as 
>>>>>>>>>>>>>>>> possible, and also
>>>>>>>>>>>>>>>> to group and name them in a way that would be easy to 
>>>>>>>>>>>>>>>> understand what each
>>>>>>>>>>>>>>>> file is doing without the need of opening it.
>>>>>>>>>>>>>>>> As a example:
>>>>>>>>>>>>>>>> static/js/backup will contain all the backup related
>>>>>>>>>>>>>>>> functionality inside of this folder we can see the file:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> menu_utils.js At this moment in time we decided to group
>>>>>>>>>>>>>>>> all the functions that are related to the menu, but we can 
>>>>>>>>>>>>>>>> split that also
>>>>>>>>>>>>>>>> if we believe it is easier to see.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> It's really very good to see the separated code for backup
>>>>>>>>>>>>>>> module. As we have done for backup, we would like do it for 
>>>>>>>>>>>>>>> other PG
>>>>>>>>>>>>>>> utilities like restore, maintenance etc.
>>>>>>>>>>>>>>> Considering this, we should separate the code in a way that
>>>>>>>>>>>>>>> some of the common functionalities can be used for other 
>>>>>>>>>>>>>>> modules  like menu
>>>>>>>>>>>>>>> (as you have mentioned above), dialogue factory etc.
>>>>>>>>>>>>>>> Also, I think these functionalities should be in their
>>>>>>>>>>>>>>> respective static folder instead of pgadmin/static.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> About the location of the files. The move of the files to
>>>>>>>>>>>>>> pgadmin/static/js was made on purpose in order to clearly 
>>>>>>>>>>>>>> separate
>>>>>>>>>>>>>> Javascript from python code.
>>>>>>>>>>>>>> The rational behind it was
>>>>>>>>>>>>>> - Create a clear separation between the backend and frontend
>>>>>>>>>>>>>> - Having Javascript code concentrated in a single place,
>>>>>>>>>>>>>> hopefully, will encourage to developers to look for a 
>>>>>>>>>>>>>> functionality, that
>>>>>>>>>>>>>> is already implemented in another modules, because they are 
>>>>>>>>>>>>>> right there.
>>>>>>>>>>>>>> (When we started this journey we realized that the 'nodes' have 
>>>>>>>>>>>>>> a big
>>>>>>>>>>>>>> groups of code that could be shared, but because the Javascript 
>>>>>>>>>>>>>> is spread
>>>>>>>>>>>>>> everywhere it is much harder to look for it)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> There are some drawbacks of this separation:
>>>>>>>>>>>>>> - When creating a new module we will need to put the
>>>>>>>>>>>>>> javascript in a separate location from the backend code
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> static/js/datagrid folder contains all the datagrid
>>>>>>>>>>>>>>>> related functionality
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Same as backup module,  this should be in it's respective
>>>>>>>>>>>>>>> static/js folder.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Inside of the folder we can see the files:
>>>>>>>>>>>>>>>> get_panel_title.js is responsible for retrieving the name
>>>>>>>>>>>>>>>> of the panel
>>>>>>>>>>>>>>>> show_data.js is responsible for showing the datagrid
>>>>>>>>>>>>>>>> show_query_tool.js is responsible for showing the query
>>>>>>>>>>>>>>>> tool
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Does this structure make sense?
>>>>>>>>>>>>>>>> Can you give an example of a comment that you think is
>>>>>>>>>>>>>>>> missing and that could help?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> As a personal note, unless the algorithm is very obscure or
>>>>>>>>>>>>>>>> very complicated, I believe that if the code needs comments it 
>>>>>>>>>>>>>>>> is a signal
>>>>>>>>>>>>>>>> that something needs to change in terms of naming, structure 
>>>>>>>>>>>>>>>> of the part in
>>>>>>>>>>>>>>>> question. This being said, I am open to add some comments that 
>>>>>>>>>>>>>>>> might help
>>>>>>>>>>>>>>>> people.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> You are right, with the help of naming convention and
>>>>>>>>>>>>>>> structure of the code, any one can get the idea about the code. 
>>>>>>>>>>>>>>> But it is
>>>>>>>>>>>>>>> very useful to understand the code
>>>>>>>>>>>>>>> very easily with the proper comments especially when there
>>>>>>>>>>>>>>> are multiple developers working on a single project.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I found some of the places where it would be great to have
>>>>>>>>>>>>>>> comments.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> - treeMenu: new tree.Tree()  in a browser.js
>>>>>>>>>>>>>>> - tree.js  (especially Tree class)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> About the comment point I need a more clear understanding on
>>>>>>>>>>>>>> what kind of comments you are looking for. Because when you read 
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>> function names you understand the intent, what they are doing. 
>>>>>>>>>>>>>> The
>>>>>>>>>>>>>> parameters also explain what you need to pass into them.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> If what you are looking for in these comments is the
>>>>>>>>>>>>>> reasoning being the change itself, then that should be present 
>>>>>>>>>>>>>> in the
>>>>>>>>>>>>>> commit message. Specially because this is going to be a very big 
>>>>>>>>>>>>>> patch with
>>>>>>>>>>>>>> a very big number of changes.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>>>> Joao
>>>>>>>>>>>>>>>> ​
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>> Khushboo
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Fri, Apr 6, 2018 at 4:48 AM Murtuza Zabuawala <
>>>>>>>>>>>>>>>> murtuza.zabuaw...@enterprisedb.com> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hi Joao,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Patch looks good and working as expected.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I also agree with Dave, Can we please add some comments in
>>>>>>>>>>>>>>>>> each file which can help us to understand the flow, I'm 
>>>>>>>>>>>>>>>>> saying because now
>>>>>>>>>>>>>>>>> the code is segregated in so many separate files it will be 
>>>>>>>>>>>>>>>>> hard to keep
>>>>>>>>>>>>>>>>> track of the flow from one file to another when debugging.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> Regards,
>>>>>>>>>>>>>>>>> Murtuza Zabuawala
>>>>>>>>>>>>>>>>> EnterpriseDB: http://www.enterprisedb.com
>>>>>>>>>>>>>>>>> The Enterprise PostgreSQL Company
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Thu, Apr 5, 2018 at 7:08 PM, Joao De Almeida Pereira <
>>>>>>>>>>>>>>>>> jdealmeidapere...@pivotal.io> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Hi Khushboo,
>>>>>>>>>>>>>>>>>> Attached you can find both patches rebased
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Thu, Apr 5, 2018 at 6:31 AM Khushboo Vashi <
>>>>>>>>>>>>>>>>>> khushboo.va...@enterprisedb.com> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Hi Joao,
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Can you please rebase the second patch?
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>> Khushboo
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Tue, Apr 3, 2018 at 12:15 AM, Joao De Almeida Pereira
>>>>>>>>>>>>>>>>>>> <jdealmeidapere...@pivotal.io> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Hi Hackers,
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Attached you can find the patch that will start to
>>>>>>>>>>>>>>>>>>>> decouple pgAdmin from ACITree library.
>>>>>>>>>>>>>>>>>>>> This patch is intended to be merged after 3.0, because
>>>>>>>>>>>>>>>>>>>> we do not want to cause any entropy or delay the release, 
>>>>>>>>>>>>>>>>>>>> but we want to
>>>>>>>>>>>>>>>>>>>> start the discussion and show some code.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> This job that we started is a massive tech debt chore
>>>>>>>>>>>>>>>>>>>> that will take some time to finalize and we would love the 
>>>>>>>>>>>>>>>>>>>> help of the
>>>>>>>>>>>>>>>>>>>> community to do it.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> *Summary of the patch:*
>>>>>>>>>>>>>>>>>>>> 0001 patch:
>>>>>>>>>>>>>>>>>>>>  - Creates a new tree that will allow us to create a
>>>>>>>>>>>>>>>>>>>> separation between the application and ACI Tree
>>>>>>>>>>>>>>>>>>>>  - Creates a Fake Tree (Test double, for reference on
>>>>>>>>>>>>>>>>>>>> the available test doubles: https://martinfowler.
>>>>>>>>>>>>>>>>>>>> com/bliki/TestDouble.html) that can be used to inplace
>>>>>>>>>>>>>>>>>>>> to replace the ACITree and also encapsulate the new tree 
>>>>>>>>>>>>>>>>>>>> behavior on our
>>>>>>>>>>>>>>>>>>>> tests
>>>>>>>>>>>>>>>>>>>>  - Adds tests for all the tree functionalities
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 0002 patch:
>>>>>>>>>>>>>>>>>>>>  - Extracts, refactors, adds tests and remove
>>>>>>>>>>>>>>>>>>>> dependency from ACI Tree on:
>>>>>>>>>>>>>>>>>>>> - getTreeNodeHierarchy
>>>>>>>>>>>>>>>>>>>> - on backup.js: menu_enabled, menu_enabled_server,
>>>>>>>>>>>>>>>>>>>> start_backup_global_server, backup_objects
>>>>>>>>>>>>>>>>>>>> - on datagrid.js: show_data_grid, get_panel_title,
>>>>>>>>>>>>>>>>>>>> show_query_tool
>>>>>>>>>>>>>>>>>>>> - Start using sprintf-js as Underscore.String is
>>>>>>>>>>>>>>>>>>>> deprecating sprintf function
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> This patch represents only 10 calls to ACITree.itemData
>>>>>>>>>>>>>>>>>>>> out of 176 that are spread around our code
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> *In Depth look on the process behind the patch:*
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> We started writing this patch with the idea that we
>>>>>>>>>>>>>>>>>>>> need to decouple pgAdmin4 from ACITree, because ACITree is 
>>>>>>>>>>>>>>>>>>>> no longer
>>>>>>>>>>>>>>>>>>>> supported, the documentation is non existent and ACITree 
>>>>>>>>>>>>>>>>>>>> is no longer being
>>>>>>>>>>>>>>>>>>>> actively developed.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Our process:
>>>>>>>>>>>>>>>>>>>> 1. We "randomly" selected a function that is part of
>>>>>>>>>>>>>>>>>>>> the ACITree. From this point we decided to replace that 
>>>>>>>>>>>>>>>>>>>> function with our
>>>>>>>>>>>>>>>>>>>> own version. The function that we choose was "itemData".
>>>>>>>>>>>>>>>>>>>> The function gives us all the "data" that a specific
>>>>>>>>>>>>>>>>>>>> node of the tree find.
>>>>>>>>>>>>>>>>>>>> Given in order to replace the tree we would need to
>>>>>>>>>>>>>>>>>>>> have a function that would give us the same information. 
>>>>>>>>>>>>>>>>>>>> We had 2 options:
>>>>>>>>>>>>>>>>>>>>   a) Create a tree with a function called itemData
>>>>>>>>>>>>>>>>>>>> Pros:
>>>>>>>>>>>>>>>>>>>>  - At first view this was the simpler solution
>>>>>>>>>>>>>>>>>>>>  - Would keep the status quo
>>>>>>>>>>>>>>>>>>>> Cons:
>>>>>>>>>>>>>>>>>>>>  - Not a OOP approach
>>>>>>>>>>>>>>>>>>>>  - Not very flexible
>>>>>>>>>>>>>>>>>>>>   b) Create a tree that would return a node given an ID
>>>>>>>>>>>>>>>>>>>> and then the node would be responsible for giving it's 
>>>>>>>>>>>>>>>>>>>> data.
>>>>>>>>>>>>>>>>>>>> Pros:
>>>>>>>>>>>>>>>>>>>>  - OOP Approach
>>>>>>>>>>>>>>>>>>>>  - More flexible and we do not need to bring the tree
>>>>>>>>>>>>>>>>>>>> around, just a node
>>>>>>>>>>>>>>>>>>>> Cons:
>>>>>>>>>>>>>>>>>>>>  - Break the current status quo
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Given these 2 options we decided to go for a more OOP
>>>>>>>>>>>>>>>>>>>> approach creating a Tree and a TreeNode classes, that in 
>>>>>>>>>>>>>>>>>>>> the future will be
>>>>>>>>>>>>>>>>>>>> renamed to ACITreeWrapper and TreeNode.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 2. After we decided on the starting point we searched
>>>>>>>>>>>>>>>>>>>> for occurrences of the function "itemData" and we found 
>>>>>>>>>>>>>>>>>>>> out that there were
>>>>>>>>>>>>>>>>>>>> 303 occurrences of "itemData" in the code and roughly 176 
>>>>>>>>>>>>>>>>>>>> calls to the
>>>>>>>>>>>>>>>>>>>> function itself (some of the hits were variable names).
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 3. We selected the first file on the search and found
>>>>>>>>>>>>>>>>>>>> the function that was responsible for calling the itemData 
>>>>>>>>>>>>>>>>>>>> function.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 4. Extracted the function to a separate file
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 5. Wrap this function with tests
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 6. Refactor the function to ES6, give more declarative
>>>>>>>>>>>>>>>>>>>> names to variables and break the functions into smaller 
>>>>>>>>>>>>>>>>>>>> chunks
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 7. When all the tests were passing we replaced ACITree
>>>>>>>>>>>>>>>>>>>> with our Tree
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 8. We ensured that all tests were passing
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 9. Remove function from the original file and use the
>>>>>>>>>>>>>>>>>>>> new function
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 10. Ensure everything still works
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 11. Find the next function and execute from step 4
>>>>>>>>>>>>>>>>>>>> until all the functions are replaced, refactored and 
>>>>>>>>>>>>>>>>>>>> tested.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> As you can see by the process this is a pretty huge
>>>>>>>>>>>>>>>>>>>> undertake, because of the number of calls to the function. 
>>>>>>>>>>>>>>>>>>>> This is just the
>>>>>>>>>>>>>>>>>>>> first step on the direction of completely isolating the 
>>>>>>>>>>>>>>>>>>>> ACITree so that we
>>>>>>>>>>>>>>>>>>>> can solve the problem with a large number of elements on 
>>>>>>>>>>>>>>>>>>>> the tree.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> *What is on our radar that we need to address:*
>>>>>>>>>>>>>>>>>>>>  - Finish the complete decoupling of the ACITree
>>>>>>>>>>>>>>>>>>>>  - Performance of the current tree implementation
>>>>>>>>>>>>>>>>>>>>  - Tweak the naming of the Tree class to explicitly
>>>>>>>>>>>>>>>>>>>> tell us this is to use only with ACITree.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>>>>>>>> Joao
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Dave Page
>>>>>>>>>>> Blog: http://pgsnake.blogspot.com
>>>>>>>>>>> Twitter: @pgsnake
>>>>>>>>>>>
>>>>>>>>>>> EnterpriseDB UK: http://www.enterprisedb.com
>>>>>>>>>>> The Enterprise PostgreSQL Company
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Dave Page
>>>>>>>>>> Blog: http://pgsnake.blogspot.com
>>>>>>>>>> Twitter: @pgsnake
>>>>>>>>>>
>>>>>>>>>> EnterpriseDB UK: http://www.enterprisedb.com
>>>>>>>>>> The Enterprise PostgreSQL Company
>>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> Dave Page
>>> Blog: http://pgsnake.blogspot.com
>>> Twitter: @pgsnake
>>>
>>> EnterpriseDB UK: http://www.enterprisedb.com
>>> The Enterprise PostgreSQL Company
>>>
>>
>>

Reply via email to