|Here's my wish list for things that I'd like to be easy to do for sharing hacks and information about hacks. What would you like to have?|
Publish a hack. I think, "hey, how about this?", I write a hack, I want to be able to publish it with a push of a button.
Download and use a hack. I see someone has published a hack, I want to be able to try it instantly.
Fix conflicts. Bureaucratic software tries to prevent libraries from conflicting with walls, rules, isolating systems, etc. The hacking approach is to make it easy to fix a conflict. So if I see that hacks A and B aren't working together, I want to be able to easily publish an A2 or B2 or hack C that fixes the problem.
See how a hack affects other hacks. For example, an automated example runner would take the input
... and show the result
(/ 1 2)
(obj a 1)
... in some other system or with some hack applied, I may get some other results
#hash((a . 1))
... this difference may be good or bad. If I'm thinking of trying some hacks A and B, I'll want to see if they'll have an effect on some hack C that I'm already using, and if C does work differently, decide for myself whether that change is something I want or not.
... an automated example runner is similar to unit testing and shares much of the same technology: automatically running code, displaying the result, setup and tear down, etc. A difference is that unit testing is prescriptive (a unit test says what the result is supposed to be) while example running is descriptive.
Share information about hack dependencies and conflicts. It may be well known that hack A0 needs hack B0 and C0
I may also know that A0 also works with B1 and doesn't need C in that case, or that A0 also works with hack D9 and E2 without B or C.
(needs A0 (B0 C0))
I want to be able to share my knowledge, even if I'm not the original author or publisher of these hacks.
(needs A0 (or (B0 C0)
Choose hacks sets. Suppose B1 conflicts with B0 and E2 conflicts with B1, but the other hacks don't conflict. Now I have a choice: if I want A0 with the B functionality and the D functionality, I can load (A0 B0 C0 D9 E2). Or, if I only care about A0 with the B functionality, I could load just (A0 B1) instead. I want to be able to see what my options are and to be able to easily choose one.
Share examples of using a hack. An example is a easy and powerful to show how a hack may be used, to help document a hack, or to show a problem with a hack. If I come up with an example, I want to be able to share that easily.
Share the (automated example runner) results of running an example in my environment. Suppose I see an example you've shared, and I try it, but -- guess what -- it doesn't work with my operating system, or in my version of Arc, or with the other hacks I'm using, or produces something different or even better. This is valuable information, and I'd like to be able to share it easily.
Share information about related hacks. Suppose I write a hack, and someone comes up with a new and improved version, I'd like to have a "see also" section that tells me and everyone about that related hack.
Share documentation for a hack. If someone has written a hack but hasn't made documentation for it, and I feel moved to write some documentation, I'd like to be rewarded by having it easy for me to push a button and share that documentation.
Share comments about a hack.
See all the information about a hack. If I'm interested in a hack, I'd like to see all the comments, documentation, related hacks, examples, dependencies, and conflicts that people have shared about that hack.
Have a system for rearranging or changing the presentation of information about a hack. With all this information that can be shared about a hack, popular hacks may end up with a cacophony of information, so I or someone else may want to rearrange the information, putting the most useful information at the top of the page, for example. Like a Wiki, anyone can change the presentation of the information, and we use regular Wiki social conventions to manage it. Unlike a Wiki in which the atoms (the indivisible parts) of editing is individual characters, the atoms would be the chunks of information supplied by people as described above.