Purpose of this page
This page is intended to be a mental workspace for implementation ideas for Project Soylent. Feel free to add sections, and so on.
Design
The design naturally splits into these two major sections. Keep in mind that the back-end will need significant design and planning and a fair amount of implementation before the front-end will even be possible.
Front-End Component
- An intuitive interface to interact with People (people objects) (see main Project Soylent page).
- This will most likely through some sort of browser interface (possibly Nautilus or something similar, if we can manage to interact with People natively via gnome-vfs).
- Østby? I'm looking into integrating something in Nautilus by using Gnome-VFS
- [[User:NicolasTrangez]]: You shouldn't look into Nautilus to do this, rather into GnomeVFS. We could have a GnomeVFS module handling people://, where we should specify an URI format (this should be on XDG/FreeDesktop URI Standard). For more on writing GnomeVFS modules, see this article. (edit: got me ;-))
- Østby? I'm looking into integrating something in Nautilus by using Gnome-VFS
- This will most likely through some sort of browser interface (possibly Nautilus or something similar, if we can manage to interact with People natively via gnome-vfs).
Back-End Component (Libsoylent)
- Performs most of the work
- Split into a few sub-components:
- Data storage - Acts as a database (though it may not be implemented as a traditional SQL/etc. database)
- [[User:Langly|Kenneth Østby]] Shall it work as an database or shall it just gather information from other applications?
- Querier - Searches through the data and returns results
- Data modifier - Modifies stored data (eg., add a person's metadata, modify their metadata, delete person, etc.)
- Auto-seekers - Intelligently improve quality of peoples' metadata (eg., search for buddy icons on their Livejournal account, gather their AIM buddy icons, etc.). These may either automatically update the database, or make a list of suggestions which another program could collect for the user to decide whether to incorporate.
- Inter-App Glue - If using some version of Nautilus as the front-end, we may or may not need to modify whichever of its components handles the communication of data upon drag-and-drop.
- Hooks into existing programs - As much as possible, we should re-use existing programs as they are, but we may need to propose some upstream changes. For instance, if we want to open a new email, we need to notify Evolution to do it, and it does not seem to have this functionality yet. Most preferably, we would have a generic method to say "open a new email" to some Preferred Application handler, which would then select the default email program and tell it to open a new email document.
- Data storage - Acts as a database (though it may not be implemented as a traditional SQL/etc. database)
Example Behavior, suggestions/clarifications
Interaction Icons
Dropping one or more people icons into these panel icons perform the following actions:
* [[User:ChipX86]]: This is a very non-intuitive UI that doesn't resemble that of any other applications on the user's desktop. We want this to fit in with existing applications if this has any chance of success. If we're going to keep with a model like the currently proposed one, we should make the buttons regular toolbar buttons, and simply select the people and click the button. There's no reason for a drag-and-drop solution within the same UI. Any drag-and-drop we support should be between this program and other programs.
* [[User:EdMack]]: Instead of drag-drop on launchers (which people just will not do), how about the 'person icon' is that person? It's the compliment to spatial browsing. The icon should reflect whether the person in on or offline with an emblem (so users know if instant chat is possible), and double-clicking the icon brings up the fastest communication method, be it email or IM. If you want to talk to many, just drop them onto the window that just opened. presence icons should be able to be put on the panel, or desktop. Right click to get more info, and to perform an available action (Chat, send file, send contact, play nibbles, video chat) - the user shouldn't have to care about protocol. If you drop a file onto a person, it'll send it via the fastest method available. Bluetooth included :). I think it's important that there is a Me person, where all personal details are stored. This needs to be ensured by the system. It'll also allow people to drop themselves onto others to fire across their IMs and phone numbers ect.. Idealy Evolution ect would sponge all email adresses ect it came across, and add their names too
Message
One person: opens an instant message (in the preferred protocol [which they are currently signed on to]) to that person. Multiple people: open a chat (?) in the greatest-common denominator (?) protocol to all the people.
- I'm guessing this will invite them all to the same conversation?
- [[User:BaishampayanGhose]]: That won't be possible if the person use different protocols or some protocol where it's not possible to have conferences. People like me use Gaim to chat with people using a lot of protocols. So there is no point in opening one chat window with the greatest common denominator protocol. We will open separate windows with the relevant protocols and as an option provide the choice to invoke a conference if and only if the selected people are on the same protocol and that too a protocol that supports conferencing [Yahoo!].
- [[User:ChipX86]]: People are thinking way too hard on this. Gaim has a MIME-Type message format for dragging buddies around, and Evolution supports it. We should simply use that, maybe refine it if necessary and get a standard going. Drag the people into Gaim and format the MIME-Type messages appropriately. We shouldn't be doing the hard work, and if we can get other IM clients to support this, it'll work there.
Blog
One person: opens that person's blog. Multiple people: opens a common feed aggragator, or known aggragator page (like a Planet); this may be too difficult in practice (include a planet which includes more than the selected people, include a planet which contains some, but not all of the selected people?) - rather, create a tool or modify Epiphany to nicely format a set of given RSS feeds?
- I know that this is a hackish solution, but what if the application downloads the rss feeds from the blogs, and does some kind of xsl transformation on them, saves them some temp. place and opens epiphany on it?
- [[User:NicolasTrangez]]: another solution could be to create a standard RSS2/Atom/whatever aggregation, and have some configuration option: this "feed" could be opened by a feedreader like liferea/blam/... when installed and configured, *or* using epiphany/firefox/..., rendered with some nice XSLT sheet linked to from within the rss XML file (there's some tag for that, can't remember it now)
- [[User:BaishampayanGhose]]: I quite agree with [[User:NicolasTrangez]]. What we can do in case of multiple people's blogs is that we can either open the individual feeds in a blogreader [blam! / whatever according to individual settings?] and display them after sorting by date [other prefs?]. Alternately, we can create a standard aggregated feed with the selected persons' feeds and display them. But IMO, the former is a better option as it'd be faster to just show the feeds after sorting than to create a new feed and then show it. The new feed created would be useless if the person selects some other persons. We will of course save the configuration [feeds of the people selected] and will keep it until removed.
Groups and Tags
- you keep mentioning "multiple people" in the design section. why not be able to place people in groups? (like the CPLUG for example) then the profiles for groups can show group info, such as the channel on IRC, etc.
- [[User:NicolasTrangez]]: Adding group support was on my wishlist as well, but currently (on my desktop at least) people aren't really "grouped". In EDS not at all, in Gaim a little, although not good (like, I got some group "Irritating People", something that shouldn't come back anywhere else ;-)). Next to this, there is no app that truly supports multi-group behaviour (one Person can be "Friends" and "Coworkers") so we'd have to save this information (FOAF?). We also need group relations (who knows who? (FOAF again), maybe family relationships ("This is my brother")(extended FOAF, this and others))
- I'd prefer the idea of arbitrary tags instead of or as well as groups, a la flickr and del.icio.us.
- [[User:NicolasTrangez]]: This is a great idea, it'd allow us to create a very flexible system etc. Programs like Gaim can use these tags (it can be a good thing to have one person in several "groups" in your buddy list), or we can combine it with f-spot tags, etc. We will need a "main" tag though, because software like evolution only allows a person to be member of one main group (unless we'd rewrite libecontact quite a lot ;-))
- [[User:KalleVahlman]]: There should be some automation for such tags, for example in the spirit of evolution vfolders. So I could say for an email address that if it ends "@gnome.org" it should be tagged as "Gnome Dude". Also, ICQ and probably other protocols too have persistant groups, so those could be applied automatically too. Automation should only be added after careful consideration though, too many or irrelevant tags could generate clutter and thus make the tags useless.
- List of automatic tag possibilities:
- Email address ("this kind of address belongs to this group", active filtering)
- ICQ groups (reusing information)
- Specific IRC channels ("my contacts that are/have been on this channel", this is a bit of a reach probably)
- Some arbitrary rules ("the people I chat of Project Soylent with", thinking beagle here, most likely out of scope but...)
- List of automatic tag possibilities:
Localization
- [[User:Rcouto]] This is just a dream. I don't own a GPS device, but it would be nice to be able to query information about the localization that I (the user) was at some time (including now), and that my contacts were. A sample use case would be: I notify the localization UI that I am on a trip to New York (as I said, no GPS :). ProjectSoylent would gather information about which contacts that are currently near this site and nicely present them to me. Or even, it could warn them, if I so wanted, of my presence. Them with my bluetooth enabled mobile phone near, I could with a couple of clicks, send them a SMS message inviting them for a beer.
- [[User:NicolasTrangez]]: this could be a nice idea, I read about something like this earlier. Was it on Planet Gnome, or did Apple do something with it? I think it was the latter, some engineer describing the future of a computer desktop and contact relations (location based). These things of course need decent privacy policies. Once more: Soylent should only provice "information" (like HAL does) to interested applications, so Soylent should (imho) not be able to send some message, the "desktop app" should do this (like Soylent ~ HAL, SomeApp? ~ GVM) (that's just my opninion of course)
