Wrong understanding of the LeastRecentActors

Bug #646124 reported by Seif Lotfy on 2010-09-23
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Zeitgeist Framework
Fix Released
Low
Seif Lotfy

Bug Description

In an attempt to work on bug #641968 I discovered that we some of us defer on the understanding of LeastRecentActor

The documentation stated that LeastRecentActor = enum_factory(("The first event of each different actor"))

Let's assume we have sequential events. (The actors are defined by numbers)

2, 1, 3, 2, 1, 4

So we have 4 different actors (1,2,3,4) and we want to sort them by least recent.
the least recent is not 2 or 1 since they are used again at the end. the least recent is 3

This means LeastRecentActors should return the latest actors sorted ASC:

3, 2, 1, 4

and not

2, 1, 3, 4

When we look at LeastRecentSubjects = enum_factory(("One event for each subject only, "
  "ordered with oldest events first"))
My understanding according to Siegfried is:

<seif_> RainCT,
<seif_> LeastRecentSubjects = enum_factory(("One event for each subject only, "
<seif_> "ordered with oldest events first")
<seif_> so i f i have
<seif_> the subject
<seif_> 1, 2, 1, 3, 4
<seif_> what do i get returned
<seif_> 1, 2, 3, 4
<seif_> or
<seif_> 2, 1, 3, 4
<seif_> ?
<RainCT> seif_: the later
<RainCT> for each subject you only look at the most recent one
<seif_> ok then we should do the same for the actors :)
<RainCT> Yes. Isn't it like this already?
<seif_> no

In that case if we follow this convention I can update the doc strings and already have the bug fix for both this bug and #641968

Related branches

Seif Lotfy (seif) on 2010-09-23
Changed in zeitgeist:
assignee: nobody → Seif Lotfy (seif)
description: updated

Taking the LeastRecentSubjects example. I'm going to assume you have time=0 on the left and time>0 on the right: 1, 2, 1, 3, 4.

Then "One event for each subject only, ordered with oldest events first" would definitely mean: 1, 2, 3, 4. If we are sorting like RainCT is proposing then the docstring should probably be "The most recent event for each subject, ordered with the oldest events first" or something like that.

That said I am actually not sure at all what the right API is. WHich use cases do we have?

Seif Lotfy (seif) wrote :

Exactly.
The current docstring matches the current returns. IMHO both are wrong according to my and Siegfried's definition of LeastRecentActor. I do agree with your proposal of changing the docstring to "The most recent event for each subject, ordered with the oldest events first". Because it will match our definition of LeastRecentSubject. My concern is if its a API break?

Markus Korn (thekorn) wrote :

Seif, can you please give tow different usecases, one for the old definition of LeastRecentActors and one for your new one. Please also try to explain how changing the definition will influence real world usecases.

Download full text (3.2 KiB)

On Fri, Sep 24, 2010 at 12:37 PM, Markus Korn <email address hidden> wrote:

