How can be sure that a TFS Collection is not in use? - tfs

I suspect that a specific collection is no more in use, but I want to do some check before moving it offline.
A query on tbl_Command gives data only for a couple of weeks and it is not enough for me.

Related

Query Firebase Data From Different Nodes

I have the following data structure.
And I want to do pagination/infinite scroll on this data by doing QueryOrderedByValue. The problem is I don't know how to query the data from two different branches at once. I know how to do with just one branch but not sure how to do it with two branches.
The current method I am doing now is running this through each branch:
metadataRef.queryOrderedByValue().queryEnding(atValue: highest).queryLimited(toLast: UInt(limit))
This is problematic because the data is no longer in order, and the array is likely reordered each time the data is pulled. If anyone has a solution for this, I'd be very grateful! Also, I am doing this in Swift, so swift code would be helpful too.
EDIT: The only other solution I can think of for this is to download all the data at once and then order them. But I worry this might be an issue when there's hundreds of thousands of entries.
Figured that I need a news feed node for each user. This is a good read if you are running into the same problem.
https://firebase.googleblog.com/2015/10/client-side-fan-out-for-data-consistency_73.html

Mining data across multiple Team Project in TFS 2013 for a particular User

Just like the title says, I would like to know if there is any way in TFS 2013 Update 4 to query a whole week-long activity for a certain User (a team member of a certain project) across multiple projects.
An example scenario will be as follows :
User_A is a team-member in Project_1, Project_2, and Project_3.
On Day_1, he performs some work in Project_1 (development : 2 hours, testing 1 hour). He also performs another work in Project_2 (bugfixing : 3 hours).
On Day_2, he continues his work in Project_2 (bugfixing : 2 hours). And then due to some circumstances, he is required to solve an urgent issue in Project_3 (3 hours).
And so on until Day_5, shifting back and forth through multiple projects.
Now, our PM would like to know the details of his work during this week (from Day_1 until Day_5).
Is it possible to generate data, perhaps through a query in TFS Web Access to aggregate data for
User_A in a given timespan ?
Thanks.
There are a number of questions in here and I will try my best to answer them all:
Query Across Team Project in Web Access
First, you can query in Web Access across multiple Projects by just removing the "Team Project" part of the query.
You can even create charts based on this data...
However for anything more complicated you should use the built in Reporting Services tool and the Data warehouse that comes with TFS. If you don't have it installed then you can add it.
http://nakedalm.com/integrate-reporting-and-analyses-services-with-team-foundation-server-2013/
This will gave you access to much more powerful reporting but it is much more complicated to configure. You get a cube (multi-dimensional data) and a warehouse (lists) that you can query to your hearts content both across team project and across collections.
Time Tracking in TFS
TFS is an effort management system and is not good at time management. While you can get a query to show you the amount of time applied to a Task you can tell when that time was applied without some serious giggery pokery. In TFS (well the MSF templates anyway) you store "Remaining", "Completed", and "Original Estimate".
So today I have a task that I completed 4 hours and tomorrow it will have a value of 8 hours in the completed field.
So did I complete 8 today? No, I only added 4.
What if I decided that it was only 3 the day after I entered the data? Can I fix it? No,
I could go on and on with the issues and caveats for trying to track time in TFS, however, if we just assume that it is not possible (or at least more effort than it is worth) then we are left with finding another solution. (Yes, I know there are third party tools that plug onto TFS and do time sheets or other stupid stuff, but they all have issues.)
I recommend tracking course grained time against a Project in a tool is separate from TFS, that is designed to collect this information. I have used Harvest and Freshbooks but there are other time sheeting systems out there. Do not integrate it with TFS. I have never once seen that work effectively and there is no value in it.
Is there value in tracking time - Not actually asked but it goes to the crux of the issue
The only demonstrable value I have ever seen in collecting time sheets is a) if you are billing your customers for that time, or b) you need to understand capex vs opex against a project. If both are true then a simple Project in Harvest with two tasks, one for Feature work and one for Maintenance work, will be sufficient and way simpler to manage.

TFS - Move tasks between Work Items

As a previous result of a bad TFS project management, several tasks has been created in the wrong work item. Now I need to move several tasks to different work items. Is there an easy way to do it?
So far, I have to edit each task, remove the previos link to primary element and create a new one, but this is taking a lot of my time.
I suspect that the easiest way to do it would be from Excel. Create a Tree-based query that shows everything, then move the child records in Excel using simple cut and insert cut cells. Excel will then allow you to publish the new structure in one go.
If you need to move items up to a higher or lower level, place the Title Field in the column representing the level.
See this little video I captured to show how it is done.
MS Project is extremely good with modifying hierarchies of work items. The steps are exactly the same as setting it up in Excel, but project inherently handles parent/child relationships, giving them a drag-and-drop interaction.
jessehouwing's Excel answer will be easier if you have never worked with project before.
Updated jesshouwing's comments are correct. Especially about the shivers.

