This long because it needs to be.
On Nov 19, 2009, at 3:15 PM, simon mcmanus wrote:
> Michael Mahemoff and I have been looking at integrating the latest
> TiddlyWeb updates into our projects. During this time, we've been
> recording some of the things we'd like to see as TiddlyWeb gets to
> prime time. We feel that these things should be goals for all
> stakeholders in the project to work towards, i.e. we are not
> especially interested in the artifacts themselves, but the
> possibility that the overall framework is mature enough that they
> can easily be created.
I'm glad you are making these notes.
> - A canonical project that will be compatible with any new stable
> release of TiddlyWeb/TiddlyWebWiki for the next 12 months. In order
> to be useful and genuinely prove the framework, this should be a
> realistic, albeit small, project; not a contrived abstraction of a
> project.
As I've pointed out elsewhere there aren't any products that exist
yet, out on the public as installable packages for users that make use
of TiddlyWebWiki so it is hard to "prove the framework" without first
making the things to exercise it. And it is hard to making something
canonical when there's insufficient trailblazing that's been
accomplished to demonstrate or discover best practices. Whether you
like it or not Simon and Mike are the trailblazers and get all the
suffering and responsibilities that come with such a role.
There has not yet been _any_ stable releases of TiddlyWeb and
TiddlyWebWiki. The people who are trailblazing are discovering bugs,
misfeatures and missing features quite regularly.
So until we've made it past that point there's not going to be any
calendar for a 12 month stable demo project.
> - A short tutorial - screencast and article - which shows how to get
> started with TiddlyWeb, building a small, useful, application in a
> few minutes. We believe this goal is achievable given the rich UI
> already provided by TiddlyWiki and the universe of TiddlyWiki and
> TiddlyWeb plugins already available; the challenge is for all of us
> TiddlyWeb developers and pioneers to get the framework to a point
> where it can be done.
I think we already can, I build new useful applications with TiddlyWeb
pretty much every week, sometimes every day. Admittedly these are
mostly throw aways for fun to exercise some aspect of the system, but
they are quick to generate, easy to build, etc.
I've written quite a number of tutorials, either on my blog (
http://cdent.tumblr.com/
) or on this mailing list. I suspect these are too disjoint: Not
enough a-z. It would help me if you could be more detailed about what
a correct, in your terms, tutorial would entail.
More importantly, for me as the main person trying to get us to a
"stable release of TiddlyWeb/TiddlyWebWiki" is knowing what's missing
"to get the framework to a point where it can be done". I do not
consider what's missing to be well documented. There's hearsay, but
that's insufficient to be actionable.
> - A "project generator" script, similar to that provided by Django
> and Rails, which creates a new blank project, with appropriate
> comments in config and setup files, as appropriate. It should
> provide support for development right away and packaging the project
> for deployment, with placeholder configs for dev/test/production
> environments.
If you can provide me with the list of files and their contents that
you think makes up a "blank project" I can make you a project
generator script.
However there is something we need to get clear, something that I
think has been a cause of misunderstanding thus far: However any other
framework might do things, TiddlyWeb makes a big distinction between
deployment and installation.
Installation is getting the software and related common bits installed
on the server. This involves packaging and is closely tied to what is
found in the setup.py file associated with a python package.
Deployment, as far as I can tell is an insufficiently defined term. I
think it is being used to mean "get a version of my thing running on
my target machine(s), with a proper configuration and all the expected
data". Is that correct?
If that is correct then we need to work on being sure that we all know
what "my thing" means.
Let's take a somewhat imaginary use of TiddlyDocs. I'm a user out
there in the world. I've decided that I'm going to be using TiddlyDocs
to do collaborative editing of a serialized follow your own adventure
fiction story. We call ourselves the xallywags and are going to host
this stuff, in public on
xallywag.example.com. Meanwhile, my
girlfriend, for whom I am technical support is going to use TiddlyDocs
for scriptwriting. She doesn't like me very much and wants to make
sure her tiddlers don't get mixed in with mine, so she's going to run
on a different instance, but we'll be on the same server. My mom will
be on there too, she's just using TiddlyWebWiki.
I have a server which has python on it and Apache, so I've got that
part covered already. Looking at the above I know I need to install
TiddlyWebWiki and TiddlyDocs so I do that:
pip install tiddlywebwiki tiddlydocs
Assuming those guys have been package correctly and registered with
PyPI, all the necessary stuff, including tiddlyweb itself will be
installed. If for some reason I'm not on the open network I can
install a pip bundle which includes all the dependences.
Okay, with the above done, I've now got the software installed, but
that's pretty much it. I need to deploy my specific applications of
the software. This is an entirely different beast. I've got several
options.
Since I'm just a guy doing some stuff, the easiest thing to do is to
just make the game go and do it mostly by hand:
* tiddlydocs <dirname> # tiddlydocs script comes with the tiddlydocs
python package
* configure my apache virtual host setup to support xallywags
* do whatever extra user, bag, etc creation I might need
As time passes I hear that there's a new tiddlydocs release so I:
* pip install -U tiddlydocs
* cd <dirname>; twanager update # get the latest copies for the
required tiddlers
For applications like tiddlydocs and tiddlyguv there are of course
going to be many situations where being "just a guy" is not going to
fit. In those situations you want an easy to replicate deployment, one
that captures the special requirements of the particular installation
that is being made. For that we need to take advantage of two things:
* scripting and similar tools that are purpose built for automating
repetitive tasks
* clever use and management of tiddlywebconfig.py
The important distinction here is that the thing which make any
particular instance of TiddlyGuv special are the things which get
"deployed". As far as possible TiddlyGuv itself should just install up
to the point where there is a "special" part. Then a special case for
the special piece can be handled.
I suspect that much of the confusion or bones of contention we are
encountering as we explore TiddlyWeb verticals is a difference of
opinion on where the boundary between "special" and "the framework"
lies. The TiddlyGuv and TiddlyDocs people think that TiddlyWeb is the
framework. I disagree: TiddlyGuv and TiddlyDocs (especially) are
themselves frameworks which people might like to install and then
deploy in custom ways. Those applications use TiddlyWeb and
TiddlyWebWiki to get their jobs done.
Why do I think of it this way? Because I want to maximize the extent
to which people, random people we don't know, can use TiddlyDocs,
TiddlyGuv, or anything else built with TiddlyWeb.
So MyDocs is an application of TiddlyDocs and it is the thing that
needs to be deployed on BT servers. A step in its deployment process
is installing TiddlyDocs (which installed TiddlyWebWiki, which
installs TiddlyWeb). MyDocs has particular requirements that can be
codified in configuration files and various bits of special cases.
Ideally those special cases are limited. Whatever they may be those
special cases are managed in test and deployment.
This model differs quite a lot from Rails. In Rails you install Rails,
you generate a project, you install (in the project) the various
plugins you might need. You then edit, in the project, your views and
controllers and associated files. Throughout this process you are
likely committing the entire project, or at least significant portions
of it to a code repository. Other developers, on their machines, have
Rails installed too, they can hack on your project too by doing a
checkout. On the production server(s) you've got Rails installed and
something like Capistrano which takes your project and makes it go.
This is a fine way to do things, if you're into it, but it is, simply,
not how TiddlyWeb works. TiddlyWeb works as described above.
So now you might be wondering "why does it work like that?" Because of
what I've already said: "I want to maximize the extent to which
people, random people we don't know, can use _____".
A framework is traditionally used to create a deployment specific
instantiation of a thing, in our context a website. Django was
extracted from the framework which created a newspaper website. Rails
was extracted from the 37signals properties. Basecamp (the web site)
is a rails app. As far as I know I can't install Basecamp, but I can
install rails and make my own. I'd like to install TiddlyDocs, but I
don't need or want to install MyDocs. Once I have TiddlyDocs I'd like
to mess with things to be able to make CdentDocs.
So, all that said, I hope you can see that packaging for deployment
means something quite a bit different than it does in a traditional
framework setting. Up till now I don't think the difference has been
understood. Is it now?
Once we've got some grasp on the difference we can work on coming up
with solutions that work well in the Tiddly* world.
> - A list of established conventions for details like naming of
> project artifacts such as bags, config files, etc. These should be
> embodied in the canonical project, tutorial, and project generator.
See my response to the other thread:
http://groups.google.com/group/tiddlyweb/msg/ddc23a253ce8d115