To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>

The user journey and the fixes to get people who wander back on to the main line have been created with OmniGraffle for the Mac. You can get the files in these formats:
User journey
* [[Graffle file|http://jonny.jonathan.googlepages.com/first_impressions_user_journey.graffle]]
* [[PNG file|http://jonny.jonathan.googlepages.com/first_impressions_user_journey.png]]
Fixes
* [[Graffle file|http://jonny.jonathan.googlepages.com/first_impressions_uj_fixes.graffle]]
* [[PNG file|http://jonny.jonathan.googlepages.com/first_impressions_uj_fixes.png]]

# Don't forget to save and reload your ~TiddlyWiki after installing the package...
# You might want to put [[Welcome to TiddlyChatter]] and/or [[TiddlyChatter]] in your MainMenu or DefaultTiddlers.
# The key to ~TiddlyChatter is your subscription to someone else's "~ChatterFeed". You have been set up with one subscription, called ChatterFeed, to some test content on http://tiddlychatter.tiddlyspot.com. You can manage your subscriptions from the main [[TiddlyChatter]] tiddler. Click "manage" and then "new subscription" and put in the URL of a ~TiddlyWiki which is publishing a feed.

!Current
* 1/11/07 - generation of ChatterFeed pointing to self fails when viewing root host rather than full URL e.g. http://domain.com rather than http://domain.com/index.html - Update 1/11/07, FND suggested using localPath not window.location
* 24/10/07 - Parent content tiddler's unread status doesn't get updated to unread when a new note is added, which it should - or the displayed status should be unread if at least one of the notes' statuses' is unread
** 23/10/07 - Update: partial fix: problem is that the process is not repeatable, as the match looking for feeds to import from returns an empty array
** 30/10/07 - Update: behaviour arises due to use of Regex.exec, which maintains state; should change to Regex.match
* 23/10/07 - ordering of content in ListView is not right - for content on same day, latest doesn't appear at the top
* 09/10/07 - refresh mechanism implemented in a way I don't fully understand - could be unstable?
** 23/10/07 - adding new content doesn't update the TiddlyChatter content list, although hitting "mark as read" or "mark as unread" does
* 16/10/07 - if we're going to have public and published tags, then we need to: show whether public content is published or not in the list view; not need ChatterFeeds to be tagged public, as we don't want them showing up in the list view - or do we? There needs to be a clear semantic difference between something tagged public and something tagged published; also, Manage subscriptions appears to work with a tag it shouldn't - think it is published (update: actually it is "channel")
! Fixed
* 29/10/07 - File_adaptor_filter_plugin broke with no filter provided - Fixed 30/10/07, removed plugin as core FileAdaptor updated to support filter
* 23/10/07 - Get updates doesn't get all your subscriptions - Fixed 24/10/07
* 16/10/07 - Creating a new tiddler doesn't add the unread field necessary to make the unread macro work properly - Fixed 17/10/07
* 16/10/07 - author name not working for imported content - Fixed 23/10/07
* 16/10/07 - Tiddler says "No notes" if you import other people's notes - Fixed 23/10/07
* 16/10/07 - existing content is overwritten by other people's content; stop this and alert the user; overwrites notes too - maybe we can do something with the number extension? Although that might break the symmetry of content between TiddlyWikis. This becomes a big issue when there are more than two people, as this could happen frequently. Add username to end of title, as in tiddler-NotesJayFresh0 ? - Fixed 23/10/07, design decision: notes are unique by user ID, content not supposed to be updated by people other than the content owner - in future, put in notification if new content updates come and a user has changed their copy
* 16/10/07 - list view looking for unread property on latest note, not on parent tiddler; notes don't even need unread properties (although they will probably keep them for ease) - Fixed 23/10/07, design decision: "mark as read" button now reflects the status of the newest update
* 16/10/07 - Ken Girard - I discovered that the current 'New subscription' button over writes the current ChatterFeed tiddler, so put the following in a tiddler named what ever:
{{{|''Type:''|RSS|
|''URL:''|http://no-sin.com/wiki/tiddlychatter.xml|
|''Workspace:''|No-SinFeed|
|''TiddlerFilter:''|[tag[public]]|}}} - Fixed 23/10/07, design decision: the first time TiddlyChatter runs, it creates a new feed called ChatterFeed with the username appended and points the url at the user's own xml feed; this means that ChatterFeed remains what the user uses as their default subscription
** Tag it: "systemServer TiddlyChatter public channel" and lets see where it goes.

!!!boss
[img[http://jonny.jonathan.googlepages.com/boss.png]]
* wants to know what team are doing
* is responsible for delivery
* interested in development of team
!!!team
[img[http://jonny.jonathan.googlepages.com/team.png]]
* want to impress their boss
* can work together
* work to deadlines

Caroline: is a knowledge worker
* is 25 years old
* is addicted to Facebook
* works in external affairs for a construction trade federation
* is part of a team of 12
* lives in North London, Zone 2
* enjoys spending time with her friends
* plays squash and swims regularly
* lives with her boyfriend
* writes a lot of research-based reports
* coaches a netball team
* is Dan's client

* not to waste time with [[Dan]] explaining what she wants from his team
* for her netball team to do better this season
* for the conference she is organising to go really smoothly
* for it to be easier to work with [[Naomi]] on the research she does for [[Caroline]]
* more effectively organise information from varied sources

Caroline: as a knowledge worker...
* I want direct access to Naomi's research so I can access it at my convenience
* I want to be able to communicate with Naomi about her research as she is writing it so she can respond to my changing needs and we can discuss areas of confusion
* I want to easily combine information from Naomi with information from others so it takes me less time to pull together a report

Dan: is a boss
* is 31 years old
* runs a small team at a Public Affairs company
* lives just outside Central London, on the South side
* enjoys having lunch out
* rides to work on his bike
* feels pressure from his boss to make his team more productive (who doesn't?)
* uses computers on a daily basis, mainly for email
* has a Blackberry he is addicted to
* is single

* impress his boss
* keep his clients happy
* get more clients
* have more time for lunching with clients
* lose weight
* perform well next time his cycling club enters a race
* know his team are on track
* spend less time on the BlackBerry

Dan: as a boss...
* I want to spend less time answering email so I have more time to be productive (and can get rid of the Crackberry!)
* I want to keep an eye on my team's work in a less intrusive way so they can be more productive
* I want easy access to my team's work as and when I need it, so I can respond to my clients and my boss in a rapid manner

[[Welcome to TiddlyChatter]]

The development of TiddlyChatter (TC) has reached v0.7 and is a working prototype. At this point, we have taken a step back and are focussing on making TC as user-friendly as possible, and designing the user interface driven by the future users' needs.
!Basis for TiddlyChatter
The underlying need we are assuming for uses of TiddlyChatter is:
@@"I want to share information with people!"@@
We perceive two problems with current web-based technologies used for collaboration (e.g. wikis, Sharepoint):
* @@It's noisy (spam!)@@
* @@Why do I have to go somewhere new to do it?!@@
!Design
[[Thinking about users]]
[[Designing the interface]]

!User journeys
[[User journeys]] are the first step in constructing the user interface. They help to show what your interface will need to support, where the users could go astray and how we deal with that.

!!!teacher
[img[http://jonny.jonathan.googlepages.com/teacher.png]]
* has information to get to the pupils
* has work to mark
* offers feedback and help
!!!pupils
[img[http://jonny.jonathan.googlepages.com/pupils.png]]
* have work to do
* are learning
* can work with each other
* have a lot of questions

[evolved from the original [[blog post|http://jayfresh.wordpress.com/2007/09/24/tiddlychatter-decentralized-collaboration/]] on the subject]
Here’s an illustration of what ~TiddlyChatter is all about:
* Jon and his class have been set some tricky homework, so he creates a stub of what he’s working on and publishes it, mentioning to Liz, his classmate, that they ought to work on this together
* Liz subscribes to Jon’s feed and the stub turns up on Liz’s computer for her to see and/or comment on
* Liz adds a note about a useful resource
* Jon subscribes to Liz’s feed and her note turns up in place on Jon’s computer, which turns out to be very helpful…
This doesn’t sound so different from normal collaboration, but there are a couple of important differences:
* ''work offline:'' Jon’s little bit of work and Liz’s note on it appear on both computers separately, so they can both walk away with their ~TiddlyWikis and only sync-up when they get back online
* ''opt-in:'' If Jon decides Liz is no good as a partner, he can stop watching her feed and he never sees any of the notes Liz makes
** it is only when their teacher, Alice, eventually "opts-in" to Jon's feed (at his request... :() that she will see the result of the group’s work.
* ''decentralized:'' If Ben comes in and subscribes to Jon’s feed, he can make his own comments, and Jon will see them if he subscribes to Ben's feed, regardless of what servers or software Ben is using.
** Extending this slightly, Ben, Liz and Jon can all share and work on the information together; if someone else wants to join the group, it only takes one member to subscribe to the new person's feed for the new content to filter through to the rest of the group.

# If you are planning to use ~TiddlyChatter with your ~TiddlySpot ~TiddlyWiki, make sure to remember to download a local copy so you can import tiddlers
# To get hold of the set of tiddlers needed for ~TiddlyChatter, you need to use the ~ImportPlugin (often via the backstage area) in your own ~TiddlyWiki. When asked for the type of server, choose "File" and for the URL to download from, use this URL and then click "open":
#* http://tiddlychatter.tiddlyspot.com/index.html
# You don't need to bother setting a value for the workspace, just click "open" again. When you are presented with the list of tiddlers, choose the ones tagged <<tag TiddlyChatterPackage>>. You can check in TiddlyChatterDocumentation to see which other plugins are used and which are modified. I have made an effort to make sure that any modifications are backwards-compatible and that overwriting the originals you already have is safe. If you have any problems, please report them on the [[TiddlyWikiDev|http://groups.google.com/TiddlyWikiDev]] Google Group.
Once you have ~TiddlyChatter installed on your own ~TiddlyWiki, you get a [[feed|TiddlyChatterPackage]] to use for future synchronisation with this version of ~TiddlyChatter.

Joshua: is a pupil
* is 10 years old
* has a laptop at home
* has a Bebo page
* lives with his Mum & Dad
* lives in the inner suburbs of North-West London
* does a lot of sport
* plays outside with his neighbours
* uses the Internet every day at school and at home
* has a PSP and an XBox 360
* does quite well at school
* wants to go to Loughborough University

* spend less time doing homework
* get better marks
* get school colours for sporting achievement
* finish Halo 3
* beat [[Nicholas]] in the Maths exam at the end of term

Joshua: as a pupil...
* I want to find the solution to problems I am stuck on so it doesn't take me ages to get my work done and I can get the right answer

Naomi: is a researcher
* is 22 years old
* works in Dan's team
* has just moved house to a small flat in Central London
* works from home two days a week
* spends a lot of time in cafes, working or otherwise
* uses the Web all the time for research purposes
* plays in Caroline's netball team
* does a lot of the research Dan provides to Caroline's company

* be as effective in the cafe as she is in the office
* research to take less time
* report-writing made easier
* work directly with [[Caroline]], not through [[Dan]]
* impress [[Dan]] enough to get a promotion
* make more time to get fitter
* play better netball

Naomi: as a researcher...
* I want my research to go down really well with our clients so I impress Dan and get a promotion
* I want to have a one-to-one relationship with a client so I can be more certain I am doing the work they want

Nathan: is a teacher
* is 24 years old
* is reasonably good with technology (understands the web!)
* does his lesson plans in the evenings and at weekends
* lives in London, Zone 2
* enjoys reading classic literature
* goes out in London with old friends from University
* aspires to change classroom education for the better
* teaches Modern Languages (French, German)
* teaches at a good school just outside Central London
* teaches [[Joshua]] and [[Nicholas]]

* Bring the best out in the kids
* Use technology in the classroom to enhance the learning experience
* Spend less time marking work
* Have lesson-planning invade his spare time less
* Foster a spirit of working together amongst the kids
* Persuade the school to spend more to provide laptops for the pupils
* Inspire and learn from like-minded teachers

Nathan: as a teacher...
* I want to see what my students are doing do I can identify opportunities to give feedback, intervene or just check progress
* I want to give feedback on my students' work so it helps them get round a problem or stops them running into one
* I want to share what I do with like-minded teachers so I can inspire them or learn from their work and feedback

Nicholas: is a pupil
* is 11 years old
* is in [[Joshua's|Joshua]] class
* plays rugby for the school
* is really strong in geography
* has a maths tutor
* doesn't have the Internet at home
* has read the entire Harry Potter series twice and has all the films that are out
* has just given up the recorder
* lives in an estate in North-West London

* persuade his parents to get the Internet at home
* see the last Harry Potter film the day it comes out
* not to have a maths tutor
* stay at the top of the year in geography

Nicholas: as a pupil...
* I want to find a better way of getting better at Maths, so that I can get rid of my tutor
* I want to show that having the Internet at home will improve my studies, so that my parents will get the Internet at home!

With personas, we are describing human beings that we think would use TiddlyChatter. Creating characters we can empathise with helps to unlock people's motivations and brings things up you wouldn't uncover when just thinking about the "generic user".
Education
* [[Nathan]] (is a teacher) - [[Nathan's goals]]
* [[Joshua]] (is a pupil) - [[Joshua's goals]]
* [[Nicholas]] (is a pupil) - [[Nicholas' goals]]
Business
* [[Dan]] (is a boss) - [[Dan's goals]]
* [[Naomi]] (is a researcher) - [[Naomi's goals]]
* [[Caroline]] (is a knowledge worker) - [[Caroline's goals]]
!!!An observation about motivations towards collaboration:
In the //educational// context, it is only really the teacher with the vested interest in their pupils working together - the pupils are motivated by their own performance. In the //business// context, while the boss clearly wants the team to be successful and team members can see this benefit, again people are selfishly motivated to improve their personal performance. Therefore, most user requirements are going to be of the form @@"I want something to happen that makes my life easier"@@.

/***
|Name|TaggedTemplateTweak|
|Source|http://www.TiddlyTools.com/#TaggedTemplateTweak|
|Version|1.1.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Story.prototype.chooseTemplateForTiddler()|
|Description|use alternative ViewTemplate/EditTemplate for tiddler's tagged with specific tag values|
The core function, "story.chooseTemplateForTiddler(title,template)" is essentially a "pass-thru" that returns the same template it was given, and is provided by the core so that plugins can customize the template selection logic to select alternative templates, based on whatever programmatic criteria is appropriate. This tweak extends story.chooseTemplateForTiddler() so that ''whenever a tiddler is marked with a specific tag value, it can be viewed and/or edited using alternatives to the standard tiddler templates.''
!!!!!Usage
<<<
Each alternative template is associated with a specific tiddler tag value by using that tag value as a prefix added to the standard TiddlyWiki template titles, [[ViewTemplate]] and [[EditTemplate]].
For example, any tiddlers that are tagged with ''<<tag media>>'' will look for alternative templates named [[mediaViewTemplate]] and [[mediaEditTemplate]]. Additionally, in order to find templates that have proper WikiWord tiddler titles (e.g., [[MediaViewTemplate]] and [[MediaEditTemplate]]), the plugin will also attempt to use a capitalized form of the tag value (e.g., ''Media'') as a prefix. //This capitalization is for comparison purposes only and will not alter the actual tag values that are stored in the tiddler.//
If no matching alternative template can be found by using //any// of the tiddler's tags (either "as-is" or capitalized), the tiddler defaults to using the appropriate standard [[ViewTemplate]] or [[EditTemplate]] definition.
''To add your own custom templates:''
>First, decide upon a suitable tag keyword to uniquely identify your custom templates and create custom view and/or edit templates using that keyword as a prefix (e.g., "KeywordViewTemplate" and "KeywordEditTemplate"). Then, simply create a tiddler and tag it with your chosen keyword... that's it! As long as the tiddler is tagged with your keyword, it will be displayed using the corresponding alternative templates. If you remove the tag or rename/delete the alternative templates, the tiddler will revert to using the standard viewing and editing templates.
<<<
!!!!!Examples
<<<
|Sample tiddler| tag | view template | edit template |
|[[MediaSample - QuickTime]]| <<tag media>> | [[MediaViewTemplate]] | [[MediaEditTemplate]] |
|[[MediaSample - Windows]]| <<tag media>> | [[MediaViewTemplate]] | [[MediaEditTemplate]] |
|[[CDSample]]| <<tag CD>> | [[CDViewTemplate]] | [[CDEditTemplate]] |
|<<newTiddler label:"create new task..." title:SampleTask tag:task text:"Type some text and then press DONE to view the task controls">> | <<tag task>> | [[TaskViewTemplate]] | [[EditTemplate]] |
//(note: if these samples are not present in your document, please visit// http://www.TiddlyTools.com/ //to view these sample tiddlers on-line)//
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
[[TaggedTemplateTweak]]
<<<
!!!!!Revision History
<<<
''2007.06.23 [1.1.0]'' re-written to use automatic 'tag prefix' search instead of hard coded check for each tag. Allows new custom tags to be used without requiring code changes to this plugin.
''2007.06.11 [1.0.0]'' initial release
<<<
!!!!!Credits
<<<
This feature was developed by Eric L Shulman / ELS Design Studios
<<<
!!!!!Code
***/
//{{{
version.extensions.taggedTemplate= {major: 1, minor: 1, revision: 0, date: new Date(2007,6,18)};
Story.prototype.taggedTemplate_chooseTemplateForTiddler = Story.prototype.chooseTemplateForTiddler
Story.prototype.chooseTemplateForTiddler = function(title,template)
{
// get default template from core
var template=this.taggedTemplate_chooseTemplateForTiddler.apply(this,arguments);
// if the tiddler to be rendered doesn't exist yet, just return core result
var tiddler=store.getTiddler(title); if (!tiddler) return template;
// look for template whose prefix matches a tag on this tiddler
for (t=0; t<tiddler.tags.length; t++) {
var tag=tiddler.tags[t];
if (store.tiddlerExists(tag+template)) { template=tag+template; break; }
// try capitalized tag (to match WikiWord template titles)
var cap=tag.substr(0,1).toUpperCase()+tag.substr(1);
if (store.tiddlerExists(cap+template)) { template=cap+template; break; }
}
return template;
}
//}}}

! Scenarios
Early indications are that TiddlyChatter would be useful in two generic areas:
* [[Education|Education Scenario]]
* [[Business|Business Scenario]]
! Personas
With [[Personas]], we create some characters to think about as model users, and explore their goals and needs. These can then be used as a lens through which to look at the design of the application.
! User stories
[[User stories]] are a way of looking at what the application should do from the point of view of what a user wants the application to do. A user story states //who// a user is, //what// they want and //why// they want it.

To create a piece of Chatter, you have a couple of options:
* Hit "Create" on the TiddlyChatter control panel, edit and save
* Create a new tiddler and tag it with "public"
This creates a Chatter ready for publishing into your ChatterFeed after you've finished drafting it - click "Publish" to get it into your feed.
At this point, you might be wondering how to get your content updates up onto the web and into the hands of your subscribers:
* Using the "Save to web" feature of TiddlySpot is the simplest at the moment, especially because other TiddlySpot TiddlyWikis will be able to download your Chatter directly, instead of them having to download and run a local version.
* If you have BidiX's [[UploadPlugin|http://tiddlywiki.bidix.info/#UploadPlugin]] and a php server, you can set up a store that will accept uploads directly from TiddlyWiki
* If you have *any form* of static file hosting available to you, posting your ChatterFeed (and your TiddlyWiki) on there is totally fine
We recognise that this is a frustrating area, but we're not alone in trying to solve it.
[Addition:] 1/11/07 - I just found [[yoyko|http://www.chaosindex.com/yoyko/index.html]], who provide a hosted store for TiddlyWikis

!Subscribing to other people's Chatter
To read someone's else Chatter, you have to be subscribed to their ChatterFeed:
* From the TiddlyChatter control panel, click Manage > New Subscription
* Enter the URL of the TiddlyWiki publishing the ChatterFeed you want to subscribe to
* When the list of available feeds appears, put a check in the box next to the one you want and click "subscribe"
When it comes to downloading other people's Chatter, you generally need to be viewing your TiddlyWiki as a local file for the remote calls to work. This isn't true if you're only working with TiddlyWikis running on TiddlySpot, as their proxy sorts everything out, which is grand.
Hitting "Get" from the control panel downloads your updates. New content is displayed in red and the number of notes on a tiddler is shown in brackets next to the tiddler's title.
!Adding and publishing comments
After you've read an imported tiddler and want to add a comment, clicking on "add notes" opens a box to type in your note. Clicking "save notes" saves the note and publishes it into your ChatterFeed. Various ways to get your feed out onto the web where people can see it are discussed in [[this tiddler|TiddlyChatterPublishing]].

User journeys describe the path a user takes through an application interface in order to satisfy a need. At every possible point where a user can fall off a journey and end up with a bad experience, we attempt to catch this and figure out how to redirect them back on to the main line.
[[1st impressions]] - getting the software, downloading, installing, configuring and running for the first time

User stories expresses who a user is, what they want to do with an application and why they want to do it. With a prioritized set of user stories, these essentially define what your user interface has to do. A user story is of the form //"As a... I want to... so that..."//.
Education
* [[Nathan's stories]]
* [[Joshua's stories]]
* [[Nicholas' stories]]
Business
* [[Dan's stories]]
* [[Naomi's stories]]
* [[Caroline's stories]]

@@color(red):1/11/07 Updated!@@ Introduction and set-up instructions re-written for clarity
@@color(red):1/11/07 New!@@ [[Diagram|TiddlyChatter flow]] of how to get two people Chattering
@@color(red):22/10/07 New!@@ [[Designing TiddlyChatter from the user's point of view]]
This ~TiddlyWiki has been installed with TiddlyChatter, a shiny new collaboration feature.
!!~TiddlyChatter is for opt-in, decentralized collaboration. What this means:
''opt-in:'' avoid "collaboration noise" associated with standard wikis - only see the information from people you want to collaborate directly with;
''decentralized:'' everyone can keep their own personal ~TiddlyWiki and still become a part of a ~TiddlyChatter community; you don't need to rely on a central collaboration server.
!!Starting out
To get into the ~TiddlyChatter mood, you need to [[install|InstallTiddlyChatter]] the <<tag TiddlyChatterPackage>> tiddlers in your own ~TiddlyWiki. When you're done, take a look at these [[quick tips|After installing]] or read these guides to [[publishing|TiddlyChatterPublishing]] content and [[getting hold of|TiddlyChatterReading]] other people's content. There is also a [[diagram|TiddlyChatter flow]] of the flow two people would go through to Chatter with each other.
You are actively encouraged to help design and build TiddlyChatter. The tiddler [[Designing TiddlyChatter from the user's point of view]] leads to a lot of content that describes and documents the design process we are going through. Please contribute through the [[TiddlyWikiDev|http://groups.google.com/TiddlyWikiDev]] group or mail me at jon at osmosoft dot com.
You can read an example scenario of [[how TiddlyChatter works|How TiddlyChatter works - an example scenario]]. ~TiddlyChatter is still in [[development|TiddlyChatterDocumentation]]. Bugs are [[tracked|BUGS]], please post in the [[TiddlyWikiDev|http://groups.google.com/TiddlyWikiDev]] Google Group if you find more.