> Seif, can you please give tow different usecases, one for the old
> definition of LeastRecentActors and one for your new one. Please also
> try to explain how changing the definition will influence real world
> usecases.
>
> --
> Wrong understanding of the LeastRecentActors
> https://bugs.launchpad.net/bugs/646124
> You received this bug notification because you are a member of Zeitgeist
> Framework Team, which is subscribed to Zeitgeist Framework.
>
> Status in Zeitgeist Framework: New
>
> Bug description:
> In an attempt to work on bug #641968 I discovered that we some of us defer
> on the understanding of LeastRecentActor
>
> The documentation stated that LeastRecentActor = enum_factory(("The first
> event of each different actor"))
>
> Let's assume we have sequential events. (The actors are defined by numbers)
>
> 2, 1, 3, 2, 1, 4
>
> So we have 4 different actors (1,2,3,4) and we want to sort them by least
> recent.
> the least recent is not 2 or 1 since they are used again at the end. the
> least recent is 3
>
> This means LeastRecentActors should return the latest actors sorted ASC:
>
> 3, 2, 1, 4
>
> and not
>
> 2, 1, 3, 4
>
> When we look at LeastRecentSubjects = enum_factory(("One event for each
> subject only, "
> "ordered with oldest events first"))
> My understanding according to Siegfried is:
>
> <seif_> RainCT,
> <seif_> LeastRecentSubjects = enum_factory(("One event for each subject
> only, "
> <seif_> "ordered with oldest events first")
> <seif_> so i f i have
> <seif_> the subject
> <seif_> 1, 2, 1, 3, 4
> <seif_> what do i get returned
> <seif_> 1, 2, 3, 4
> <seif_> or
> <seif_> 2, 1, 3, 4
> <seif_> ?
> <RainCT> seif_: the later
> <RainCT> for each subject you only look at the most recent one
> <seif_> ok then we should do the same for the actors :)
> <RainCT> Yes. Isn't it like this already?
> <seif_> no
>
> In that case if we follow this convention I can update the doc strings and
> already have the bug fix for both this bug and #641968
>
>
>
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~zeitgeist
> Post to : <email address hidden>
> Unsubscribe : https://launchpad.net/~zeitgeist
> More help : https://help.launchpad.net/ListHelp
>

Ok let me try to explain it in terms of real applications:

10:00 Firefox access youtube.com
10:01 Opera access google.com
10:02 Chrome access youtube.com
10:03 Firefox access facebook.com
10:04 Opera access twitter.com
10:05 Firefox access google.com

Currently LeastRecentActor would give us:

10:00 Firefox access youtube.com
10:01 Opera access google.com
10:02 Chrome access youtube.com

Where it should give us:
10:02 Chrome access youtube.com
10:04 Opera access twitter.com
10:05 Firefox access google.com

because with the same criteria LeastRecentSubject gives us:
10:02 Chrome access youtube.com
10:03 Firefox access facebook.com
10:04 Opera access twitter.com
10:05 Firefox access google.com

and not:
10:00 Firefox access youtube.com
10:01 Opera access google.com
10:03 Firefox access facebook.com
10:04 Opera access twitter.com

Real World use cases would be ...

Read more...

Markus Korn (thekorn) wrote :

Ok, maybe there were some misunderstandings, I was looking for some real life questions...
Let's assume this one:
  "What were the first three actors accessing '/home/markus/seif.txt'"
With the current definition of LeastRecentActors the query would look like
  >>> template = Event.new_for_values(subject_uri="/home/markus/seif.txt")
  >>> events = FindEvents(TimeRange.Always(), [template,], Any, 3, LeastRecentActor)
  >>> actors = [e.actor for e in events]

This would not work anymore if we do the change you propose. So what I want you to tell me is:
  * How will the query look like in your definition?
  * Can you give me a similar question which gives a usecase for your definition?

2010/9/24 Markus Korn <email address hidden>:
>  * Can you give me a similar question which gives a usecase for your definition?

"Which were the applications I haven't used for the most time?"

--
Siegfried-Angel Gevatter Pujals (RainCT)
Free Software Developer       363DEAE3

Seif Lotfy (seif) wrote :

On Fri, Sep 24, 2010 at 2:59 PM, Markus Korn <email address hidden> wrote:

> Ok, maybe there were some misunderstandings, I was looking for some real
> life questions...
> Let's assume this one:
> "What were the first three actors accessing '/home/markus/seif.txt'"
>

This is not the same as "What were the lease recent actors accessing
'/home/markus/seif.txt'
One will give u the oldest events and the other will give u the latest
events sorted ASC.

> With the current definition of LeastRecentActors the query would look like
> >>> template = Event.new_for_values(subject_uri="/home/markus/seif.txt")
> >>> events = FindEvents(TimeRange.Always(), [template,], Any, 3,
> LeastRecentActor)
> >>> actors = [e.actor for e in events]
>
> This would not work anymore if we do the change you propose. So what I want
> you to tell me is:
> * How will the query look like in your definition?
>

The query will be the same the return however won't

> * Can you give me a similar question which gives a usecase for your
> definition?
>

I just did :)

>
> --
> Wrong understanding of the LeastRecentActors
> https://bugs.launchpad.net/bugs/646124
> You received this bug notification because you are a direct subscriber
> of the bug.
>
> Status in Zeitgeist Framework: New
>
> Bug description:
> In an attempt to work on bug #641968 I discovered that we some of us defer
> on the understanding of LeastRecentActor
>
> The documentation stated that LeastRecentActor = enum_factory(("The first
> event of each different actor"))
>
> Let's assume we have sequential events. (The actors are defined by numbers)
>
> 2, 1, 3, 2, 1, 4
>
> So we have 4 different actors (1,2,3,4) and we want to sort them by least
> recent.
> the least recent is not 2 or 1 since they are used again at the end. the
> least recent is 3
>
> This means LeastRecentActors should return the latest actors sorted ASC:
>
> 3, 2, 1, 4
>
> and not
>
> 2, 1, 3, 4
>
> When we look at LeastRecentSubjects = enum_factory(("One event for each
> subject only, "
> "ordered with oldest events first"))
> My understanding according to Siegfried is:
>
> <seif_> RainCT,
> <seif_> LeastRecentSubjects = enum_factory(("One event for each subject
> only, "
> <seif_> "ordered with oldest events first")
> <seif_> so i f i have
> <seif_> the subject
> <seif_> 1, 2, 1, 3, 4
> <seif_> what do i get returned
> <seif_> 1, 2, 3, 4
> <seif_> or
> <seif_> 2, 1, 3, 4
> <seif_> ?
> <RainCT> seif_: the later
> <RainCT> for each subject you only look at the most recent one
> <seif_> ok then we should do the same for the actors :)
> <RainCT> Yes. Isn't it like this already?
> <seif_> no
>
> In that case if we follow this convention I can update the doc strings and
> already have the bug fix for both this bug and #641968
>
>
>
> To unsubscribe from this bug, go to:
> https://bugs.launchpad.net/zeitgeist/+bug/646124/+subscribe
>

--
This is me doing some advertisement for my blog http://seilo.geekyogre.com

Markus Korn (thekorn) wrote :

We discussed this issue on IRC, a summary:
 * the current definition of LeastRecentActors is wrong, it should be "application I have not used for the longest time"
 * we need a new ResultType for the old definition ("The first event of each different actor"), something like OldestActor

The plan to fix this bug is:
 1.) Fix the initial issue described in bug 641968 (LeastRecentActors is not working together with templates)
 2.) land the fix for 1.) in lp:zeitgeist
 3.) rename LeastRecentActor into something like OldestActor (we still need a smart name for this)
 4.) reimplement LeastRecentActor to return the result as descibed in the various examples here
 5.) land 3.) and 4.) to lp:zeitgeist at the same time

Seif Lotfy (seif) on 2010-09-25
Changed in zeitgeist:
importance: Undecided → Low
status: New → Triaged
milestone: none → 0.6
Seif Lotfy (seif) on 2010-09-25
Changed in zeitgeist:
status: Triaged → In Progress
Seif Lotfy (seif) on 2010-09-25
Changed in zeitgeist:
status: In Progress → Fix Committed
milestone: 0.6 → 0.5.2
Changed in zeitgeist:
milestone: 0.5.2 → 0.6
milestone: 0.6 → 0.5.2
Changed in zeitgeist:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers