A Re-Introduction to Zeitgeist

While the Zeitgeist team has assembled together at Aarhus, Denmark for their 2011 hackfest, I am sitting at home due to shortage of time for Visa application. This hasn’t stopped me from continuing my work and mythbusting is also a very much-needed action.

Recently I came across a post on Linux Insider in which the author has written up a post named GNOME Activity Journal: Not a Big History Buff.

Instead of screaming and accusing of spreading FUD (which isn’t a sure shot solution for every problem), I thought I might reply with the solution. Putting it nicely as a blog post might help everyone.

WARNING: This is a tl;dr post.

The post has many errors, some minor misnomer and few factual errors. I would like to clear and doubts and for some points – add more commentary.

1) Architecture and component description

The Activity Journal was first introduced as GNOME Zeitgeist. It is a tool for easily browsing and finding files on your computer. It keeps a chronological journal of all file activity and supports tagging and establishing relationships between groups of files.

Right now Gnome Activity Journal(also called simply as Activity Journal) is a separate component from Zeitgeist. Zeitgeist is an umbrella term. The engine is the core component which logs events and exposes them via a DBus API. Activity Journal fetches this data from the Engine’s DBus API using the Python bindings.

Zeitgeist does not provide support for file tagging as Zeitgeist is not a file tracker. It is an event logger.

2) Logger or file search?

It is a history logger but not a true searching tool.

True. Use find command for searching files. You can search within the file if some event contains that file (like file was opened, close, modified). This functionality is provided by Zeitgeist fts extension. fts – Full text search.

3) Work of Activity Journal

Activity Journal is a tool for browsing and finding files on your computer.

Activity Journal is well.. an Activity Journal and not a file search tool.

4) Zeitgeist in GNOME3

The concept behind Zeitgeist is planned as an integral part of the upcoming release of the GNOME 3 shell.

Sadly, Zeitgeist is not a Gnome Project. Gnome-Activity-Journal  was rejected in a meeting in May 2010 and was announced by Vincent Untz on Wed, 2nd June 2010.  Since Activity Journal was rejected, so it did not make much sense to take in Zeitgeist engine too. Later, Seif asked whether we should apply again, but most of the team was not much interested as by that time Zeitgeist modules had not undergone any massive change which could got zeitgeist accepted in Gnome.

My take on re-application was “Don’t re-apply just for the sake of re-applying”

5) Zeitgeist and Gnome-shell

GNOME shell developers are touting this as one of the major changes in the new shell’s GUI

Citation needed!

Zeitgeist does have integration with Gnome Shell but still, any integration work takes time. Keep your fingers crossed.

6) Storage of events

The application stores your file access history in one central database for quick access. Any application can easily add its own data to the mix. But I found that not all programs are invited into this database.

Zeitgeist is written in Python and uses SQLite as database. This database is kept at $XDG_DATA_HOME/zeitgeist/activity.sqlite and can be opened with Sqliteman (at your own risk)

Yes, any application can add its own data to the daemon. These plugins in every applications are called dataproviders or datasources. Many of the dataproviders are present and most of them are packaged in Zeitgeist PPARhythmbox and Banshee dataproviders are upstream.

If you see that not all files are present in the database, you should understand that those applications are not pushing their information in the daemon. A plugin/extension/addin/addon is needed for that application whose work is to push the events to the daemon.

Thirdly, events in the daemon can also be pushed passively by zeitgeist-datahub which is a zeitgeist-extension and runs along with the daemon. It pushes data from GtkRecentManager to zeitgeist daemon. So all data which is available in GtkRecentManager is also present in zeitgeist daemon provided datahub is running along with the daemon (by default it does)

Zeitgeist is not magic. Some way or the other the event has to be logged. It is logged by many way or the other. Either by datahub or explicitly by extensions. We try out best to have extensions for every application, but still it would take some more time to come up with extensions for all major applications.

7) How events can be logged?

It is certainly a better option than looking through a file manager window filtered by date. But the journal app fails to track all of my files.

Reason is as explained. Try opening a file via command line – it doesn’t show up in zeitgeist daemon since datahub cannot find that event. Those files needs to be present in GtkRecentManager.

8 ) Dataproviders

For example, I use Note Case Manager to keep all my notes and gathered snippets of information. Activity Journal shows no record that I opened the Note Case database.

Then you need a plugin for Note Case Manager. I use Tomboy and you can see that it is tracked by the Tomboy dataprovider.

9) Not everything is logged

Also, the journal ignores files opened under Wine.

Yes. Wine is not supported. It is planned but not a very high priority as most people use Wine mostly for playing Games. We have limited manpower and endless list of action-items.

10) Where are events logged?

The tracking occurs even if you do not open the journal app.

Yes. This is because Journal is just a front end. The zeitgeist engine keeps on running even if you close the Journal. The events are not logged in Journal but in engine and journal fetches the data from the engine. Hope this makes it clear.

11) Activity Journal plug-ins

The Blacklist Manager lets you add and remove items from the Zeitgeist blacklist. It, too, appears to be worthless, as you cannot actually do anything with it.

The Blacklist API in its current form is sort of useless. I admit it as I have been assigned to work on it. We have still not reached on a grand consensus on the API since it is hard to come up with a good one. I was supposed to implement in this hackfest but could not attend.

12) Availability of Journal plug-ins

