Brian Keller

Director of ALM Evangelism for Microsoft

Posts
  • Brian Keller

    2 New Books: Pro ALM with Visual Studio 2012, and Pro TFS 2012

    • 8 Comments

    I can finally talk about the two new books I have been working on!

    http://tinyurl.com/ALM2012 http://tinyurl.com/ProTFS2012

    Professional Application Lifecycle Management with Visual Studio 2012 covers the full breadth of ALM capabilities available in Visual Studio 2012, Team Foundation Server 2012, and related technologies. This book has something for the entire extended development team – whether you are a project manager, software developer, software tester, architect, manager, or a jack of all trades. Topics covered include:

    • Software development (version control, code review, unit testing, code clone analysis, debugging with IntelliTrace, profiling, suspending and resuming work, and much more)
    • Software testing (Microsoft Test Manager, Web & Load testing, Coded UI testing, Lab Management)
    • Software architecture (Architecture Explorer, Dependency Graph Generation, UML modeling, Layer Diagrams)
    • Project Management (Agile planning & tracking, process templates, reporting)
    • Stakeholder engagement (PowerPoint Storyboarding, Microsoft Feedback Client)
    • Team Foundation Server 2012 (Installing, Configuring, Team Build, Branching & Merging)
    • And much, much more…

    Professional Team Foundation Server 2012 dives deeper into Team Foundation Server 2012 and is intended for anybody who needs to install, administer, or perform advanced configuration tasks with Team Foundation Server 2012:

    • Installation
    • Configuration
    • Topologies
    • Backup
    • Disaster Recovery
    • Customization and Extensibility
    • And much more…

    These books are the follow-up books to the 2010 editions of these titles (which you can still order here and here). The 2012 books have been more than 50% revised to include changes and additions in the 2012 release.

    Both of the 2012 books are available for pre-order now, and are expected to release in the next few months:

    These books are a collaborative effort between myself and my awesome co-authors: Mickey Gousset, Ed Blankenship, Martin Woodward, and Grant Holliday. Together we make up Microsoft employees and Visual Studio ALM MVP’s with a combined total of more than 30 years working in the ALM space with tools such as Visual Studio and Team Foundation Server.

    Thank you to everyone who bought the 2010 books. Your support, feedback, and encouragement made it an easy decision to invest the time and energy into these new editions. I hope you will enjoy them!

  • Brian Keller

    OData Service for Team Foundation Server 2010

    • 8 Comments

    October 26 2011 Update: The beta has been replaced by v1 of this release. Please visit this page.

    I’m pleased to announce the beta of the OData Service for Team Foundation Server 2010 is now available!

    What the heck is an OData Service for Team Foundation Server 2010?
    I’m glad you asked. The purpose of this project is to help developers work with data from Team Foundation Server on multiple device types (such as smartphones and tablets) and operating systems. OData provides a great solution for this goal, and has been embraced by numerous developers for building great device-specific applications. OData is accessible from any device and application stack which supports HTTP requests. This OData service interacts directly with the
    TFS client object model.

    What is OData?
    OData exposes a way to work with data over the web. If you’re new to OData, I suggest spending a few minutes at http://www.odata.org/ reading about this evolving standard. It uses interfaces similar to REST, so that you can programmatically consume and manipulate data from any device or application stack which supports HTTP requests. DPE has been working with several organizations (such as PayPal, Facebook, and Netflix) and product groups to enable OData where it makes sense to do so. Team Foundation Server was an obvious choice since it not only allows developers to extend TFS in new and interesting ways, but it also allows us to further showcase support for this evolving standard with the developer community at large.

    Can I see a demo?
    Of course! I filmed a
    video for Channel 9 which shows you how to get started using this service. When you’re ready to get started, just download the beta which includes full documentation. The service can be easily hosted in Windows Azure to front-end your own Team Foundation Server instance, or if you want to use this with CodePlex we’ve already hosted this service for you at https://codeplexodata.cloudapp.net/. As long as you have contributor rights on any CodePlex project backed by Team Foundation Server 2010 you can start making OData calls immediately. We also have included a sample Windows Phone 7 application, and WebMatrix Helpers, which show you how to get started building applications which consume this service.

    (ignore the blank stare on my face in the screen grab above – this is really far more exciting than the picture implies!)

    So this is a beta – when will the official release happen?
    That all depends on the type of feedback we get, but we’d like to release v1 of this service in the next few months. We are asking users to email their feedback to
    TFSOData@Microsoft.com. We’ll do our best to incorporate all feedback into the final release. But the license permits you to take this now (even in beta) and begin using it for real projects. All of the source code is available so you are free to customize it and make it your own. This project is provided as-is and is not officially supported.

    If I build an application using this service, will users need client access licenses (CAL’s)?
    In most cases, they will. Connecting to Team Foundation Server via OData has the same licensing implications as connecting via Team Explorer, the web, or any other client. But there are a few exceptions where users working with Team Foundation Server don’t need CAL’s. Please refer to the
    Visual Studio 2010 licensing whitepaper for all of the details.

    I hope you enjoy this – if you build something interesting please be sure to drop us a line and let us know!

  • Brian Keller

    Getting started with the Team Foundation Server 2010 and Project Server 2010 Integration Virtual Machine

    • 8 Comments

    ***April 17, 2013 update: A new version of this VM is now available which showcases the integration between Team Foundation Server 2012 and Project Server 2013.

    **Update: There is a 4-part video series on Channel 9 which demonstrates each of these scenarios as a video screencast.

    Last month we officially released the Team Foundation Server 2010 and Project Server Integration Feature Pack. This integration enables the Project Management Office (PMO) to see a consolidated view of the progress and resource availability across all software development projects in Team Foundation Server 2010.  Software teams using Team Foundation Server 2010 can choose to manage their projects using a formal process or an agile process and flow their status and schedule updates into Project Server and Project Managers can preview changes as they flow in, track the work at a high-level and provide live updates to their stakeholders.

    To help people evaluate and demonstrate the capabilities of this integration, we have published a virtual machine which is pre-configured with this integration along with sample data and several walkthroughs (which can either be used as self-paced hands-on-labs, or demo scripts to present these capabilities to others). Unfortunately, the virtual machine download contains 20+ files weighing in at over 10GB. The good news is that once you have the virtual machine there’s not much left to configure; you can open it up in Windows Server 2008 Hyper-V and begin exploring this integration using the guided walkthroughs. The following instructions should make it easier for you to batch download all of the files required for this release.

    Downloading the virtual machine and associated files:
    I suggest using a download manager for these files since they are very large. My download manager of choice is Free Download Manager. You can use your own favorite download manager, but you may need to adapt the instructions below as appropriate.

    1. Download and install Free Download Manager. This utility provides:
      • Auto-resume support for interrupted downloads.
      • Multiple simultaneous download streams for (usually) a much faster download experience.
      • As the name implies, it's completely free.
    2. Select the appropriate URL’s depending on your preferred virtualization platform and copy (CTRL+C) them to your clipboard.
      ###Select This Section and Copy It (CTRL+C) - Do Not Include This Line###
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/Working with the Project Server 2010 and Team Foundation Server 2010 Integration Virtual Machine.docx
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part01.exe
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part02.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part03.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part04.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part05.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part06.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part07.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part08.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part09.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part10.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part11.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part12.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part13.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part14.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part15.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/WS2008R2x64Ent_TFS2010_PS2010.part16.rar
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/1 - Top-Down Planning of Business Requirements with Project Server and Team Foundation Server.docx
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/2 - Managing Project Details in an Enterprise Project Plan Mapped to a Team Project.docx
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/3 - Making Agile Team Progress Visible to the Project Management Office.docx
      http://download.microsoft.com/download/6/4/0/640BAA77-929F-42C4-91C6-1E0597B2EEAD/4 - Managing Field Mappings for Integration of Team Foundation Server and Project Server.docx
      ###End - Do Not Include This Row In Your Selection###
    3. Launch the user interface for Free Download Manager (either from the Start Menu or via the system tray icon if FDM is already running).
    4. Click File -> Import -> Import List of URLs from Clipboard.
    5. When prompted for a download group, accept the default and click OK.
    6. You are now free to minimize Free Download Manager while the files download. By default, they will be saved to c:\downloads.

     

    Once you have download the release, extract it to a directory by running the EXE. The document “Working with the Project Server 2010 and Team Foundation Server 2010 Integration Virtual Machine.docx” (included in the list of files to download above) provides more details about how to load this virtual machine within Hyper-V, and how to activate the operating system to get a full 180 days of usage from this virtual machine. After 180 days from the time you first boot the virtual machine it will expire. If you need additional time you can re-extract a fresh copy of the virtual machine, or restore to a Hyper-V snapshot if you took one at a time prior to booting it up for the first time.

    After you have successfully setup this virtual machine within your Hyper-V environment you can begin using the walkthroughs to learn more about the scenarios enabled by this integration. Those walkthroughs are also included in the list of files above as Word documents, and are numbered 1-4. It is recommended, though not required, that you complete these labs in the order they are numbered. You should also consider using Hyper-V snapshots prior to following the steps in a walkthrough so that you can roll back to an earlier snapshot if you would like to complete a walkthrough multiple times, or if you make a mistake.

  • Brian Keller

    Updated: Visual Studio 2012 RTM ALM Virtual Machine and Hands-on-Labs / Demo Scripts

    • 7 Comments

    The Visual Studio 2012 RTM ALM Virtual Machine is now available!

    This new VM replaces the previously available Visual Studio 2012 RC ALM virtual machine to use the final Visual Studio 2012 RTM releases.

     

    This is the most comprehensive ALM virtual machine yet. It includes 20 hands-on-labs / demo scripts. 8 of these labs highlight features/scenarios which are brand new in Visual Studio 2012, and the remaining 12 of these scenarios were upgraded from the older Visual Studio 2010 ALM virtual machine.

     

    Go here to start your downloads and to read more about this release!

  • Brian Keller

    Bringing OData to Team Foundation Service

    • 7 Comments

    I am pleased to announce that starting today we are enabling OData access for Team Foundation Service. The goal of the Team Foundation Service OData API is to help developers build applications for multiple device types (such as smartphones and tablets) and operating systems which interact with projects on Team Foundation Service. OData (http://www.odata.org) provides a great solution for this goal, and has been embraced by numerous developers for building great device-specific applications. OData is accessible from any device and application stack which supports HTTP requests.

    You can get started at https://tfsodata.visualstudio.com/ which includes information on how to enable basic auth credentials for your Team Foundation Service account along with API documentation.

    A sample Windows Store application is also available for download. This sample is licensed as MS-PL and we encourage you to learn from it and build upon it if you would like to build your own Windows Store application which works with Team Foundation Service.

    image image
    image image

     

    As of today this service is a beta. We are looking for feedback from the development community as we continue to refine this service offering. Please email TFSOData@Microsoft.com with your suggestions and bug reports. We know that performance for the service is an area we need to continue to invest in, especially for very large projects. If you have any specific feedback related to slow requests you are experiencing please provide us with details so that we can continue to make improvements here.

    The Team Foundation Service OData API builds upon the work we have done to provide an OData Service which can be used with Team Foundation Server. If you are running Team Foundation Server on-premises and you would like to enable an OData endpoint for your server, please check out the OData Service for Team Foundation Server v2. Whenever possible we will keep the API structure identical between these two projects so that the applications you build will work regardless of whether you are using Team Foundation Server or Team Foundation Service.

    We are excited to hear from anyone who publishes an application which works with the service. How are you using it? Where can we download it and can we advertise it to others?

    Enjoy!

  • Brian Keller

    A different way of presenting the Visual Studio 2010 testing tools

    • 7 Comments

    This post is about the Visual Studio 2010 testing tools. I promise. But first, a bit of back story… skip to “Testing with Visual Studio 2010” if you don’t care about the back story. Go on, I don’t mind.

    Over the last year or so I’ve been struggling to come up with a great way of describing the new software testing paradigms we are enabling with Visual Studio 2010. In my day job as a technical evangelist I get to interact with a wide range of audiences, each with a different set of interests in Visual Studio 2010 as a solution for software testing. A manual tester, a software developer, a project manager, and a CIO are all going to have their own preconceptions about testing tools, and will bring along their own expectations and questions when consuming the content I deliver.

    Our software testing story with Visual Studio 2010 is very rich. Case in point, I contributed about 300 pages to a new book on Professional Application Lifecycle Management with Visual Studio 2010, and truth be told I could have written another 1000 pages if I had the time. How do you condense all of that material into a presentation format that is (usually) delivered in 30-, 60-, or 90-minute chunks?

    My original solution to addressing these varying demands was to have an arsenal of PowerPoint presentations that I could open up depending on the situation. Sometimes, especially when visiting customers in the field, I would only learn about the makeup of my audience a few minutes before the presentation. I would just grab the right set of slides and start presenting. But this approach can be unwieldy, and requires that I maintain (and be able to present on a moment’s notice) multiple PowerPoint presentations. And as much as I love PowerPoint, it tends to create a rigid, linear approach towards delivering presentations that can be boring for both the audience and the presenter. There had to be a better way…

    I had seen a few presentations delivered at MIX which were presented completely with Microsoft Deep Zoom. The presenters could zoom in and out, pan around, and tell their entire story all without the “context reset” of changing slides. This was perfect! But how do I create one of these? I borrowed some time with Nishant Kothary, a colleague of mine on the MIX team who pioneered the Website Named Desire Deep Zoom that he used to present with at MIX. Nishant was very helpful in describing how you can generate Deep Zoom with Microsoft Expression, but there were some limitations in the approach that I would have to code around – including the ability to embed videos in the Deep Zoom composition, which I decided was critical for showing off testing with Visual Studio 2010.

    So I posed the problem to a local software firm – SharpLogic Software – that I knew had a lot of experience with Microsoft Silverlight. Two weeks later, we had built a prototype of a Deep Zoom presentation showcasing software testing with Visual Studio 2010. Over the last few months we have been iterating on the design, adding features, and going through the usual legal hurdles. What follows is the result of this effort… this has forever changed the way I think about delivering presentations. I hope you enjoy it. Note that SharpLogic has even spun off a new business, SpeakFlow, where you can create your own such presentations.

    Testing with Visual Studio 2010

    This Deep Zoom is designed to help presenters tell the story of software testing with Visual Studio 2010. This includes concepts such as manual testing, actionable bugs, “no more no repro,” lab management, the build-deploy-test workflow, rich reporting, and more!

    This presentation is based on Microsoft Deep Zoom and is designed to provide the following benefits over traditional linear presentations:

    · Go deep, or stay high-level: Depending on what your audience craves you can either focus on a high-level story or drill deep into product demonstrations.

    · Context retention: In between each “deep zoom” you can always remind your audience of the bigger picture by bouncing back to the high-level context view.

    · Inline videos: Each concept includes product demonstrations which can be used to supplement your storytelling experience.

     

    image

    To get started, visit: http://archive.speakflow.com/vs2010testing

    Or you can run it locally by extracting the offline version (127MB).

    The offline version is nice when your Internet connection might be slow, since the videos can take some time to load.

    Some tips:

    • Videos will “remember” your location if you navigate away from them. This is by design. But if you want to refresh the location of all videos (e.g. just before you go on stage) just press CTRL+F5.
    • Videos don’t have any audio. I might add some later, but this is designed first and foremost as a presentation aid.
    • You can use the space bar to pause/play a video. This can be helpful to control the pace of the video to match your narration.
    • You can use your mouse’s scroll wheel to zoom in and out. You can also use the up and down arrow keys. (sometimes I even prefer the arrow keys even when I have a scroll wheel – practice it for a few minutes and see what you like best)
    • You can use the left-and-right arrow keys to move through the workflow panels.
    • I like to set expectations with an audience when I use this presentation that I won’t be showing live demos. Something like, “I want to assure you all of these demos are real (they are) and you can perform them using the Visual Studio 2010 release candidate that you can download today. But I’m using videos here simply as a storytelling aid and because we don’t have a lot of time, since some of the scenarios cut across several different roles and various points in the software development lifecycle.” Of course if you have the time and inclination, you can also break away from the Deep Zoom and drop into a live demo or two to augment the story. For a beta 2 VHD with sample data and demo scripts, click here.

    Videos in this Deep Zoom are based on beta 2, but the concepts are fundamentally identical to RTM. As time permits I’ll update the videos for RTM.

    I hope you enjoy it!

  • Brian Keller

    Visual Studio 2010 ALM presentations from my recent roadshow

    • 7 Comments

    I recently had the great opportunity to support the launch of Visual Studio 2010 by embarking upon a 4-week roadshow through South Africa and Europe (plus 1 unplanned additional week in England due to the volcanic ash cloud!).

    I promised that I would upload my slide decks, so here they are. I also used my SpeakFlow presentation on software testing a bit in lieu of slides. But fair warning: about 80% of my talks were based on demos, so the slides in and of themselves don’t really tell a complete story. Instead, I would encourage you to watch the recordings of my sessions from TechDays in The Netherlands. You can view all of the recordings on Channel 9 at the following locations:

    And finally, you can run just about all of the demos I delivered during my roadshow by downloading the VHD and hands-on-labs I posted in April. I’m hard at work producing an RTM version of these materials, but for now everything in that VHD will continue to work until June 30, 2010.

    I hope you enjoy the materials!

  • Brian Keller

    Mutant League Football: Bring it back!

    • 7 Comments

    Mutant League Football was, in my opinion, one of the best video games ever made. It was released in 1993 by Electronic Arts. It was a football game, except that your teams were made up of - well - mutant alien creatures. A "long bomb" equated to throwing an explosive-rigged ball to one of your receivers, ducking out of the way at the last minute, then letting the other team intercept it and getting blown to pieces! Certain fields were littered with land mines, pits, and other contraptions designed to take your players out of the game.

    Now wouldn't it be cool if EA was to release an updated version, taking advantage of all of the latest gaming technologies and platforms? My friend Ian thought so, too, so he started a petition to have EA bring the game into the 21st century.

    If you're a Mutant League fan also (there was a hockey game, too) then I encourage you to sign the petition so we can float the customer demand in front of EA.

    http://www.petitiononline.com/MLF/

  • Brian Keller

    .NET Framework 1.0 SP3 and 1.1 SP1 Tech Preview Available for Public Download

    • 7 Comments

    **Updated 8/31 with new links to the official releases, replacing the links to the technology preview

    +++++++++++++++++++

    .NET Framework 1.0 SP3 and 1.1 SP1 Tech Preview Available for Public Download

    Today, Microsoft made technology preview versions of the .NET Framework 1.0 SP3 and .NET Framework 1.1 SP1 available for developers to download so they can test their .NET Framework-based applications with these service packs applied. Though these are unsupported technology previews, we would like to ask your help in ensuring the quality of the service packs by downloading them, testing your existing applications on them, and giving us feedback.

    These two service packs address issues with the .NET Framework 1.0 and 1.1 including:

    ·         All customer issues addressed with hotfixes

    ·         Improved importing of WSDL

    ·         Data Execution prevention

    ·         Buffer overrun protection

    ***Updated 8/31. The links below are no longer the technology previews but are the final releases. Note the separate download for Windows Server 2003.

    Microsoft .NET Framework 1.1 Service Pack 1 [for Windows 2000/XP] <http://www.microsoft.com/downloads/details.aspx?familyid=A8F5654F-088E-40B2-BBDB-A83353618B38&displaylang=en>

     

    Microsoft .NET Framework 1.1 Service Pack 1 for Windows Server 2003 <http://www.microsoft.com/downloads/details.aspx?familyid=AE7EDEF7-2CB7-4864-8623-A1038563DF23&displaylang=en>

     

    Microsoft .NET Framework 1.0 Service Pack 3 [for Windows 2000/XP] <http://www.microsoft.com/downloads/details.aspx?familyid=6978D761-4A92-4106-A9BC-83E78D4ABC5B&displaylang=en>

  • Brian Keller

    Web sites - they can make your day, or drive you nuts.

    • 7 Comments

    It's truly amazing how much the Web enables us to do. Think of how much time it saves you - searching for flights, paying bills, defining terms, entertaining you, getting a map. Can you remember a time when you didn't use the Web for some of these things? I love the Internet and I couldn't imagine not having its conveniences.

    But today, I had my share of bad experiences (don't worry, I am getting to a technical reference, if somewhat oblique):

    11:15am. A friend of mine sent me a Friendster request so I had to log in and confirm he was indeed a friend of mine. Friendster is a pretty cool concept and has gained an early mover market advantage in the “social network” space, but their success amazes me because their Web back-end is TERRIBLE. It obviously doesn't scale. There is seldom a time I visit their site that I don't have a server timeout or some other error occur.

    2:35pm. I try to book a flight to Sacramento. I start with Delta.com since I have a good frequent flier status. But instead, my visit is plagued with page errors, timeouts, etc. They lost my business when I got frustrated with all the errors, and this definitely isn't the first time I've had problems there.

    2:55pm. Still trying to book my flight. I try United.com. Same issue. Their pages time out, searches bomb with bogus errors, etc. Once again, I didn't book a flight here because of problems. I finally used Expedia to buy a ticket on United and it worked great (of course I probably paid a premium for going through Expedia, but United.com didn't work so what could I do?).

    5:30pm. It's the middle of the month, so it's time to login to Fleet Bank to pay my credit card. The entire freakin' credit card Web site area is down!

    12:30am. Tried the fleet site again. No dice. What gives?

    2:00am. I'm frustrated. Time to blog my troubles away...

    So I started to wonder what could be causing all of this grief? Some Web sites work great, all of the time, but these 4 always give me trouble from time to time, and ALL of them were giving me troubles today. Well, I think I found the connection with a few quick Web searches...

    Friendster
    Delta
    United
    Fleet

    Find the common thread? Hint: It starts with a “J” and ends with an “SP”. When are people going to learn? I guess when they start losing business they'll get a clue.

    <update 2:21am fixed an incorrect link>

Page 5 of 29 (284 items) «34567»