I'm looking to settle the namespace for a project (with the working
title 'hump', verb not noun). Tentative description: 

*::Hump - Perl project manager and command line valet

I should note, before going further, that I am biased in favor of test
driven development (TDD). I prefer Git as VCS. I develop on Linux with
the GNOME desktop. Although I use CLI tools extensively, I see merit in
well-written GUI tools, too. 

The project I intend is related to IDE but with a different emphasis. I
don't intend to write another editor; at this level of abstraction, I
consider each file to be a unit. Rather, I'm concerned with overall
project structure. Partially, this is related to build automation. 

Please note, before I go further, that I don't intend to develop this
project by the waterfall model. Requirements may change as development
progresses. Here is only a starting point. 

*    Problem:

I see at least six different contexts in which a project may exist: 

* Local development: Files (tests, modules, scripts, and others) are
edited; tests are executed; changes are recorded in some VCS. 

* Local deployment: The project is deployed on localhost as if deployed
by user. For various reasons, there may be some departures. 

* Remote development: In the case of a project designed to run on some
remotehost, files are uploaded and executed remotely. Logs and other
result files may be downloaded to localhost. Remote execution may be
normal or modified. Structure depends on server requirements and account
permissions. 

* Remote VCS repository: Project is maintained on, e.g., GitHub.
Developers may pull, fork, push, etc. I expect that many developers will
only be interested superficially. All have certain structural
expectations. 

* CPAN tarball: Project in installable state. Must contain all files
needed by user. Structure must be highly predictable. 

* User deployment: User installs from tarball, either locally or
remotely. Installation should be automatic by default but permit a
degree of customization. 

If every project ran directly out of the same tree in which it was
developed then existing IDEs would be sufficient. But 'hump' is not a
fine-detail IDE; it's a tool to move a project across contexts. 

*    Example: Tests: 

There may be unit tests, integration tests, author tests, user tests,
good tests, bad tests. Some tests do not pass now but will later;
meanwhile, developer does not want to run them as part of his regression
suite. Some tests examine the execution environment and bail out of
further testing if prerequisites are not installed. Some tests are
useful during development but are strictly optional for user. Some tests
are failed testing efforts; developer may want to keep them around. They
may later become good tests or may stay in the junk box. 

For each of the contexts I mention above, tests must be organized
differently. Broadly, localhost development contains all tests while
other contexts contain subsets. Remotehost development context includes
tests that are only meaningful as they interact with the remote server
and perhaps the network and there, these tests run right along with the
others; while localhost cannot usefully run them as part of a regression
suite inside the inner test-edit-test development loop. In VCS repo
context, good tests and correct-but-failing tests should be kept
distinct from tests that fail because they're badly written but may be
rewritten (to pass or fail depending on the item tested). Tests required
to assure correct installation and perhaps some optional tests should be
packaged in the CPAN tarball, but must be kept clearly distinct from one
another. And most users will not want to permanently install any tests;
while others will want to keep them on hand. 

Mindful of brevity, I will omit further examples. I only make the points
that a project may contain hundreds of files in localhost development
working tree; and that the trees in other contexts cannot be obtained
merely by pruning. Sometimes, the overall structure must be altered.
Even in the case of simple pruning, the rules for which files and
folders are to be removed are complex. 

*    Tree management: 

Let us turn to *how* the tree is copied from one context to another.
Many tools share out this work. Various CLI tools may be used to make
quick local installations. Git contains actions to push to remote repo;
untracked files will not push. Perhaps rsync is used to transfer files
from localhost to remotehost development. Module::Build, guided by
MANIFEST, controls creation of the CPAN tarball; as well as testing and
installation by user. 

There's an issue in coordinating these trees in different contexts. It
can be difficult simply to remember the command line incantation needed
to shell into a given host or to update MANIFEST. 

*    Project role: 

To sum up, 'hump' is intended to streamline the process of project
development, particularly by managing the various working trees. Some
contemplated features: 

* Maintenance of metadata for any file or folder, including: 
**    contexts in which it should exist at all
**    its proper location in each context
**    author's notes

* Shortcuts to tools that transfer files from one context to another. 
* A library including both file templates and tree templates. 
* A method of deconstructing an existing project into templates. 
* Flexible, clear methods for customizing all features. 
* Most "heavy lifting" done by invoking existing, well-tested tools. 

I imagine a GUI tool with multiple panes. On one row, several panes
resemble Nautilus panes, displaying file trees, one pane per context.
Connections among panes might be shown; trees might be compared. On
another row, a large pane emulates a Terminal, while to its right are
several customizable buttons for common tasks. It should be possible to
preview at least some command line actions before invoking them. 

Some features of this tool might be implemented as CLI commands. I don't
want to displace tools such as Module::Build; but there may be a role
for a small deliverable to assist user in customizing his installation. 

*    RFC: 

My first need here and the primary goal of this RFC is simply to
namespace the project. My feeling is that it's unwise to change a
project's name after significant development on it. While I'm sure many
will want to comment on the proposed feature set, I'd like to ask that
such discussion confine itself to defining the role of the project; so
may its proper name be discovered. 

Thank you, 

--
-Xiong






Reply via email to