This document is not yet complete. Among other things, we need to:
This document specifies the requirments/features for the first version (v1) of what's currently called "blog-fun." The requirments are largly GUI-centric. Though we'll touch on technical items here, this document is largly just a place to specify what the hell we're going to be coding for v1. After reading this document, you should be familer enough with the features to begin designing and implementing components of blog-fun, even the whole system.
Astute readers will probably realize that this spec is loosly modeled off Joel's Spec Essays.
Briefly, blog-fun is a simple project to manage the creation, editing, and life-time of a weblog. The goals of web-log are
Here, we outline a couple scenarios for use; these are use cases, stories, or whatever you'd like to call them
Strom would like to start a weblog; he's decided to use blog-fun to create and manage his web-log. Strom is a rather expierences user, so he's used to having to edit properties file, install software, and do a little bit of debugging of installs to get it to work. Strom also likes hot-dogs.
Strom first installs blog-fun on his local machine. He opens the GUI, selects the Config screen, and sets up the FTP configuration (username, password, FTP site, FTP path). Though Strom knows he can customize the blog output with his own XSLT, he first does a simple post using the default template. Selecting the Post screen in the GUI, he types in "test, test," and then clicks Post.
blog-fun connects connects to the FTP site, checks for pre-existing blog-files, but, finding none, creates a new blog, and then writes out Strom's first post. Now, Strom can goto the URL of his blog and see a blog of his first post.
After looking over the blog-fun XML spec, Strom creates an XSLT that'll output the his blog how he wants. Additionally, he uploads any support files like CSS'es, images, etc. Strom then goes back to the GUI, select the template screen, and cut-n-pastes his custom XSLT.
Now, Strom clicks the Publish button. blog-fun connects to the FTP site, loads up the blog found there, then re-publishes the blog using the output of the custom XSLT. When going to the URL, Strom now sees his fancy-formatted blog.
Lucy has done, generally, what Strom has done. However, Lucy is interested in providing the rest of the world with syndicated version of her weblog via XML, RSS, etc.
Once Lucy has her weblog configured and has used it for some time, she selects the Syndication screen and configures a syndicator. Lucy realized that, really, a syndicator is just the output of an XSLT on her blog that's stored a different file on her FTP site.
Lucy sets up the "RSS" syndicator by cut-n-pasting an her blog-fun -> RSS XSLT, and telling blog-fun what FTP path to store the output at. She then clicks the Publish button. blog-fun generates the RSS syndication -- as well as any other syndications and new weblog entries if needed --, connects to the FTP site, and uploads the syndicated files.
Now, given the proper URL, any RSS reader can read and render Lucy's syndicated blog.
This section describes features that would be nice to have in this version, but that are not required. The idea here is to list features that are less important than the remained of the document. These non-goals will be in future versions, no doubt, but by making them non-goals, we can hopefully keep this version small enough to be do-able on a pleasurable release "schedule."
Though the goal of blog-fun is to be extreamly simple, there are quite a few "screens" required for operation. "Screens" are not exactly webpages, JPanels, or windows. Rather, they're metaphoric collection of similer functionaliyu, e.g., the "screen" that allows user's to configure their FTP site settings.
The configure screen allows users to enter the general and needed config info for logging onto their FTP site:
ftp.spaceship.com
.Technical note: this input of this field should be protected to never show the actual passowrd, e.g., with a JPasswordField or a <input type="password">/>
Enhancement: it'd be nice to make blog name into an editable combo-box that would allow users to create new blog configurations. Then, these blog-names could be associated with different syndications of the blog. That is, if the user made an RSS syndication of the blog, the blog name combo box would contain something like "default blog" and "RSS blog." Selecting either one would then setup the FTP config for each of those syndications. If "blog-name" is configured like this, we might consider renaming it to something like "blog-version."
Future versions may have more complex, e.g., multi-pane, Configure screens.
The Post Screen allows the user to add posts to their blog, and, to edit previous posts.
To post, the user:
The Post button simply saves the current text in the Post Area.
Open Issue: do we save the post to the FTP site, or just save it in memory?
The Publish button connects to the FTP site and creates/updates all (?) the syndicated versions of the blog. Once the Publish process has completly, the weblog should be fully updated.
The exact way to retrieving previous posts is not designed at this
point, but there should be a way to bring them up, if only by typing
in their id
. Ideally, a searchable panel would be brough
up to allow the user to search by date, keyword, or simple browse all
past posts.
Once a previous post is retrieved, it's contents will populate the Post Area and any other related text inputs. The user can edit the post, using the Post and Publish buttons to the same effect as above. Additionally, the use can click the Delete button which will delete the post.
Open Issue: do we require the user to click Publish before a Delete takes effect?
The user will mostly likely spend the majority of their time in the Post Screen.