What shouldn't I store in core data?

So this is more of an application design question. But I think it can be 'answered' and not just discussed. :)
I'm using RestKit for an application we're building. It obviously makes it super easy to put stuff into either straight objects or core data objects.
In the specific instance I'm dealing with, we have comments, much like comments on a facebook post.
Now, the nicest thing about storing these comments in core data is that with NSFRC I can sort them super easily and deal with updating/inserting automatically into the right spots into the timeline. But there's a couple sticking points there as well.
For instance with infinite loading, I now have to manage loading the comments in between the new most recent comments and the old stored comments. (Maybe the first time I grabbed 25, but there has been 100 new comments since then. So I retrieve the latest 25 first, then have to have an auto load cell in between the new comments and the old until I run into those, then have to paginate any after.
Aside from that, then you are also storing potentially thousands of comments in core data. Maybe it's not a big deal for quite a long time, but eventually you might want to start cleaning up old comments with a GCD task.
So what are the leading thoughts on what to store in core data, and what to keep as transient objects. (Maybe storing those in a cache like NSCache or the new Tumblr cache https://github.com/tumblr/TMCache).
Edit
Ok maybe I should clarify a little here. I get the purpose of Core Data... for persisting across app restarts and having an object graph with relationships. I make plenty of use of it. I guess what I'm wondering about here is the grey areas where I would like things to persist for the sake of not always having to wait for a network call, and offline availability.
But much like stories and comments on facebook, there are always going to be a constant stream of new ones coming in, and you don't necessarily care about 300 comments on an old post. Someone could come back to view comments on their 'post' quite a few times, or someone may just be browsing 'posts' and comments casually, and never coming back to them.
So I'm just trying to consider the strategy for something like this where you have potentially lots of entities (comments) coming down from a service. Sometimes people will want to view them several times (their own 'post') and sometimes they are just browsing through. When trying to see how others do this, it seems some stuff it all into core data, some (like Facebook) seem to store 25-50 most recent in the db, and any beyond that are transient (they probably are clearing out older stories and comments regularly too.)
Core Data is not designed to be used as "dumb data storage", but rather object persistence. So, anything that you want to persist between uses of your app should go into Core Data.
If you are using Core Data properly, it will take care of all of your caching for you as well.
EDIT:
Anything that is going to change too often for your taste or that you just don't want to permanently store, NSCache may be a better option. If you don't think your user will look at it again tomorrow, leave those bits out of your persistence. (IMHO)
Create a scond repository. Either select a time period that is known as 'recent' or provide a preference for such. Periodically look at the primary repository and find objects now older than the recent range, and move those objects to the scond repository.
Then provide users the means to search in just recent or all.
If all they want are recent values the searches should be faster, and nothing is lost.

Being able to save (multiple) changes without affecting database - structural issue

I'm developing a business web application which will maintain a database with several tables. One of the requirements are that one should be able to "save your work" without affecting the database and then later pick it up and continue working. Multiple "savings" must be supported.
This administration tool will be developed in ASP.NET MVC4 or Microsoft's LightSwitch, I haven't decided yet.
The problem I have is that I don't know how to solve this structurally, are there any known techniques to this problem? I need help by someone to point me in the right direction, I'm stuck here..
EDIT: I'll try to explain further with a scenario
I make a change to one row and save, but the change should only be visible to me (not affect the main database).
I realize the change in 1. is bad and choose to start over with changing the data in the same row, I also make a change to another row. I save these changes (but only for me)
Now I have two savings (from step 1 and 2), I change my mind and the changes made in 1. is correct and I open that "savefile" and commit the changes to main databse. I'll then delete the "savefile" from step 2.
Hope that makes the situation more clear.
Thanks
The easiest way that I can think of is to let the database do the work for you.
You could:
Just add some type of a "status" column ("committed", "uncommitted" etc) to the table, & filter out any "uncommitted" records in any grid that displays "real" data. You can then also filter
a different way in your editing grid, that only shows you
"uncommitted" records, or if you could save an ID instead of a status, if you
only want to see your own records.
Add another table to hold the uncommitted records, rather than
"pollute" the actual table with extra columns.
Does that make sense?
if you are really going to build a transactional type version control system, then you have a huge job ahead.
look at some popular tools like SVN and see the level of complication and features they support.
Rolling back a partial transaction inside a database - especially one with constraints and triggers will be very difficult. almost everything would run into an issue somewhere.
you may also consider storing uncommitted transactions outside the database - like in some local XML structure - then committing the components only once when desired.
either way, the interface for finding all the records and determining which ones to do what with will be a challenge - nevermind the original application.

Resources