So far, it seems no other plug-ins are available to download and add. The journal’s interface has no menu option to import or create plug-ins.

True. If you can think of a functionality, please file a bug against gnome-activity-journal project on Launchpad and set it to Wishlist. We can implement them if feasible.

13) Extra Dataproviders for web usage

The skimpy online  documentation suggests that the journal will also track Web sites visited.

(The link is broken). It can track the websites you visited if you install the Firefox or chrome dataprovider. Right now none of them are packaged as we found it a bit tough. We are progressing towards it.

14) Pinning

I never figured out exactly what pinning a file does.

Pinning a file makes it accessible for your “Today” since people work on the stuff within the last 2-3 days which people want to keep in view. It is useful to pin stuff so that if you are not using them, they will always be visible for you.

15) Current version of Activity Journal

However, a more developed version within the GNOME 3 Shell or an improved version beyond 0.5.0.1 for the current GNOME shell might add to this app’s importance in my computing routine.

Activity Journal 0.6 is out. Download it or install it from our Zeitgeist PPA.

16) Further clarification and Ubuntu Developer Week session

Me an Seif are taking a session on Rocking with Zeitgeist during Ubuntu Developer Week. Be there if you want to ask any questions. Note down the timings:  Tuesday 1st March 19:00 UTC.

About these ads

12 comments on “A Re-Introduction to Zeitgeist

  1. Alejandro Nova says:

    17) Can I use Zeitgeist under KDE? ;)

  2. [...] We also got some media coverage which, as often goes, was not entirely accurate, so Manish took the time to straighten out the facts [...]

  3. Chronos says:

    Good article, thank you.

    Wonder if it will consume reasonable amount of resources.

  4. Anything to log nautilus activities yet (or any other file manager for that matter) ?

    • Manish says:

      You basically don’t need to worry about nautilus. If you open files by double clicking on them in nautilus, they would be logged by datahub

    • Adryelle says:

      gnome-pie[07:38:35:240415 WARNING] Error stating file /media/WIN7/Documents and Settings/Owner/Documents/My Music’: No such file or doirctery[07:38:35:240636 WARNING] Error stating file /media/WIN7/Documents and Settings/Owner/Documents’: No such file or doirctery[07:38:35:241155 WARNING] Error stating file /media/WIN7/Documents and Settings/Owner/Pictures’: No such file or doirctery[07:38:35:610354 ERROR ] g_icon_to_string: assertion `icon != NULL’ failed[07:38:35:610416 ERROR ] g_strsplit: assertion `string != NULL’ failed[07:38:35:610475 ERROR ] g_icon_to_string: assertion `icon != NULL’ failed[07:38:35:610514 ERROR ] g_strsplit: assertion `string != NULL’ failed[07:38:35:613978 ERROR ] g_icon_to_string: assertion `icon != NULL’ failed[07:38:35:614044 ERROR ] g_strsplit: assertion `string != NULL’ failed[07:38:35:614110 ERROR ] g_icon_to_string: assertion `icon != NULL’ failed[07:38:35:614154 ERROR ] g_strsplit: assertion `string != NULL’ failed[07:38:35:614214 ERROR ] g_icon_to_string: assertion `icon != NULL’ failed[07:38:35:614253 ERROR ] g_strsplit: assertion `string != NULL’ failed[07:38:35:614312 ERROR ] g_icon_to_string: assertion `icon != NULL’ failed[07:38:35:614351 ERROR ] g_strsplit: assertion `string != NULL’ failed[07:38:35:614411 ERROR ] g_icon_to_string: assertion `icon != NULL’ failed[07:38:35:614450 ERROR ] g_strsplit: assertion `string != NULL’ failed[07:38:35:620656 WARNING] Trying to add pie Slinger : ID 3014 already exists! Using 3015 instead [07:38:35:838839 WARNING] Icon window-manager not found! Using default icon [07:38:35:848723 MESSAGE] Started happily [07:38:44:118574 WARNING] Failed to set text from markup due to error parsing markup: Error on line 1: Entity did not end with a semicolon; most likely you used an ampersand character without intending to start an entity escape ampersand as &[07:38:44:212866 WARNING] Failed to set text from markup due to error parsing markup: Error on line 1: Entity did not end with a semicolon; most likely you used an ampersand character without intending to start an entity escape ampersand as &[07:38:44:228690 WARNING] Failed to set text from markup due to error parsing markup: Error on line 1: Entity did not end with a semicolon; most likely you used an ampersand character without intending to start an entity escape ampersand as &[07:38:44:228879 WARNING] Failed to set text from markup due to error parsing markup: Error on line 1: Entity did not end with a semicolon; most likely you used an ampersand character without intending to start an entity escape ampersand as &[07:38:45:263349 WARNING] pango_layout_set_markup_with_accel: Error on line 1: Entity did not end with a semicolon; most likely you used an ampersand character without intending to start an entity escape ampersand as &Assertion pthread_setspecific(t->key, userdata) == 0 failed at pulsecore/thread-posix.c:247, function pa_tls_set(). Aborting.AbortedBy the way, I have no idea why the mounting errors for my Windows 7 partition are showing up it doesn’t make any sense!

  5. [...] are 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 (with corrections in 22), 23, 24, 25, 26, 27, 28, 29, 30 (sorted by time). More than 1700 users have downloaded the 0.8.0 [...]

  6. myrkbn clidrp oryeekeyunl bsemsdhtpw

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s