You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@allura.apache.org by Simone Gatti <si...@gmail.com> on 2013/04/04 10:15:34 UTC

Re: User stats and organizations

Dear all,

Yesterday we uploaded the code concerning organizations' statistics and we
would be happy to get some feeback from anyone. This commit represents the
last part of the work we developed for our graduation thesis, and it
completes the code which includes organization profiles on the forge. You
can find everything on the branch si/5566.
Please, let us know what you think about it. Thank you!

Regards,
Simone


2013/3/13 Stefano Invernizzi <st...@gmail.com>

> Thank you for fixing the error related to SVN! We did not focus on errors
> from other tests, because we had some problems in running them even in the
> versions of the code which don't include our package. However, we have now
> figured out that we should take more care of it.
> Some of the errors we had were related to the fact we didn't have IPython
> and SQLAlchemy. Should we add them to the requirements-common file? I
> realized we only have them in requirements-sf.
> For what concerns the issues related to the session flush, I thought it was
> safer to have it within the code, but I was probably wrong and, as you
> said, it's probably useless to have an explicit flush. I removed it and
> everything still works, and tests are now successful. I was thinking about
> whether the failure we got was revealing some other issue, but I don't
> think so.
> Anyway, I run all the the tests of all the packages and everything looks
> fine now. Obviously, if there is something wrong in these fixes, let us
> know about it and we'll do our best to improve it.
> Thanks again for helping us to improve our code!
> Stefano
>
>
> 2013/3/12 Tim Van Steenburgh <tv...@gmail.com>
>
> > Hey guys,
> >
> > A couple things:
> >
> > 1. I force-pushed a fix for the failing SVN test.
> > 2. About your latest fix for the session flush failure: I think we may
> > want to dig deeper on this one. The Ming Session represents the
> collection
> > of objects that Ming knows about, be they new, updated, or deleted. When
> a
> > flush happens, Ming iterates through the objects in the Session and
> applies
> > them to the mongo - creating new documents, updating documents, deleting
> > documents. More specific to this code, if session(user) -> None, it means
> > that Ming doesn't know about that user, which is worrisome at best.
> Another
> > thing to note is that Allura uses some Ming middleware to issue a flush
> at
> > the end of each web request, so explicit flushes in user-code are often
> not
> > necessary at all.
> > 3. After fixing the SVN test, I discovered that many ForgeTracker tests
> > are failing now too, possibly related to the issue above. This needs to
> be
> > investigated as well.
> >
> > Please have a look and see what you can do. If you get stuck or need more
> > help, feel free to post back here.
> >
> > Tim
> >
> >
> > On Saturday, March 9, 2013 at 10:35 AM, Stefano Invernizzi wrote:
> >
> > > Great! The error should be fixed now. Thank you very much!
> > > Stefano
> > >
> > >
> > > 2013/3/8 Tim Van Steenburgh <tvansteenburgh@gmail.com (mailto:
> > tvansteenburgh@gmail.com)>
> > >
> > > > Okay, that seems to be working now. Things are looking pretty good -
> > > > getting close to merging! I decided to run the tests one more time,
> > and hit
> > > > an error. If you guys can get the tests passing, I think we'll be
> > ready to
> > > > merge.
> > > >
> > > >
> ======================================================================
> > > > ERROR:
> > > >
> >
> allura.tests.unit.test_post_model.TestPostModel.test_that_it_can_be_approved
> > > >
> ----------------------------------------------------------------------
> > > > Traceback (most recent call last):
> > > > File
> > > >
> >
> "/var/local/env-allura/lib/python2.7/site-packages/nose-1.1.2-py2.7.egg/nose/case.py",
> > > > line 197, in runTest
> > > > self.test(*self.arg)
> > > > File
> > > >
> >
> "/home/tvansteenburgh/tvansteenburgh-9044/forge/Allura/allura/tests/unit/test_post_model.py",
> > > > line 18, in test_that_it_can_be_approved
> > > > self.post.approve()
> > > > File
> > > >
> >
> "/home/tvansteenburgh/tvansteenburgh-9044/forge/Allura/allura/model/discuss.py",
> > > > line 575, in approve
> > > > self.commit()
> > > > File
> > > >
> >
> "/home/tvansteenburgh/tvansteenburgh-9044/forge/Allura/allura/model/artifact.py",
> > > > line 382, in commit
> > > > self.type_s, self.mod_date, self.project, c.user)
> > > > File
> > > >
> >
> "/home/tvansteenburgh/tvansteenburgh-9044/forge/Allura/allura/eventslistener.py",
> > > > line 41, in newArtifact
> > > > self.__iterate('newArtifact', art_type, art_datetime, project, user)
> > > > File
> > > >
> >
> "/home/tvansteenburgh/tvansteenburgh-9044/forge/Allura/allura/eventslistener.py",
> > > > line 38, in __iterate
> > > > getattr(l, event)(*d)
> > > > File
> > > >
> >
> "/home/tvansteenburgh/tvansteenburgh-9044/forge/ForgeUserStats/forgeuserstats/main.py",
> > > > line 28, in newArtifact
> > > > stats = UserStats.create(user)
> > > > File
> > > >
> >
> "/home/tvansteenburgh/tvansteenburgh-9044/forge/ForgeUserStats/forgeuserstats/model/stats.py",
> > > > line 29, in create
> > > > session(user).flush(user)
> > > > AttributeError: 'NoneType' object has no attribute 'flush'
> > > >
> > > >
> > > > Tim
> > > >
> > > >
> > > > On Thursday, March 7, 2013 at 5:49 PM, Stefano Invernizzi wrote:
> > > >
> > > > > I was not able to recreate your problem, but I realized there was
> an
> > > > error
> > > > > in the code I committed yesterday, and this error is probably the
> > reason
> > > > > why you got the reported exception. I changed it and I hope this
> > fixed
> > > > >
> > > >
> > > > the
> > > > > problem. If the issue is still there, let me know about it.
> > > > > Stefano
> > > > >
> > > > >
> > > > > 2013/3/7 Tim Van Steenburgh <tvansteenburgh@gmail.com (mailto:
> > tvansteenburgh@gmail.com) (mailto:
> > > > tvansteenburgh@gmail.com (mailto:tvansteenburgh@gmail.com))>
> > > > >
> > > > > > Pulled the latest changes, dropped the userstats collection,
> > pushed a
> > > > > > commit to my test repo, refreshed the commiter's stats page, and
> > got
> > > > > >
> > > > >
> > > > >
> > > >
> > > > this:
> > > > > >
> > > > > > File
> > > >
> >
> '/home/tvansteenburgh/tvansteenburgh-9044/forge/ForgeUserStats/forgeuserstats/controllers/userstats.py',
> > > > > > line 124 in index
> > > > > > ret_dict['discussionpercentage'] = stats.discussionRanking()
> > > > > > File
> > > > > >
> > > > >
> > > >
> > > >
> >
> '/home/tvansteenburgh/tvansteenburgh-9044/forge/Allura/allura/model/contrib_stats.py',
> > > > > > line 143 in discussionRanking
> > > > > > disccontr = self.getDiscussionContribution()
> > > > > > File
> > > > > >
> > > > >
> > > >
> > > >
> >
> '/home/tvansteenburgh/tvansteenburgh-9044/forge/Allura/allura/model/contrib_stats.py',
> > > > > > line 87 in getDiscussionContribution
> > > > > > tot = artifact.created+artifact.modified
> > > > > > TypeError: unsupported operand type(s) for +: 'NoneType' and
> > 'NoneType'
> > > > > >
> > > > > >
> > > > > > Tim
> > > > > >
> > > > > >
> > > > > > On Wednesday, March 6, 2013 at 4:40 PM, Stefano Invernizzi wrote:
> > > > > >
> > > > > > > Yes, there was an error in the initialization of the stats
> > object. I
> > > > hope
> > > > > > > it's ok now.
> > > > > > > Thank you for reporting it!
> > > > > > > Stefano
> > > > > > >
> > > > > > >
> > > > > > > 2013/3/5 Tim Van Steenburgh <tvansteenburgh@gmail.com (mailto:
> > tvansteenburgh@gmail.com) (mailto:
> > > > tvansteenburgh@gmail.com (mailto:tvansteenburgh@gmail.com)) (mailto:
> > > > > > tvansteenburgh@gmail.com (mailto:tvansteenburgh@gmail.com))>
> > > > > > >
> > > > > > > > Stefano & Simone,
> > > > > > > >
> > > > > > > > Hey guys. Have been doing some more review on Userstats
> today.
> > I
> > > > > > > > force-pushed a couple small changes to origin/si/5453, so
> make
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > sure you
> > > > > > > > pull those.
> > > > > > > >
> > > > > > > > I ran into an error in the stats code after pushing a commit.
> > It
> > > > was a
> > > > > > > > Ming schema validation error:
> > > > > > > >
> > > > > > > > 208 [Tue Mar 05 22:29:05 2013] [error] [client 127.0.0.1]
> File
> > > >
> >
> '/var/local/env-allura/lib/python2.7/site-packages/Ming-0.3.2dev_20121101-py2.7.egg/ming/schema.py',
> > > > > > > > line 327 in _validate
> > > > > > > > 209 [Tue Mar 05 22:29:05 2013] [error] [client 127.0.0.1]
> raise
> > > > > > > > Invalid(msg, d, None, error_dict=error_dict)
> > > > > > > > 210 [Tue Mar 05 22:29:05 2013] [error] [client 127.0.0.1]
> > Invalid:
> > > > > > > > general:[0]:messages:Not a list or tuple
> > > > > > > > 211 [Tue Mar 05 22:29:05 2013] [error] [client 127.0.0.1]
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > tickets:notdict:
> > > > > > > > []
> > > > > > > >
> > > > > > > >
> > > > > > > > Here's the mongo doc:
> > > > > > > >
> > > > > > > > {
> > > > > > > > "_id" : ObjectId("5136502261b3b44a93a7b36f"),
> > > > > > > > "lastmonth" : {
> > > > > > > > "assignedtickets" : [ ],
> > > > > > > > "commits" : [
> > > > > > > > {
> > > > > > > > "programming_languages" : [ ],
> > > > > > > > "lines" : 1,
> > > > > > > > "categories" : [ ],
> > > > > > > > "datetime" :
> > > > > > > > ISODate("2013-03-05T22:28:22.341Z")
> > > > > > > > }
> > > > > > > > ],
> > > > > > > > "solvedtickets" : [ ],
> > > > > > > > "messages" : [ ],
> > > > > > > > "revokedtickets" : [ ]
> > > > > > > > },
> > > > > > > > "user_id" : ObjectId("510ad21c61b3b426260e7586"),
> > > > > > > > "lastmonthlogins" : [ ],
> > > > > > > > "tot_logins_count" : 0,
> > > > > > > > "registration_date" : ISODate("2013-03-05T20:05:54.676Z"),
> > > > > > > > "general" : [
> > > > > > > > {
> > > > > > > > "tickets" : [ ],
> > > > > > > > "commits" : [
> > > > > > > > {
> > > > > > > > "lines" : 1,
> > > > > > > > "number" : 1,
> > > > > > > > "language" : null
> > > > > > > > }
> > > > > > > > ],
> > > > > > > > "category" : null,
> > > > > > > > "messages" : {
> > > > > > > > "assigned" : 0,
> > > > > > > > "solved" : 0,
> > > > > > > > "totsolvingtime" : 0,
> > > > > > > > "revoked" : 0
> > > > > > > > }
> > > > > > > > }
> > > > > > > > ],
> > > > > > > > "visible" : false,
> > > > > > > > "last_login" : null
> > > > > > > > }
> > > > > > > >
> > > > > > > >
> > > > > > > > As you can see, `general.tickets` is a list, not a dict, but
> > it's
> > > > > > defined
> > > > > > > > as a dict in the schema. Maybe you guys could track that
> down?
> > > > > > > >
> > > > > > > > Tim
> > > > > > > >
> > > > > > > >
> > > > > > > > On Sunday, March 3, 2013 at 4:35 AM, Stefano Invernizzi
> wrote:
> > > > > > > >
> > > > > > > > > Thanks Dave for your suggestion! I modified the
> bootstrap.py
> > > > file, so
> > > > > > > > that
> > > > > > > > > when the Users neighborhood is created, our tool for
> > userstats is
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > set as
> > > > > > > >
> > > > > > > > an
> > > > > > > > > anchored tool, and it perfectly works. However, that way,
> if
> > you
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > do
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > not
> > > > > > > >
> > > > > > > > run
> > > > > > > > > the bootstrap.py, you have to manually add the tool to the
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > anchored
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > ones.
> > > > > > > > > And this is what happens in most cases for users who don't
> > want
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > to
> > > > > > > > > re-initialize the forge.
> > > > > > > > >
> > > > > > > > > I was also thinking about the setting in the .ini file to
> > enable
> > > > > > > > userstats.
> > > > > > > > > I think it doesn't make sense to disable them now that
> stats
> > are
> > > > > > > > > implemented as a tool. By setting userstats.enable = false,
> > the
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > > > tool
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > is
> > > > > > > > > still installed for users who were using it, therefore I
> > think
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > it's
> > > > > > > >
> > > > > > > >
> > > > > > > > better
> > > > > > > > > to remove this option, since it would be confusing. That
> > way, a
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > > > user
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > who
> > > > > > > > > wants to install the forge without using userstats can
> simply
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > avoid
> > > > > > > > > installing the ForgeUserStats tool. I committed this change
> > too,
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > > > but
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > if
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > you
> > > > > > > > > think it's better to think again about it, I'm open to
> > different
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > proposals.
> > > > > > > > > Thanks again,
> > > > > > > > >
> > > > > > > > > Stefano
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > 2013/3/2 Simone Gatti <simone.gatti88@gmail.com (mailto:
> > simone.gatti88@gmail.com) (mailto:
> > > > simone.gatti88@gmail.com (mailto:simone.gatti88@gmail.com)) (mailto:
> > > > > > simone.gatti88@gmail.com (mailto:simone.gatti88@gmail.com))
> > (mailto:
> > > > > > > > simone.gatti88@gmail.com (mailto:simone.gatti88@gmail.com))>
> > > > > > > > >
> > > > > > > > > > Dear Dave,
> > > > > > > > > > I have changed the preference page in order to meet these
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > requests.
> > > > > > > > > > I created two new pages to collect data about contacts
> and
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > availability.
> > > > > > > > > > In the preference page, over the links, it is now
> indicated
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > > > that
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > these
> > > > > > > > > > personal data are not compulsory.
> > > > > > > > > > In this way, the preference page will no more become so
> > long
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > due to
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > data
> > > > > > > > > > about contacts and availability precedently inserted by
> the
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > > > user,
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > and
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > the
> > > > > > > > > > forms not necessary are not disclosed.
> > > > > > > > > > About general personal data, I decided to leave its
> > original
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > form
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > in
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > the
> > > > > > > > > > preference page, because it has fixed size and refer to
> > general
> > > > > > > > > > information, but I put an explicit indication that they
> are
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > discretionary.
> > > > > > > > > > Please, let me know what do you think about these
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > modifications.
> > > > > > > > > > Thanks,
> > > > > > > > > > Simone
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > 2013/2/18 Dave Brondsema <dave@brondsema.net (mailto:
> > dave@brondsema.net) (mailto:
> > > > dave@brondsema.net (mailto:dave@brondsema.net)) (mailto:
> > > > > > dave@brondsema.net (mailto:dave@brondsema.net)) (mailto:
> > > > > > > > dave@brondsema.net (mailto:dave@brondsema.net))>
> > > > > > > > > >
> > > > > > > > > > > Cory, I think Stefano is referring to user stats, which
> > his
> > > > > > feature
> > > > > > > > > > branch
> > > > > > > > > > > starts collecting, not user profile data (gender,
> > location,
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > etc).
> > > > > > > > > > >
> > > > > > > > > > > But on the topic of user profiel data, we've had a
> least
> > one
> > > > > > > > SourceForge
> > > > > > > > > > > user
> > > > > > > > > > > communicate to use that he/she thought the fields were
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > > > required.
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > I
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > can
> > > > > > > > > > > see how
> > > > > > > > > > > this might be inferred since they're the first thing
> you
> > see
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > on
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > the
> > > > > > > > > > > /auth/prefs/
> > > > > > > > > > > form. We might consider labelling those optional, or
> > putting
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > them on
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > a
> > > > > > > > > > > separate
> > > > > > > > > > > page from "subscriptions" and other sections on that
> > page.
> > > > > > > > > > >
> > > > > > > > > > > -Dave
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > On 2/18/13 9:55 AM, Cory Johns wrote:
> > > > > > > > > > > > Stefano,
> > > > > > > > > > > >
> > > > > > > > > > > > Could a user simply not fill in the personal info
> > fields
> > > > they
> > > > > > don't
> > > > > > > > > > wish
> > > > > > > > > > > to
> > > > > > > > > > > > share? What is the value of entering that info but
> > then not
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > displaying
> > > > > > > > > > >
> > > > > > > > > > > it;
> > > > > > > > > > > > to encourage users to enter it if only for our
> > edification?
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > Thanks,
> > > > > > > > > > > >
> > > > > > > > > > > > Cory
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > On Sat, Feb 16, 2013 at 9:53 AM, Stefano Invernizzi <
> > > > > > > > > > > > stefano.invernizzi88@gmail.com (mailto:
> > stefano.invernizzi88@gmail.com) (mailto:
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > stefano.invernizzi88@gmail.com (mailto:
> stefano.invernizzi88@gmail.com))
> > (mailto:
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > stefano.invernizzi88@gmail.com (mailto:
> > stefano.invernizzi88@gmail.com))
> > > > (mailto:
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > stefano.invernizzi88@gmail.com (mailto:
> > stefano.invernizzi88@gmail.com) (mailto:
> > > > stefano.invernizzi88@gmail.com (mailto:
> stefano.invernizzi88@gmail.com
> > )))>
> > > > > > wrote:
> > > > > > > > > > > >
> > > > > > > > > > > > > Dear all,
> > > > > > > > > > > > >
> > > > > > > > > > > > > I recently pushed some new commits allowing a
> single
> > > > user to
> > > > > > > > hide his
> > > > > > > > > > or
> > > > > > > > > > > > > her personal statistics. I and Simone implemented
> it
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > > > since
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > some
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > users
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > may
> > > > > > > > > > > > > prefer not to show this data. In that case, data is
> > still
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > available
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > for
> > > > > > > > > > > > > their personal use. However, if you think we should
> > not
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > allow
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > users to
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > do
> > > > > > > > > > > > > this, we can simply put it back as it was.
> > > > > > > > > > > > > As usual, we hope to get some feedbacks from you
> > about
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > > > this,
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > as
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > well
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > as
> > > > > > > > > > > > > about the rest of submitted code.
> > > > > > > > > > > > > It would be great for us if the code could be
> > reviewed
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > and,
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > if
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > you
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > think it
> > > > > > > > > > > > > would be useful, included on the forge before we
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > complete the
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > thesis
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > we
> > > > > > > > > > > are
> > > > > > > > > > > > > working on.
> > > > > > > > > > > > > Thank you very much!
> > > > > > > > > > > > > Stefano
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > --
> > > > > > > > > > > Dave Brondsema : dave@brondsema.net (mailto:
> > dave@brondsema.net) (mailto:
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > > > dave@brondsema.net (mailto:dave@brondsema.net))
> > > > > > > > > > > http://www.brondsema.net : personal
> > > > > > > > > > > http://www.splike.com : programming
> > > > > > > > > > > <><
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> > >
> >
> >
> >
>