How We Can Have Nice Things

Richard Gaskin ambassador at fourthworld.com
Thu Sep 10 21:40:35 EDT 2015


Yesterday I wrote that I'd report back on my meeting with the core team 
regarding community contributions on binary LiveCode stack files.  Many 
good things came out of that and other recent meetings, but in the 
interest of time let me focus on that one task here:


Why It's Been Difficult To Have Nice Things
-------------------------------------------
To recap the story thus far, one of the things we enjoy about LiveCode 
is that it give us the freedom to make our own decisions about how (or 
even if) we separate code, data, and content.  LiveCode stack files are 
enormously flexible, and can be used for any of those three, or any 
combination of them, as we choose for the task at hand.

Part of what keeps us choosing LiveCode is that most alternatives treat 
UIs as an afterthought, usually completely separate from the core 
language and almost always in files separated from code.

This has resulted in a world where other people's version control 
systems only account for those common ways of working, unable to 
anticipate something as uniquely valuable as LiveCode.

With LiveCode being open source we need to bridge any gaps between the 
tools that are available and the work we need to do.



Most Things Can Be Made Very Nice Right Now
-------------------------------------------
Fortunately, as Monte pointed out this afternoon, most of what we need 
to do is well supported by Github already, allowing the core team and 
the community to collaborate on everything in the engine and the docs, 
and most of the libraries in the IDE (thanks for assembling those stats, 
Monte):
<http://lists.runrev.com/pipermail/use-livecode/2015-September/218670.html>

For the remainder, most of what we need to do has been well covered by 
what we affectionately call the FIX Protocol:  if a community member can 
fix an IDE bug and provide the fixed handler in the bug report, just 
changing the report's summary to be prefixed with "FIX:" allows it to be 
identified easily, and since the solution is already provided it can 
usually be incorporated quickly.  So far I believe 100% of FIX 
contributions submitted through the bug DB have been folded into the 
product (thanks to Mike Kerner, Mark Wieder, and others who've provided 
those).

Between these two mechanisms (Github and the "FIX" protocol) I agree 
with Monte's assessment that more than 90% of what comprises the 
LiveCode product is readily available for community contributions right now.



The Handful of Things That Can Be Made Nicer
---------------------------------------------
This still leaves us with a relatively small but sometimes very useful 
subset of enhancements not covered by either Github or simple FIXes in 
the bug DB.

The one that started this thread was Charles Warwick's generous 
contribution of a nice Script Editor enhancement to add filtering to the 
handler list.

The core team recognized the value in that right away, and added it to 
the Development branch for v8.0.

But since work on IDE UI elements must be done manually, given the long 
queue of other things we want them to do it isn't practical for them to 
do such manual work twice so it can also be available in v7.x.

These are fairly rare occurrences, but it would be nice if we had a way 
for the community to make such enhancements and have them available 
right in the product so everyone can enjoy them in later 7.x releases.

And that's where we come in:



How We Can Have Nice Things
---------------------------
As dev lead Mark Waddingham noted this morning, the main concern with 
accepting complex stack files like the Script Editor from outside 
sources is that the company has a responsibility to ensure fitness and 
security for all LiveCode users.   And being binary files, there's 
nothing in Github to support the key steps needed for all such 
contributions:

- IDENTIFY specific changes between a master stack file
   and a modified one.

- REVIEW those changes to ensure fitness, compatibility,
   and security.

- MERGE those changes into the master, if for some reason the
   master has been altered since the changes were submitted.

That last step, Merge, would be the most complicated, but thankfully it 
may not be needed at all if we used a sort of check-in/check-out 
procedure.  Rather than build some system for that just for the few 
cases it would be needed, since we're talking about an older branch than 
Development most of the time it's not undergoing internal changes 
anyway, so it should be easy to arrange to communicate when you want to 
change a file, and the team can simply do something else for a couple 
hours until you're done and send the modified version back to Github.

That leaves us to focus on the first two tasks: How do we identify 
specific changes between two stack files, and make it easy to review 
those changes?

If we can come up with a sufficiently useful tool to help with that, the 
team is quite willing to consider accepting some changes like Charles' 
in modified stack files.

I think it would be helpful to keep in mind that we don't want to go hog 
wild, rewriting tons of objects and overloading the team with these 
types of out-of-process change requests.  They do have a lot on their 
plates that their already committed to, esp. the remainder of the Road 
Map, so where we can let's help those current efforts and keep other 
additions to a minimum.

I also think it would be helpful to consider simply submitting a feature 
request to the bug DB whenever practical, since that allows the team to 
make an implementation in the Development branch which integrates well 
with other long-term goals.

But for things like Charles' handler filter, we can move forward if we 
can not only make a modified version of the last RC build of 7.1's 
revscripteditor.rev file, but first put together a tool to allow the 
team to clearly see where it's different.


Making Nice Things
------------------
FWIW, some time ago I make a simple tool that copies all object 
properties of a given stack file, including scripts, into an array, and 
does the same for a modified copy of that stack.  Comparing the keys and 
values in the array yields a list of differences, with a two-field 
display below the list to show what those values are.  For lengthy 
values like scripts it also includes a very rudimentary DIFF to quickly 
highlight differences.

That said, as it is the tool is close to useless for any but the 
simplest of stacks.  Adding a single object results in more than a 
hundred entries, since every property is a delta.  Comparing Charles' 
stack with the shipping one showed more than 5,400 differences.  No one 
wants to wade through that.

Before we consider whether it makes sense to use an array-based 
comparison method and clean up the display with a simpler view of 
deltas, I know some of you (esp Mark Wieder and Monte) have already come 
up with nifty tools to translate stack files to and from XML or other 
formats that may lend themselves to efficient review.

If we as a community want to see things like Charles' handler filter 
added to the pre-Development branch IDE, let's discuss what tools we may 
have available and how we can put together one good solution for 
efficient review of stack file changes.

Personally, I'm happy to contribute to this effort if shared under GPL 
or GPL-compatible license, and I think such a tool would be useful for a 
great many other things beyond the small subset of occasional IDE 
enhancements that don't fit into other workflows.

Anyone here interested in contributing to such a tool?

-- 
  Richard Gaskin
  LiveCode Community Manager
  richard at livecode.org




More information about the use-livecode mailing list