journal spec?
Joshua N Pritikin
jpritikin at pobox.com
Sun Dec 17 07:04:12 EST 2006
On Sun, Dec 17, 2006 at 12:13:46PM +0100, Marco Pesenti Gritti wrote:
> MBurns wrote:
> >On 12/17/06, *Joshua N Pritikin* <jpritikin at pobox.com
> ><mailto:jpritikin at pobox.com>> wrote:
> > Can somebody give me a link to the mailing list archive where this
> > discussion took place?
>
> The journal user experience has been discussed in several meetings, but
> not on the mailing lists. There is a section about it on the journal
> which I assume will be filled once the plan is finalized.
>
> http://wiki.laptop.org/go/OLPC_Human_Interface_Guidelines/The_Laptop_Experience/The_Journal
Yah, I read that already.
> Current implementation is just a prototype which will allow us to start
> working on the UI. The API looks like:
>
> ds = datastore.get_instance()
> obj1 = ds.get(<uid>)
> obj1.set_data(<array of bytes, or a string>)
> obj1.set_properties({'foo': 1, 'bar': 'bobloblawslawblog'})
> print obj1.get_properties()
> obj2 = ds.create(<array of bytes, or a string>, {'baz': 2134512})
> obj2.connect('updated', object_updated_cb)
>
> Ivan is working on the real implementation. I don't know if he has any
> specification about it nor I'm aware of public discussion.
I don't know what has been discussed so I'll just blurt out my idea.
Based on the description of the Journal in the HIG, it seemed like GIT
would be a close fit for the database requirements. Then new development
would be limited to putting a pretty face on GIT, that is, something
even simpler than gitk.
I'll just go through the HIG page point-by-point:
+ The Notion of "Keeping", No more "open" and "save"...
A commit in GIT is about as lightweight as you can get in terms of
saving.
+ Temporal Organization
Timeline...
The GIT database is organized temporally as long as you don't merge
changes from friends. Maybe there should not be too much GUI support
for merging in the first version because it gets so complex. Resolving
merge conflicts in an XML document is not something that kids are going
to readily understand without a lot of GUI support.
+ Level of detail...
+ Granularity...
Some additional OLPC structure could be added to the commit message to
indicate the type of commit (level of detail), or maybe tags are enough.
+ Falloff...
Not sure what this means.
+ A Typical Journal Entry
+ Implicit...
Means what? Autosave?
+ Explicit...
Maybe your project has reached a milestone and you want to type in a
description of the state of the project. GIT might support this with a
tag.
+ The Power of Metadata
+ Implicit...
+ Ratings...
+ Use frequency...
Not sure what is meant here. Of course the GIT database is immutable so
these features might be better implemented outside of GIT.
+ Powerful Filtered Searching & Sorting
+ Filtering...
+ Sorting...
Of course GIT excels here. We just need to prod activities into
storing uncompressed state because GIT will handle the delta compression
and searching.
+ Special filters, labels or tags: about to be removed, lazy deleted
+ (trash can), in progress...
Sounds like GIT branches.
+ Implicit Versioning System
+ Automatic, incremental saves...
+ Viewing revision history...
Is it just me or is this reminiscent of GIT?
+ Automatic Backup and Restore
+ Automatic backups to server...
Simplified configuration for "git push / git fetch"
+ Full restore (temporal)...
GUI suger for "git reset --hard"
+ Partial restore(by object)...
GUI suger for "git checkout"
+ Temporary restore...
GUI suger for "git checkout -b"
+ The Journal as a Progress Indicator
+ Two stages for entries...
Hrm, means what?
Not only do the requirements match pretty well but intuitively it makes
sense for the OLPC platform. There is a "show the code" button on the
keyboard. Kids should be introduced to distributed version control
because that's how code development is organized.
Lastly, I'll just sketch out an example directory layout for an Abiword
document:
./.git
./abiword/document
./bulletinboard/local-markup # entries made on the local machine
./bulletinboard/net-markup # entries made by friends
./suger/activities # Which activities (& versions) were involved in
# making this snapshot
./suger/members # Who was invited to this activity?
More information about the Devel
mailing list