Three items were the focus of my attention today. Well, rather 2, and the 3rd I just saw over on daily tech and it got me very excited. MSF for CMMI I have been reviewing the process guidance for MSF for CMMI version 4.2 which ships with TFS 2008. I plan on using this process as the foundation on my next software development project. While out of the box it is a bit of an overkill for my team, project and company, I prefer to start with more (process) and remove what I don't need. I also feel that CMMI is a great compromise between management, who is used too, and wants a more traditional software development approach, and the developers, such as my self who are advocating a more agile process. The great thing about MSF for CMMI is that it is written around agile concepts, yet still has processes in place for oversight. The process guidance, is written in HTML, making it very easy to edit and customize it after the project is created to meet your needs. There is a way to edit the template so that it generates the new project to meet your needs, but I figure this way is easier for the first go around. My plan is to make changes to the HTML as needed, and then create a new template. In addition to tracking my changes, you can use a tool like WinMerge to compare your modified document library with a default one. You can access a document library via windows explorer by going to the document library and choosing open in explorer from the actions menu. This creates a UNC path in the form of \\SharepointServer\Sites\SiteName\Process Guidance, which you can supply to WinMerge. I have spent some time going over the default tasks that are created with a new CMMI based project to see what workstreams and activities they relate to, and I think I have a pretty good handle on the first two tracks. I plan on documenting this in a future post. Requirements Oil and Water, Superman and Kryponite, Me and Requirements. I am having some difficulties in creating a formal software requirements specification, using this book as a guide. It's not the books fault (although I wish it hand an end to end case study of a project), but rather a differing of opinion on some of the definitions (which that end to end case study might help with). - Where is the line between Use Cases and Functional Requirements? Use cases look a lot like test plans to some people, and have a tendency to add test plan like information to them, which I feel is incorrect.
- Where is the line between systems and users in the use cases?
- How much detail is the right amount of detail?
Similar to my quest to gain a better understanding in the use of TFS and the MSF for CMMI, I'm going to have to put some time into researching (primarily looking for examples) software requirements. In addition to the book, which we now have 6 copies of at work, I found this website with some additional templates, as well as fairly detailed article on writing requirements from the perspective of a technical writer. There appear to be some good articles over at wikipedia as well, such as Requirements Analysis and Use Cases, and Use Case Diagrams. Someone today asked the question about how do all the use cases get related, and I believe the answer is the use case diagram (at least one use for a use case diagram), as illustrated in the example on Wikipedia. I hope to be able to report back with some answers to my questions sometime in the future. NVidia Application Processor Daily Tech had an article on the NVidia APX 2500 application processor which is designed to add hi-def capabilities to mobile devices. The article states that NVidia has been working with Microsoft, so once can assume (as does the author of the article), that this is destined for a Windows Mobile application. I've really been giving my HTC Mogul a work out and have always wanted a all in one device (video, mp3, phone, PDA, etc), so I am very excited about this. Since I have a bias against Apple, I am not a fan of the iPhone, although I can appreciate and respect what it is. This gives me some hope that my next Windows Mobile phone will be a force to be rekon with. In addition to smart phones, I can also see this making it's way to other embedded systems, especially something like a mall kiosk. This brings me to the second reason that I am excited, and that is, my current software project is all about embedded systems running Windows CE. I have some future customer requirements that could take advantage of the functionality provided by this chip.
Back in September I wrote a blog post title Collaborate with Myself, in which I talked about various ways to write down and store information, as well as syncing that information between multiple computers. I wanted to take some time to write an update. Of all the software I blogged about, OneNote, Groove and Live Writer are probably the one's that I have used the most in the past 5-6 months. What am I Using Groove Currently I have 5 workspaces: IE Favorites, KeePass, Live Writer (Drafts), OneNote Notebooks, and Work Documents. I have had very few problems syncing between 2 computers, and only a couple of times were there were conflicts, primarily a result of groove not running on one of the computers. IE Favorites are kept in sync, although sometimes the order in which they are displayed is not the same. The first time this happened, I thought that syncing wasn't working at all. KeePass is a great program to store passwords in. I maintain 3 password "databases" and all 3 available at work and home. With Live Writer, I sync the My Weblog Posts folder, which contains drafts and recently posted. Having the drafts sync is great. I can start a post at work, and finish it at home or vice versa. One Note syncs just fine, and if there is a conflict it's pretty easy to spot because you get a new tab that has the word Copy in it. Finally, I just started syncing my work documents, as it's nice to have them available at home without requiring some sort of remote access. It's also my way of backing them up (DTA = Don't Trust Anybody). Live Writer Not much to report on Live Writer, other then it works as advertised. I added a plug-in to format source code in posts, and that's about it. The only thing I have to log into my blog for is if I want to add a track back. I'm up to 89 posts, and except for a couple of posts I've brought over from a different blog, all of been created with Live Writer. One Note OneNote is a great program that I have started using on a daily basis. I have the quick launcher in the system tray so all I have to do is press Shift+Windows+N to bring it up. I'll write something down, close OneNote (as my task bar gets so full during the day) and can bring it back up with ease. I've used OneNote to record meeting notes, project ideas, book notes, track trouble shooting steps during my on-call rotations. I have a Personal and Work notebook, each with several tabs, and Groove keeps everything in sync. Looking back at my first post, I am not even using the features I blogged about, but am still finding great value. This is the perfect opportunity to revisit some of those features and see if I can make use of them. Unfortunatly I still haven't gotten a tablet PC. I was looking on Ebay again today, but just couldn't pull the trigger on buying one as I have some other expenses coming up, including a possible roller hockey tournament in Cincinnati, OH. I need to put some thought into how I can justify it as a work expense. On the one hand, it would make taking notes during meetings more efficient, but I'm really trying to limit the number of meetings I'm in, as it means I'm not getting much development time in. What I'm Not Using (yet) Wiki I did finally get some Wiki software installed on the website, but there is no content on it yet. I still need to get backups setup and play around with the software a little more before I commit any serious time to writing content for it. I have chosen ScrewTurn Wiki as it's an asp.net file based Wiki, which also has support for running offline. With the launch of http://wiki.asp.net I am a little more encouraged to move forward with my own Wiki, although I am interested to see if Telligent does in fact release a community version of the Wiki software, although I suspect the data store will be SQL which I think is overkill for my needs. One thing that is lacking from ScrewTurn is page level, or category level security. While I realize that a Wiki is all about collaboration and public involvement, some of the pages I would want to restrict access to. The reason for this, is that I see the Wiki acting as somewhat of a CMS for my site in certain instances. Sharepoint (at home) I did finally get Sharepoint installed at home, if for no other reason then to try out the 40 some Sharepoint templates provided by Microsoft. Currently I'm playing around with the Stock tracker template (not the official name), and Lending Library. I defiantly like Sharepoint and the templates, but it's hard to get too excited when you are the only one using the Sharepoint Site. Even though I have changed the wife's home page to the Sharepoint site, she still doesn't read the announcements and calendar. I bet if I put the project management template on there and told she would use it ;)
I am adding my name to the list of developers who have not heard about the InternalVisibleTo attribute. I came across this while checking out Derik Whittaker's blog in response to the email I got saying that Derik will be presenting at this month's Milwaukee area .Net Users Group. The InternalVisibleToAttribute was added in .Net 2.0 and most people seem to be using it in order expose internal methods to external unit test classes. However, there is nothing to prevent you from using it in non-testing situations., although I have not seen a good reason other then unit testing to use it. The MSDN documentation talks about the special case of applying the attribute to a strong named friend assembly. This is also a C# only attribute.
Scott Hanselman today announced the Asp.Net Wiki (Beta). "The idea is that folks spend a lot of time trolling the blogs, googling live-searching for answers to common "How To" questions. There's piles of fantastic community-created and MSFT-created content out there, but if it's not found by a search engine and the right combination of keywords, it's often lost." I think it's a great idea and I hope to see other product groups at Microsoft follow suit. Since it's linked off http://www.asp.net, and a Microsoft entity, I see it quickly becoming the one stop shop for Asp.Net information. If you jump on and contribute to the wiki right now, you could be a top contributor, at least for a couple of days.
Jeff Atwood wrote about databases under version control in a recent blog posting. In it he advocates that you should put the goal of getting your database into source control above things such as what tools and processes to us as per the Agile Manifesto. We have met this goal, and our database is under version control, however, I feel it has become a cumbersome and time consuming process (although my I have a lot shorter time working with the process then the other developers so maybe I'm missing some tricks). I have been thinking of ways to improve upon the process. Also in Jeff's post, are links to a series of 5 posts by K. Scott Allen in which he explains how he does database version control. Some of his points match up with what I have been thinking, some don't. That, in and of itself further proves a my idea that no process is perfect, and what works for someone may not work exactly for you. K Scott Allen's Posts: - Three rules for database work
- The Baseline
- Change Scripts
- Views, Stored Procedures and the Like
- Branching and Merging
I recommend that interested parties take the time to read the posts, as what follows is a brief overview. - 3 rules for databases: Never use a shared database for development work, Always have a single schema source (source control), Always version your database.
- Create a baseline script. This is a single script for your tables. Your derived objects (stored procedures, views, etc).
- Change scripts are used to update the baseline, and should include an insert statement into your custom version table.
- Derived objects (stored procedures, views), are updated, by making changes to the individual file corresponding to the objects. These changes are checked into source control. All derived objects are dropped and recreated from the script files. If you add a new object, create a new file, if you need to delete an object, delete the file. Once thing I don't understand, is how are these "versions" related to the schema version? One of the points made is that you should be able to create a database from any point in time. This process covers the schema well, but you would have to hunt thru source control to find the collection of files that relate to that version. Perhaps this is a necessary trade off.
- Branching and merging depend on how you branch your application. The example given, is that when it gets close to a release, functionality is frozen and a branch is made for the release. Only bug fixes go into the branch and new features for the next version go into the main trunk. For the database, this means a new baseline script is created for the new version, which is a point in time snapshot of the database at the time of the branch. If there are changes in the branch, those changes are duplicated as a change script in the main trunk. You just have to be careful that the main trunk script is written in a way that it checks to see if the branch script has been run. (See the actual post for a better explanation).
Finally, I somehow got to this post by Phil Haack, in which he describes how using the information_schema views (see his post, and Books Online for a listing of what you can get from the views) will help future proof your scripts, because as Phil points out, Microsoft makes no guarantees on the schemas of the system tables. As I posted before, I'm now heading up our embedded device project, so I won't be working on our uber back-end database as much. While we have a need for a database in the embedded project, I'm strongly considering using DB for Objects (db4o). While there is a bit of a learning curve, it looks pretty easy to use. My plan is to use db4o to start out and then re-evaluate our database needs at the end of the project, hopefully saving the time it takes to manage a data access layer, scripts, etc. This would also make a cost benefit analysis of db4o easier, as I can simply estimate the time it would take to implement a traditional RDBMS and compare that to the cost of db4o.
One of the goals I am working on at work, is a revitalization of our use of Team Foundation server, starting with a new project that I am leading. While we have always used TFS, I do not think that we are taking full advantage of its features. Part of the reason I think, is because there is so much good information that you really have to take some time to understand what it's telling you. In the past week, I re-discovered the Process Guidance section of the Share Point site which is created when you create a new TFS project. I have been going thru each tab and sub section trying to gain a better understanding for how to use, and interpret the data. One particular section that I have over looked in the past, is the Index tab. As it sounds, the index tab displays a list of all the topics covered in the process guidance (and then some), broken down by group (Workstreams, Activities, Work Items, Work Products, Reports, Queries and How To's). I have been looking into the CMMI template, so you may not have all of what is listed below. Workstreams From the process guidance: "Workstreams are groups of activities that flow logically together and are often associated with a particular role." Activities Activities are the specific individual activities that make up a workstream. Work Items From the process guidance: "A work item is a database record which Visual Studio Team Foundation uses to track the assignment and state of work. The MSF for CMMI Process Improvement process defines seven work items to assign and track work. These seven work items are task, change request, risk, review, requirements, bug, and issue." Work Products From the process guidance: "Work products are files, documents, specifications, binaries, parts, and other tangible items that are necessary to complete activities and build the product. Many times the creation of one work product is dependent on the completion of another work product." Most of the definitions given here, relate to the document templates which are created with each new SharePoint site. For the CMMI template, you need to click on Documents from the quick launch menu, then general documents to find the templates. Reports From the process guidance: "Project health charts aggregate metrics from work items, source control, test results, and builds. They answer questions about the actual state of your project at many scales: for the days within an iteration, iterations within a project, or projects with in a program. The questions are also relevant for many kinds of work items such as scenarios, quality of service requirements, tasks, and bugs." Each report gets a description, as well as healthy and unhealthy examples. This is great reading material for management to help them to understand how they can take advantage of TFS (It's not just for developers). Queries This index lists the pre-defined queries and that they are designed to show. Again, a good way to show management how they can keep an eye on the project without relying exclusively on MS Project (it's not a bad tool, but it's not the only tool). How To's From the process guidance: "How To's present information on how to accomplish tasks related to activities and workstreams" There are 8 how to's that cover enough to get you started with the template. I wish they had more how to's and examples, and even a complete project walk thru, but I guess they needed to leave something for partners and book writers. Speaking of books, I am currently reading Software Engineering with Microsoft Visual Studio Team System, which is a book on how to use TFS in the context of Project Management. I have also seen this book, Visual Studio Team System: Better Software Development for Agile Teams, which looks very interesting as it has a book length case study. Unfortunately I can really only read 1 book at a time, but I think I will defiantly be looking to buy this book soon. Look for more posts of TFS and possibly project management in the future.
While surfing the web, I found some interesting news, that there was a leaked beta for my cell phone, a HTC Mogul (HTC Titan, PPC 6800) which finally enables the GPS and EDVO-Rev A. I decided to look into this more, as well as give it a try. ** WARNING: I assume no responsibility if you brick your phone. Be sure to spend at least 1 HOUR reading thru all of the directions (in the forums) before proceeding. Also, BE SURE to back up your PST settings ** Resources: I was having issues getting the ROM and Radio updates to go over active sync, but I found these instructions on how to flash the ROM from an SD Card. - First open the ROM or Radio exe file with WinRar. There will be a .nbh file. Extract that and rename it to TITAIMG.nbh
- Next format a microSD card with FAT 32 (you will most likely have to do this as most are FAT16 by default). Copy the file TITAIMG.nbh to the root of the sd card with a card reader.
- Finally place sdcard in device and reset into bootloader mode (press and hold the power button and the camera button while pushing the reset button). The flash will proceed from the SD card and it should work fine.
- The 3 color boot loader screen showed briefly (you should see that it's version 2.4), then it went into a gray screen with the words "Loading...".
- It should say loading for a couple of seconds, then some other stuff comes up and then it should say TITAIMG.nbh at the top with some other stuff below, and finally, Press power button to start update image.
- After the upgrade has completed, it will say complete in blue letters. Perform a soft reset to reboot the phone with the new ROM.
- After the ROM update the phone will reboot and "hang" at the Sprint Screen (if you have a sprint phone). You need to reset the phone and go into the boot loader (see step 3) to flash the radio.
I also tried this using a different computer and sync cable, and had much better results then the first computer I tried (which led me to use the SD card version). At this point I had my phone flashed and it was booting into Windows Mobile. However, I was unable to use it except as a PDA as some of the required settings were missing. I went into the PST (##PST#) menu and reset the MSID and MDN values. You will need your MSL key in order to edit the settings (search for a program called GetSCP or GeSPC on xda-developers). I started setting my phone up, and ran into issues getting my phone to sync over the air with our exchange server. Turns out, I was using the wrong URL. It had been such a long time since I first set the phone up that the start of the URL should have been mobil.X.com instead of webmail.x.com. After that issue was resolved, I had no other problems. The rest of my email accounts are all setup, custom programs, etc. So, what about the GPS. All I can say is, IT WORKS! I was able to acquire a location fix on Google Maps, as well as a free program called VisualGPSce which has a couple of screens which remind of of traditional screens found on older GPS devices. In doing some additional research I found this thread on XDA-Dev which talks about GPS software and issues with the Titan. Most of the commercial software like TomTom, you need an app like Google maps, or VisualGPSce to "start" the GPS. There are several links to launcher applications, which enable the GPS and keep it running in the background. So about this time, I went back to the post with DCD's ROM, and saw he had released a 2.1 version. So I was off and running again, updating my ROM, then reinstalling everything. His 2.1 version is running Windows Mobile 6.1 as an added bonus, removes the extra crap sprint installs, and has a nice black theme/skin, including a new skin for the dialer (a new skin is a must for the dialer, as you can actually press the buttons with your thumb). He has another ROM in the works which will add more optimizations based on WM 6.1 I've started keeping all the applications I run on my MicroSD card so I can share them with other people (like my Dad who just bought a Mogul yesterday). This is what I currently have installed: Stuff that I am considering - Point UI (if they are able to extend the UI to more screens)
- Astro GPS Launcher (If I get a commercial GPS Package)
- Commercial GPS software
- HTC Home Customizer
The driving factor in the commercial GPS software will be if I can find an acceptable car mounting kit. I would like to find one which has integrated power, such as this one. I do NOT like the idea of using the FM transmitter, as it eliminates my ability to listen to music at the same time. They do sell one with an amplified speaker, but I don't know if they have one specific for the mogul. This brings up an interesting question, can I get the turn by turn directions, and music from the Mogul thru my Stereo? I wanted to get the Blue Tooth adapter for my Alpine Deck so I could have hands free phone calls. I wonder if I could pipe the turn by turn directions, and possibly music from the Mogul to the deck via Blue Tooth. I've seen a 6GB micro SD card on Amazon for around $50, and heard of the Mogul being able to support at least an 8GB card. I only have an 8GB MP3 player hooked up right now, and I'm not even using all of that space. So I could get most of my favorite music, 1-1.5GB of map data and still have around 1GB free for files. Defiantly something I will have to look into. I would be one step closer to the all in one device I have been waiting for.
I will be attending the first annual Microsoft RFID Solution Days, February 18-21 in Washington. I'm hoping to make it for the Reception on Sunday but I'm still waiting for my travel itinerary to be finalized by the Travel Agency. I'm also on the wait list for the hands on training and hope to get into that as well.
ScottGu's latest blog post talks about the VS 2008 web deployment project and the MS Web Deployment Team blog, which deals with a web deployment tool (not to be confused with the VS 2008 project). I had to do a little digging, but found this white paper on MSDN which explains the web deployment project for 2005. From the abstract: Visual Studio 2005 provides deployment support through its Copy Web Site and Publish Web Site features. While these are ideal for many scenarios, there are other, more advanced scenarios where developers need the following capabilities: - More control over assembly naming and output.
- Custom pre-processing and post-processing for the build.
- The ability to exclude, add, and transform files and directories during builds.
- The ability to modify the Web.config file to change database connection strings, application settings, or the URLs for Web references, depending on the build configuration. (For example, it might be necessary to use different values for development, test, staging, and release settings).
this white paper describes a solution to these advanced scenarios and introduces a new feature called Web Deployment Projects for Visual Studio 2005. The web deployment tool on the other hand, is a stand alone tool (currently just a command line utility called msdeply.exe), "that provides support for deploying, synchronizing and migrating IIS 6.0 and 7.0." It supports moving configuration, content, SSL certificates and other types of data associated with a web server. You can choose to sync a single site or the entire web server. Because we know that one tool can never ‘automagically’ guess what your application relies on, we’ve tried to be pretty flexible and powerful – you can customize exactly what you want to sync using a manifest file. You can also skip sites or other objects, or you can perform regular expression replacements during a sync (like changing the home directory on the destination machine). These two new tools will help make deployment a lot easier and enable a more agile environment. Unfortunately my project assignment at work has changed, so I won't be getting direct exposure to these.
Wouldn't you know, by TFS warehouse is not updating. It seems like I have had this problem before, but today, it was a new error. Today, I added 2 test projects to TFS, one for the MSF Agile (4.2) and one for MSF CMMI (4.2) to reference while I read Software Engineering with Microsoft Visual Studio Team System (thanks Larry). I'm not even through chapter one and I am hooked on this book. Chapter 1 was talking about the Reaming Work report, and I wanted to view it for the 2 test sites. I was able to view the report for the MSF Agile site, but not the CMMI site. A quick look at the reports via the Reporting Services web management UI, and I had a pretty good guess that the warehouse was not updating because there were no iterations or areas listed for those report parameters. I went checked out the TfsWarehouse.dbo._WarehouseConfig table, and saw that, yes, the warehouse stopped updating a couple of hours ago. My attempts to manually run the update using the web services interface via IE didn't seem to work. Remembering some of my previous troubleshooting, I went to the event log and found several errors, starting around the time that I created the CMMI project. Event Type: Error Event Source: TFS Warehouse Event Category: None Event ID: 3000 Date: 1/25/2008 Time: 6:20:57 PM User: N/A Computer: [TFSServer] Description: TF53010: The following error has occurred in a Team Foundation component or extension: Date (UTC): 1/26/2008 12:20:57 AM Machine: DATFSP100 Application Domain: /LM/W3SVC/1977639788/Root/Warehouse-4-128456993088380000 Assembly: Microsoft.TeamFoundation.Warehouse, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a; v2.0.50727 Process Details: Process Name: w3wp Process Id: 8512 Thread Id: 9920 Account name: [ServiceAccount] Detailed Message: The pending configuration changes were not successfully added to the cube because of the following error: System.Security.Principal.IdentityNotMappedException: Some or all identity references could not be translated. at System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean forceSuccess) at System.Security.Principal.NTAccount.Translate(Type targetType) at Microsoft.TeamFoundation.Warehouse.OlapCreator.AddAccountToRole(Role role, String accountName, Boolean needToUpdate) at Microsoft.TeamFoundation.Warehouse.OlapCreator.SetupAnalysisDatabase(Server server, String analysisDBName, String accessUser, String[] dataReaderAccounts) at Microsoft.TeamFoundation.Warehouse.OlapCreator.CreateOlap(WarehouseConfig whConf, String accessUser, String[] dataReaderAccounts, Boolean dropDB, Boolean processCube) at Microsoft.TeamFoundation.Warehouse.AdapterScheduler.EnsureCubeIsUpToDate() For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp. So started my Google Search. I came across a post on the MSDN forums which had some code to check to see if account translation is working on the network, and it appears to be (I got a SID value back for both my tfs service and tfs reports account) 1: using System; 2: using System.IO; 3: using System.Text; 4: using System.Xml; 5: using System.Xml.Serialization; 6: using System.Threading; 7: using System.Security.Principal; 8: 9: 10: namespace CheckAccountForTfs 11: { 12: public class Program 13: { 14: public static void Main(string[] args) 15: { 16: try 17: { 18: string accountName = args[0]; 19: Console.WriteLine(new NTAccount(accountName).Translate(typeof(SecurityIdentifier)).Value); 20: } 21: catch (Exception e) 22: { 23: Console.WriteLine(e); 24: } 25: } 26: } 27: }
Continuing my Google search, I found something embarrassing, I had the same exception for TFS listed on a previous post, on my very own blog. My solution last time was to run (Make sure you replace Server with your TFS server name, as well as use FQDN for the service and reports account).
setupwarehouse -o -s Server -d TfsWarehouse -c Warehouseschema.xml -a Domain\TfsService -ra Domain\TfsReports -v -mturl http://Server:8080 -rebuild
I did not remove the TFSWarehouse from Analysis Server before running this command. Also, the setupwarehouse command is in %Program Files%\Microsoft Visual Studio 2008 Team Foundation Server\Tools.
Eureka, manually invoking the warehouse job from the web service via IE actually starting processing, and with no errors in the Event Log. Looks like I might have to create a batch script to keep on the TFS server in case this happens again. I also need to search my own blog a little more carefully next time.
While I was trying to get the Remaining Work report to display initially, I somehow managed to mess up the parameter definition for Iteration and Area. I fixed this by saving the report (Go to the report's properties and click edit), along with another report with the at least those 2 parameters. Once saved as a text file, I copied the ReportParam element for both parameters from the good report to the bad report, then uploaded the fixed report back to reporting services. Problem solved.
|