Matthew's profileSimplifying ComplicationBlogListsNetwork Tools Help

Blog


    September 04

    Visual Studio ASP.NET Development Server - “Internet Explorer cannot display the webpage”

    I like to work at home, and my set up at home is almost at good as work, but due to less distractions it can be better. When I created a TFS workspace for my home computer (was Vista, now Windows 7), I got the latest source, built it, and all was good… almost. It did not run. We are building an ASP.NET application and when running under the ASP.NET Development Server (WebDev.WebServer.exe) I would get sent to this error page, which told me nothing useful about why it was failing.

    Internet Explorer cannot display the webpage

    This was irritating, but didn’t really bother me because I could work around it quite quickly. I opened the Web properties of the ASP.NET Web Application project (right click the project, select Properties and then the Web tab on the left) and set it to run from the Local IIS (Internet Information Services) Web server. The only issue this had was I must run Visual Studio as an Administrator since I have User Account Control (UAC) enabled, and I don’t get Edit and Continue.

    Local IIS Web Server configuration 

    Today however, this won’t do. Today I want to create a new workspace on my home machine to work on multiple unrelated things at the same time. Multiple workspaces is a great productivity boost, from reproducing issues locally in an unchanged environment, to running units tests or other long running processes and working on something else while they are chugging away. I do not want to create multiple virtual directories in IIS, although I could. One of the things I like about the environments I have set up, is that they allow virtually no configuration on any PC you want to use, as long as you have Visual Studio with Team Explorer, you are ready to develop. And our rich wiki requires OneNote and that is all. Both enable also enable working offline and starting new developers or changing PCs is very easy. I thought it might be related to UAC or the firewall, but after a quick look around and I found ASP.NET Developer server not working which lead to IE won't connect to asp.net server which had the solution. Opening up Notepad as Administrator (since I have UAC on) loading the C:\Windows\System32\drivers\etc\hosts file and commenting out the line ::1 localhost, restart only the browser instance that failed and all is working.

    Notepad the hosts file opened

    Now Visual Studio does not need to run as Administrator, I do not need to configure IIS, I can have Edit and Continue and multiple workspaces all running completely independently.

    Visual Studio Development Server settings 

    July 30

    Automate, else Enforce otherwise Path of Least Resistance

    These are my Three Principles of Pragmatic Process Establishment. From my experience, these are the only ways to successfully implement a process, no matter how much value it may add, or how simple it may be to follow. If these principles are not followed, neither will the process that has been put in place when it comes to the crunch.

    Automate

    Automation is the most desired and beneficial option. The benefits are obvious. If a process is automated the value-add from that process is gained, without extra effort from the team. For example, the simple process that developers should run the unit tests. The value is obvious. Errors are found earlier and higher quality code results. However, although this is a simple instruction to follow, running unit tests has blockers for many developers. Firstly, they take a long time to run. Secondly, not all are relevant to you. Thirdly, they may have environmental requirements you cannot or do not want to setup. This simple process also has a simple automation solution: have a continuous integration build server that runs all the tests for the developers on each check-in. All the benefits gained, and everyone will perform the process.

    Another example is having developers log their time spent working against work items. Having developers do this is controversial (individual developers should never be measured, only the team as a whole), but the value is the schedule becomes very realistic and accurate based on actual burn-down rates. Time tracking is however, time consuming and error-prone. Developers tend to forget to record the time started, time finished and minus interruptions against each work item. The numbers are then fudged voiding all the value of the process. The automation solution utilized has been to use TFS Working On. The tool allows developers to very easily track their time, without wasting their time. The data is providing us with accurate reporting while dog-fooding our BI product.

    Automated processes also have the benefit of accurate repeatability. If an installation package is fully created each build, the risk involved in following a multiple step process is gone. A typical Standard Operating Procedure (SOP) is usually a long manual process that is error prone, especially when under time pressure and reduces confidence in the end result, compared to an automated solution. Of course the negatives of this process implementation solution is that not everything can be automated, it may not work for all required cases or require ongoing maintenance, or may take a long time to implement.

    Enforce

    When Automation does not fit enforcement is usually the next best. The reason a process even needs enforcement is that it will most likely not be the easiest thing to do. There is much value in doing it, but not necessarily by the person doing it, or not at that time. The enforcement itself must be a physical enforcement, not a SOP document stating "thou shalt follow". By physical I mean generally technical. A document cannot be uploaded to SharePoint until it has certain properties set. Physical is like ballot papers must be folded, so they don't fit in the slot on the box, until they are folded.

    In the development world check-in policies are one of the best examples of enforcement. Here you can define your coding standards, code reviewer, check-in comments and work item association for example. Having these particular policies helps maintain higher code quality and readability, easier searching of history, and better reporting. The danger of enforcement is going too far and having people overwhelmed with the number of hoops they have to jump through to get things done, making them feel inefficient and ineffective. Each process enforced must be reviewed occasionally to ensure it is still adding value, and if found to be less value than that of the time it costs, it should be dropped immediately.

    Path of least resistance

    When a process cannot be automated or enforced it must be the easiest way to get the task done. If not, it will require someone to be the Sergeant to enforce the process which itself is time consuming, error allowing, inconsistent and demoralizing. Essentially a path of least resistance process is very simple and value is seen clearly. It could however be artificially made the path of least resistance by making the other paths more difficult or less effective.

    Using a wiki for team collaboration and information is a good thing and seems like a simple enough process to follow. However, most wikis require custom syntax for mark-up and uploading images is a pain. What I have seen happen is email is just used instead, since it allows simple rich text editing, inline images and the information is directly sent out to everyone right away. This is almost an acceptable process over the wiki, but distracting email threads tend to occur, important emails are overlooked and new employees cannot access the information. What we have implemented instead is Microsoft OneNote for our wiki. OneNote is a rich client application that automatically synchronizes all the content locally, is searchable including text in images, can show a list of recent changes if you want to follow what is happening and all sections show who modified it and when (still needs proper versioning though). It has become the easiest way to share information among the team, and is a great resource for new employees.

    General Tips

    Begin a new process with as little as possible. Do not start a new form with a large amount of mandatory fields. Grow them as the required. The process will have fewer blockers, less red tape with little perceived value, and get more user buy in.

    Do not over analyze. Analysis Paralysis is state I now know I use to get stuck in. Do something. Keep it light, nimble and able to be adapted quickly as it matures.

    Re-evaluate occasionally. Make sure you are getting value out of what the process is requiring people to do. If the cost is high and value is low, either look at how the cost can be reduced through automation or trim some of the fat of the process that is yielding low returns. If people are having trouble with the process, don't blame the people. Focus on smoothing out the bumps that are causing them to fall of the path.

    Do not provide much documentation of the process. The process needs to be simple to follow and self documenting, i.e. each step points to the next. Documentation tends to be TAGRI and will either stop a process being nimble or quickly become out of date with the process. The best option for documentation if it is required is to have it automatically generated.

    A good process will perform under pressure. Do not abandon it to save a penny now, because it should save you hundreds later.

    July 04

    Opera please compete, not complain

    I really like Opera. When I need to do some browsing, I open Opera. It’s full featured yet not cluttered. Mouse gestures and the render speed make it very fast and efficient to do browse many things at once. However, the gap I find it has in speed and ease of use is closing. I still use Internet Explorer. It is set as my default browser. Opening links from emails or whatever, IE is just far more convenient. It feels lighter for the smaller tasks. And now with IE 8 on Windows 7, pinned web pages and frequently visited have an even lower barrier of entry.

    image 

    I wanted to know, before I install the beta, does Opera 10 make proper use of Windows 7 Jump Lists. How nice would it be if your Speed Dial was in your Jump List? I don’t know whether it is or not, but my problem is when I searched for it I don’t find what I want, and I find myself reading again the garbage about the Opera CEO complaining that Opera isn’t installed by default on Windows but IE is and users should have none, or all browsers installed for choice. What annoys me about this is that it is the OEMs Opera should be pushing to install their stuff. Prebuilt PCs come with plenty of crapware, it would be a pleasant change if some of it was good. Also, they do not complain about Apple including Safari in OS X, or Ubuntu including Firefox, and do not push them to install Opera. The Google Chrome guys made the point with this video that the end user really does not even know what a browser is (I tried this one on my wife, who I have using Opera, and my Mum, both gave the same kind of answer as the people on the video. I found it fascinating, try it on your friends.). So claiming that the end users are the ones that want more choice seems difficult. Multiple browsers installed as a suggest best solution, is by far not the best solution. The end user only cares if it is simple and works. More choices for most users is just more confusing.

    I am probably being too hash on Opera. More competition is certainly good. Firefox’s popularity gave Microsoft a kick to finally get moving again with updating IE from the dated version 6. Personally I don't understand why Opera is not more popular. The guys at Opera are doing awesome work. Simple features like mouse gestures, speed dial, custom searches and Opera Link make using it quicker and simpler than others. Opera 10 has some nice features like inline spell checker and auto update. I'm unsure how Opera Unite will go. The video show the purpose of Opera Unite is really cool. The feature that I find potentially useful at the moment is the file sharing, for access to my home PC from work, but there are other ways to do that. So as with any platform it will succeed if it is embraced by developers with some killer apps. Until then best of luck to Opera.

    Technorati Tags: ,,
    March 13

    XPS Unknown by Microsoft Support

    Recently I had to contact Microsoft support. I stated my issue and gave a copy of my print out relating to the issue, as an XPS. This is convenient to do, as after installing .NET 3.0 Framework, which gives you XPS support, the option to print to XPS is available. The reply I got back however, was

    “The file you had sent to us was not in a file type I could bring up. I would advise you to send it back to us in a different format so we can easily view the file."

    This knocked me to the floor! How could Microsoft support not open an XPS! Firstly, as stated on fileinfo.net:

    “XPS files can be opened with Microsoft's XPS Viewer, included with Windows Vista”

    So why is Microsoft support not using Vista? Secondly, when opening an unknown file type, Windows default file type unknown dialog would point them to the the page http://shell.windows.com/fileassoc/0409/xml/redir.asp?EXT=xps, which clearly states what it is and what they need to do.

    Windows File Assocation

    So I sent an email to the XPS team about my issue, and got very polite replying saying thanks for the interest and feedback, and they are following up the issue with the teams involved. Let’s hope they do. XPS from a .NET developers perspective is just brilliant. Even if the format is not as featured or whatever as PDFs, the ease of creation due to the XAML declaration is just too easy to ignore. Not to mention the Adobe Reader (currently version 9.1 and 41.1MB!) is way too bloated (use Foxit Reader, version 3.0, 3.26MB).

    The issue holding XPS up is that is it not in wide enough support yet. I have sent them to family and friends and get the same type of reply from them, as I did from Microsoft support. Hopefully with more applications using .NET 3.0 and Windows Vista & 7 adoption on the increase, this will be resolved soon. Then, as a developer, I can say goodbye to painful PDF creation.

    To make sure you have got all you need for XPS, be sure to install the Microsoft XPS Essentials Pack (7.2MB – 9.0MB, after .NET 3.0 Framework, which you should have anyway!). Although you get viewing and creating abilities with just .NET 3.0, the pack also gives you an IFilter for Windows Vista\Desktop Search and IPreviewHandler for Windows Vista Explorer previews, and Outlook 2007 previewer:

    XPS Preview

    On a positive note, Microsoft support was very good. Very fast responses and when I sent the print out as a PDF my issue was very quickly resolved.

    Aside: Same issue with internal adoption of Microsoft’s standards. The Inside Windows Live Messenger blog, has flash at the front, instead of Silverlight. I would have thought, since Messenger 9 has sprinkles of WPF, Silverlight would be a no brainer.

    Inside Windows Live Messenger

    Technorati Tags: ,,

    February 03

    TFS Working On – Version 1.1 Released

    Today I have set the TFS Working On beta to release for version 1.1. The code has not changed since the end of November 2008 and I have been using it full time along with 9 more developers at my work. This has provided us with excellent data in TFS, that we are now actively reporting our schedule on. There are many more features that I wanted to get in, but since this release has had such a long testing time, with no significant issues, I thought it worthwhile to cut the release. I can now get on with the new features, without the risk of destabilizing this build. Download the release and try it out. If you find any issues or have any feature requests, please log them. I do also prioritize on votes, so be sure to vote on features you want to see in. Below are the usage instructions:

    TFS Working On is a simple system tray utility that makes it easier to record your time spent on TFS Work Items.

    TFS Working On

    Simply specify your server and project, then search for your Work Item and you are tracking your time.

    TFS Working On - Set Connection

    TFS Working On - Search for Work Items

    The icon turns green to notify you that you are tracking your time.

    TFS Working On - Started working on...

    This will record your time in the history of the work item whenever you stop working on the item. To stop working on, double click the icon or select stop from the menu, and the work item is updated and the icon turns red.

    TFS Working On - Stop

    TFS Working On - Stopped working on...

    TFS Working On - History

    TFS Working On - Schedule

    You can also specify your estimates against a work item so that you can record how you are going.

    TFS Working On - Estimates

    TFS Working On - Estimates

    Access to the work item is available.

    TFS Working On - Work Item

    With some very simple configuration the estimates can be mapped to the TFS Work Item fields, per work item type, per project. This can be performed by one member of the team, most likely the one responsible for setting up the project, and then stored on the network share for all team members to reference.

    TFS Working On - Configuration

    TFS Working On - Configuration Mappings

    Features can be configured here also. Hovering over the help icon will give you details of the settings.

    TFS Working On - Configuration Options

    Auto Time Out will automatically stop working on when the computer is idle for the set time, and resume when activity begins again.

    Nag will remind you when you are not working on anything.

    TFS Working On - Nag

    January 20

    TFS Business Intelligence Reporting

    In December, I spoke at the Queensland VSTS User Group about reporting on TFS using the Analysis Services cube that is included on the data tier. At the end of this post I have included links to my slides and some sample reports in Excel 2007 to get you started.

    Excel BI Reporting

    Reports are only as good as the data. Using TFS Working On to help accurately report the time spent, or at least remaining hours on your work items has been working very well for my development team. Due to this, the next version should be released shortly, and hopefully continually improved quickly as we are all using it in anger.

    Before you can use the Excel reports you must change the TFS cube connection:

    1. Open the Work Book
    2. Select the Data Ribbon
      Data Ribbon - Connections
    3. Select Connections, Properties… and the Definition tab
       TFS Cube Connection String
    4. Update the Data Source in the Connection String to the Analysis Services instance containing the TFS Cube
    5. Click OK, Close

     

    November 27

    Queensland VSTS User Group presentation

    On Friday 5th December 2008 I will be presenting at the Queensland VSTS User Group. The abstract of my talk is below:

    Using Business Intelligence to simplify reporting with TFS

    We've all seen how TFS can simplify your source control, build automation and work item tracking. The next obvious thing to do is make use of all that data with powerful Business Intelligence reporting that comes with TFS due to the Analysis Services cube. Since reporting is something developers tend not to want to do, I will demonstrate how you as a developer can go about your regular daily development tasks (potentially making use of contest winner TFS Working On) while keeping your project manager happy. And as a project manager, how you can slice and dice the data to identify scheduling issues, build qualities, even the expense break-down of features.

    Technorati Tags: ,,
    November 22

    Bluetooth Auto Lock Gadget - Released

    It has almost been one year since my first post, which was about my Auto Lock Vista Sidebar gadget. However, this gadget was only available on Si-Mi. So today I have released it here and on Windows Live Gallery, here, to hopefully be able to be useful to more people. Usage instructions are as follows:

    The Auto Lock Gadget automatically locks the computer when the selected Bluetooth device is out of range. The intention is that the gadget is paired with a Bluetooth device, such as a phone, that is carried with you. When you walk away from your computer with your phone, the gadget will automatically lock the computer, leaving it secure when you leave.

    Before Using the Gadget

    To get started you must create a pairing for your Bluetooth device to your computer.

    1. Open the Control Panel

    2. Select Hardware and Sound

    3. Select Bluetooth Devices

    Bluetooth Devices

    4. Click Add… and following the Add Bluetooth Device Wizard

    Bluetooth Device Wizard

    5. Once this is completed you are ready to use the Auto Lock Gadget

    Using the Auto Lock Gadget

    1. Drag the Auto Lock gadget onto your Sidebar or Desktop

    Vista Gadgets

    2. Click the Discover Devices button

    Auto Lock Gadget

    Auto Lock Gadget Discovering Devices

    Auto Lock Gadget Standby

    The drop down list will now be populated with your available Bluetooth

    3. Select the device you want to connect to

    Auto Lock Gadget Select Device

    4. Click the Enable AutoLock button

    Auto Lock Gadget  Active

    5. Now when your Bluetooth device goes out of range your computer will automatically lock

    Technorati Tags: ,
    November 19

    TFS Working On Wins!

    My entry to the Coolest Team System Gadget Contest has been announced the winner! Many thanks to Mike Azocar for hosting the competition and the judges Martin Woodward and Ed Blankenship.

    Version 1.1 is hopefully not too far away with many features and improvements slated. You can currently get an early installer of it from CodePlex which contains a User Activity Timeout feature. This automatically stops recording time when you get pulled away from your desk, and starts up again when you are back.

    Technorati Tags:
    October 29

    DevSta Entry - Mobile Memory Speed

    Recently, I entered the DevSta {Challenge 2008}. The Challenge Brief was release at 0808 EST on Monday 29 September. This was the start of 200 hours and 8 minutes to develop a Windows Client, Mobile or Silverlight application or a Vista Gadget based on the theme Old School / New Cool. Not only was the time very limited, since I do work full time and have a 3 month old son, but thinking of an idea to fit the theme, that would be exciting and able to be completed in time, was difficult. Asking many people the only responses for ideas I got, was games. That is fine, and there were some good suggestions, but the time constraints meant I would never get these finished.

    My idea ended up being the simple game of Memory on a Windows Mobile device. The "new cool", was to make it Speed, in which matched pairs would turn back over after a time out. Not a very cool idea I understand, but it is additive to play nonetheless. Below is the description of my submission:

    Mobile Memory Speed brings the classic 'old school' card game Memory to the Windows Mobile Platform with a new twist. As you match the pairs, if you don't finish quick enough, the pairs will start to flip back. This game comes complete with Difficulty options up to 40 pairs, which is enough to challenge anybody. Game high scores and statistics are also recorded to ensure you have a goal to beat.

    Mobile Memory Speed In Game Play - Mobile Memory SpeedOptions - Mobile Memory Speed High Scores - Mobile Memory Speed

    I was able to complete the application within 10 hours and am very happy with the result. It feels like a completed product, although I have had many more suggestions for features to mix up the game further. The winners have been announced and unfortunately my entry is not among them. All in all it was a good experience putting something together so quickly. It has given me more motivation to just get in there and write more applications. Thanks also to Microsoft, the sponsors, the judges and the guys that organised the competition, and congratulations to the winners! I look forward to participating next year. Until then, I have made an installer for Mobile Memory Speed if you would like to give it a go. Note that the Microsoft .NET Compact Framework 3.5 is required.

    August 31

    Team System Gadget Contest - TFS Working On

    Since mid June, Mike Azocar has been running a team system gadget contest. Leaving it right up to the last minute, I have just submitted my entry, TFS Working On.

    TFS Working is a simple system tray utility that makes it easier to record your time spent on TFS Work Items.

    image

    Immediately after installing, TFS Working On is ready to help you track your time. Simple specify your server and project, then search for your Work Item and you are tracking your time.

    image

    image

    image

    This will record your time in the history of the work item whenever you stop working on the item.

    image

    You can also specify your estimates against a work item so that you can record how you are going.

    image

    image

    With some very simple configuration the estimates can be mapped to the TFS Work Item fields, per work item type, per project. This can be performed by one member of the team, most likely the one responsible for setting up the project, and then stored on the network share for all team members to reference.

    image

    This will now allow the estimates to automatically update the work item fields, making it easier to record time spent to help with TFS reporting and evidence based scheduling.

    I will be putting the code up soon on CodePlex. This is just version 1, and I have many features I wish to add.

    • Activity monitoring - automatically stop recording when computer is inactive for given period of time.
    • Visual Studio integration - possibly to the extent that you cannot check out code for editing if you have not specified the work item you are working. This is for very strict scheduling scenarios.
    • Check that you are the assigned user for the selected work item
    • Bluetooth device linking - link to a Bluetooth device, like a phone, so that when you walk away recording stops (already got the code for this :) )
    • Mapping Start and Finish dates
    • Possibly allow working on multiple items at once

     

    Update: Project now on CodePlex: http://www.codeplex.com/TFSWorkingOn

    Technorati Tags:

    August 19

    Demos Happen Here - State Finals

    Last night I was fortunate enough to participate in the Queensland State Finals for the Demos Happen {Here} competition. Congratulations to David Apelt who did an excellent demo and will be representing Queensland at the national finals at Tech Ed in Sydney. I would also like to thank Andrew Coates and Roger Lawrence for running the competition and hosting the night.

    Technorati Tags:
    June 25

    Demos Happen Here

    Queensland VSTS User Group ran it's demo fest last Friday. I participated. Here is my demo's abstract:

    Taking Command of Visual Studio

    Visual Studio 2008 has become one very sharp tool. With all tools learning how and when to use it correctly can make life easier. In this demo I will be showing you how to increase efficiency and maximize productivity by utilizing Visual Studio 2008. I will be covering Tips & Tricks around File Management, Navigation, using the Editor, Debugging and Customisation. This will include a vast array of short cut keys which are worth learning and commands you didn't know existed that will save you time. Going further onto customisation I will demonstrate Visual Studio Extensibility (VSX) with Microsoft PowerCommands for Visual Studio 2008 and other very useful extensions.

    Below is the video that was taken on the day. This is also available from the Demo's Happen Here site.

    I've talked about PowerCommands before, and here is where to get RockScroll.

    Anthony posted the results of the mornings sessions. Of course I was a little disappointed to be one point behind winning. But the result is also encouraging and I did have a lot of fun. I hope to do some more presentations soon at some upcoming user groups.

    Thank you to Anthony Borton for putting the morning together, and use of his laptop for my presentation. Thank you to John O'Brien for recording the video.

    June 19

    Circle of Interest

    Recently, Steve Nagy nominated me to continue on with the circle of interest started by Paul Stovell stating the technology areas where I will be focusing my efforts. So here it is:

    Circle of Interest

    Core - Green
    This area consists of things which I already know fairly well, but I know I can learn a whole lot more. They also fall directly what I am working on at the moment, so I have a good opportunity to make good on doing these things better.

    Non-Core - Blue
    I am quite interested in these and will get to use them this year, but I will not get a deep level of understanding, or a great deal of experience, as I will with the core items.

    No More Time - Red
    I'm overly curious. I like technology. But with the whole point of the circle, is to ensure I'm not a jack of all trades, and master of none. These items just get pushed out.

    There are things that I didn't fit on my list, like Expression Studio, Windows Home Server and Windows Media Center. These are things I tinker with, but it is something that I won't get much time, but I like to be able to get by. For example, I used Expression Design to draw the circle. Other technologies, like Windows Server 2008, SQL Server 2008, IIS 7, and other environmental and system administration tasks I am able to get familiar with, due to my work in WiX, MSI and deployment. But I need to utilise others expertise in these areas, because I don't have time to learn it all myself, but again, like to be able to get by.

    Another interesting thing, is that putting the items in a graphic, just made things so much easier to see. When I began drafting, I wrote the items in lists, and it just was not clear. I guess that is a testament to Mind Maps...

    Technorati Tags:
    May 17

    Must have for any Visual Studio 2008 developer

    PowerCommands for Visual Studio 2008. Install it. Nothing else really needs to be said, but I want to highlight a few things.

    This is a free Microsoft built VSX (Visual Studio Extensibility) extension. It adds extremely useful yet simple menu commands that are integrated as if Visual Studio shipped with them already there. I will not go into the detail of the commands there is a comprehensive yet brief document here for that. It is definitely worth the installation and Visual Studio just does not feel the same without it anymore.

    I have been using version 1 for a couple of months now and have just found version 1.1 was released a month ago which adds a host of new handy features. It gets better, the source code is available. This provides a great example on how to code seamless add-ins to Visual Studio. Before you can build the source you need to install the Visual Studio SDK. I have a list of simple refactoring commands that I intend to write as a learning exercise that will also make common coding tasks easier.

    If PowerCommands has convinced you that free first party VSX extensions are a good thing, be sure to check out other releases from Microsoft on the Visual Studio Gallery. The Resource Refactoring Tool is another very good must have.

    Technorati Tags: ,
    April 17

    Finding the Assembly location

    Finding the location of the running application is a task that is often hit. This is usually required to locate resources relative to the application, such as application settings or deployed files. There are many locations that can be used outside of the assemblies location that are often more appropriate, such as the Users' Application Data directory, temporary directory or a database.

    One example that I hit recently where those locations just didn't fit the requirement was for an installation deployed configuration file, which is configured by the installer for application wide settings, and was not to be modified once deployed. This method had to be consistent as it would be used in a shared library by WinForms, Web applications and Office Add-ins. Environment.CurrentDirectory, is usually set to the directory the application was started in, so I skipped that and went straight to the method I've used before:

    System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

    From a WinForms application it returned, as expected:

    C:\Users\Matthew\Documents\Visual Studio 2008\Projects\FindAssemblyLocation\Application1\bin\Debug

    However, when I was running it in a web application it returned a directory that was not very helpful:

    C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\website1\ecf8f52a\3c164603\assembly\dl3\7948a1a3\8eb04ec1_9e9fc801

    And within an Excel Add-in it returned:

    C:\Users\Matthew\AppData\Local\assembly\dl3\3LGRT984.R33\JL6TAD7L.4OV\1e7fb3b7\b3a2d91c_55a0c801

    My colleague mentioned another method, so I gave that one a whirl: (Note _Default is the name of a class in the assembly)

    Directory.GetParent(typeof(_Default).Assembly.Location).FullName;

    Unfortunately it returned the same as above in all instances.

    After a little searching I found another:

    Uri assemblyUri = new Uri(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase));
    assemblyUri.LocalPath;

    From a WinForm application it returned the same as above. From a Web application hosted by IIS it returned:

    C:\Users\Matthew\Documents\Visual Studio 2008\Projects\WebSite1\PrecompiledWeb\WebSite1\bin

    Note however, that this also returned a Local Temporary ASP.NET Files location when running under the Visual Studio ASP.NET Development Server, but this is to be expected. From an Excel Add-in it returned:

    C:\Users\Matthew\Documents\Visual Studio 2008\Projects\FindAssemblyLocation\ExcelAddin1\bin\Debug

    This method appears to work in WinForm applications, Console applications, Office Add-ins, and Web applications hosted in IIS.

    Technorati Tags: ,,

    March 02

    Vista Media Center cannot consume Media Sharing

    After a rebuild of my desktop PC to Windows Vista and a shuffle of my hard drives to give more capacity to my Windows Home Server, all the content for my Vista Media Center had moved. This required a rebuild of my Media Center library but this time I wanted to be smarter about it so that I would not have this same issue later. Windows Home Server has the well promoted Windows Home Server Media Sharing feature which states,

    Windows® Home Server Media Sharing enables you to view, listen, and watch your
    favorite media stored on your home server by using digital media receivers and playback
    devices, such as the Microsoft® Xbox 360™.

    After you have enabled Media Sharing in Windows Home Server, you can simultaneously
    share photos, music, and videos to your home computers and various devices that
    support Windows Media Connect.

    Before I enabled it on my Home Server, due to the potential file copy performance issues that can be aggravated, I decided to test it first hosting from my main desktop PC. Enabling Media Sharing is very easy. Under the library menu of Windows Media Player is Media Sharing...

    Media Sharing settings

    On the Media Center under Networking in Explorer the Media Sharing from desktop is shown as a network device. Clicking on this opens up media player and the shared media library is available as a separate library and works just like the local library.

    Networking Media Sharing 

     Consuming Media Sharing in Windows Media Player

    The nice advantage of this is that the you only need to maintain your library is one place and all the updates are immediately available on by the media consuming machine or devices. Opening up Media Center however, the picture was not so bright. Since the shared media is attached in Media Player as another library, the fact the Media Center and Media Player use the same library is void, and the shared media does not come through to Media Center. I found this thread on The Green Button which covers the issue and Noah Spitzer-Williams, Program Manager for Media Center, entered the discussion and cleared things up,

    Just to set the story straight:
    - No, Media Center in Vista does not look for shared libraries even though they appear in WMP.
    - Yes, this is something we are seriously considering for our next release.  Stay tuned.
    - The best workaround today is to share your music out on a network share and have WMP grovel it.  However, like others have said, the groveling process can be slow over a network and the best method is to manually add the shared music to your library.

    Hope that helps!

    Noah

    Ok, so no Media Sharing consuming for Media Center. At least they are aware of the issue. Looking closer at the Windows Home Server Media Sharing documentation there is a section on Streaming Music to devices and Media Center is included. The recommendation is to enable the Home Server guest account and add the shared folders to the folder watch list. I already have the Media Center user a user in the Home Server, so I do not need to activate the Guest account. I am cautious that if the user has write access to anything, which is useful to update media information, the current home server corruption bug may appear.

    Disappointed with Media Center, I then went for a last ditch effort to make use of this Media Sharing. My wife uses exclusively my old laptop. It is running Windows XP Professional with Media Player 11. Immediately the Media Sharing menus did not work the way they did in Vista so I was suspicious. Very quickly I found the Media Sharing FAQ which nicely told me XP could share the media library, but not consume one! What good is that? I can see the usefulness of Media Sharing, but unfortunately at the moment it can only be used if you have an Xbox 360, which if you have a Media Center alternately could be used as a Media Center extender anyway.

    February 12

    Windows Photo Gallery background color bleeding through pictures

    I've been running Vista on my development computer for several months now. On the whole I have been quite happy with it. Things have worked well, stability has been equal to XP, speed (once I got more RAM) has been better. One strange thing I had though was that pictures in the Windows Photo Gallery looked a little strange.

    Background color bleeding through picture

    After a little searching for how to change the background color, I found other people with this symptom describing it as an off color, yellow tint, orange or yellowish tinge, beige, cream colored background which, shows through the picture itself, distorts the colours, or bleeds through pictures. In most situations the problem went away in slide show mode. This was an annoying issue, making me avoid looking at pictures whatsoever in Windows Photo Gallery. This wasn't that much of an issue because I do not use photos or pictures often on my development machine. But before I was going to install Vista on my other computer where I view photos constantly, I needed to ensure that I would not have this issue.

    The solution is found here.

    The problem ended up being the incorrect usage of a color profile set by a Windows Update for the monitor driver. This commonly occurs on Samsung monitors. My monitors are Samsung's. The monitors on my other computer are LG's and this issue did not occur. Fortunately, the fix is very simple. Just remove the color profiles for the monitors.

    Since I have dual screen setup I did one monitor at a time to see if it worked. The article said you must restart your computer. I did not find this the case. Simply restarting Windows Photo Gallery was enough. The difference was quite obvious when I put the picture split across the two screens.

    One monitor color corrected

    Adjusting the other monitor color profile fixed it completely.

    What the picture should look like

    Below is the color management dialog with the color profile set for the monitor. This needs to be removed. To get to the color management, right click the desktop, select Personalize > Display Settings > Advanced Settings... > Color Management tab > Color Management...

    Color management color profile

    January 24

    WiX project type in Visual Studio "Rosario"

    I am very much looking forward to the release of Visual Studio Rosario. The list of major features is available here. On the list is the integration of WiX. Rob Mensching posted about this back in November. This really validates the work that Rob and his team have done (congratulations to them), and enforces the position many adopted when we took the risk to develop our commercial products' installers with the toolset.

    Rob mentioned that code changes made by the Visual Studio team would be checked back into the WiX trunk. I was curious about the progress on WiX in Rosario so I downloaded the November CTP VPC. I was a bit disappointed when I saw that at the moment, it is just Votive installed as in Visual Studio 2008, but it is very early days.

    Visual Studio Rosario WiX v3.0 Installed on Visual Studio 2008

    I am hoping that the Visual Studio team would take WiX in a similar way that they did with FxCop and Code Analysis. I still think it should be called WiX in Visual Studio, but I would like it to be a first grade component, rather than a latecomer tack on. The difference between the integrated version and the sourceforge hosted version should be very simple, WiX project types should be within Other Project Types > Setup and Deployment and different product/upgrade GUID's.

    WiX project templates Setup and Deployment project templates

    Christopher Painter said there is a huge gap in the authoring/designer/editing tools for WiX, which is completely correct. I think Microsoft considering to purchase a current tool and integrate that might be a good way to go, but I think Microsoft already has code, mostly from the current Visual Studio Setup projects, for the critical features that are required.

    1. Enabling automatic file references generation based on project outputs.

    Microsoft already has the ability to add project output for the current Setup Project. Adding XML output of these files outputs should be a comparably small task with a huge gain. With web projects, manually maintaining the file list is the largest complaint I get about WiX from the development team. I know automating this has issues with component rules, but there was talk a while ago that there is a solution that could be implemented using a component catalog database. This should also include the automatic Detected Dependencies.

    2. Forms designer

    The current WPF forms designer is a live dual view, form and XML. Add to the toolbox the Windows Installer form components and modify the XML generation engine.

    3. Bootstrapper integration

    This is already available via the GenerateBootstrapper MSBuild task. Add the interface as in a Setup Project or ClickOnce for configuration and Prerequisite selection. It would be a nice addition to both WiX and VS Setup projects if selections for the bootstrapper prerequisites, also sets the launch conditions on the MSI.

    4. File System, Registry, File Types, User Interface Sequence, Custom Actions and Launch Conditions Editors

    All these editors currently existing could be made to support WiX generation. This would be a huge step forward for WiX becoming mainstream. Since developers are not afraid to modify XML like WiX, it still comes down to the understanding of Windows Installer to do advanced things correctly, whether or not you have nice designers and authoring tools. However, this current set of editors has allowed many developers to author satisfactory installers without needing to know what is going on.

    As a developer, I understand it is easy for someone of the outside to look in and say, "it should be quick and easy", but that is not often the reality. This is just my wish list. I do realise this is very early stages, and only more good will come of WiX with some full time developers on it. Exciting times ahead, other installation tool companies better watch out!

    Technorati Tags: ,
    January 19

    WiX is Free... almost

    Christopher Painter recently posted an interesting WiX post, WiX: Forced to use Beta Software, and now has a follow up cleverly titled, Pay No Attention To The Bugs Behind the Curtain. These are very good arguments that have been bought up, but I think there is another aspect that is being slightly overlooked. WiX is free open source software.

    My experiences with open source projects have generally come with the issues that Christopher has been raising, lack of support, unknown release quality, and unknown version compatibility. If Microsoft and not just their employees, on their own time, built WiX, many of these concerns might go away.

    Being open source is also its strength. It is completely free, if you have the time. If WiX were a commercial product, it would then have great difficulty competing against the current major MSI authoring tools. If you come across any showstopper bugs, you can fix them yourself, although this can be a time consuming, expensive process. If it does not suit, you can make it. You just need to look at what SharpDevelop did to the WiX MSBuild target for WiX v2 to support fragments in their IDE. The difference is the developer remains in control. Whenever you use a third party product you are depending on them to support and fix any issues you find in a timely manner. This does not always happen and can leave you stranded.

    Being forced to use Beta software is a bit of an embellishment. I completely agree that as a setup developer you are stuck if you want to use Votive. How do I get around this? I do not use it. WiX v2 is great, Votive v2 is not. As long as you can hit a button and create a ready to ship MSI, this is all that matters. I simply have an empty C# project that contains the list of WiX files. In the MSBuild script for the project, I run the command line tools to generate my installer with WiX. I have the WiX release I used to develop that installer, checked in source control, and referenced by the MSBuild task. You do not need to be concerned about what WiX release you are using as long as it creates the MSI you need for your project.

    This only becomes an issue when you want to take advantage of new features or you come across a bug that you cannot workaround. Here you have two options. See if it has been fixed in a later release, or fix it yourself. If you use a later release, then you have to go through a complete quality assurance process of your MSI you have created. This is like any commercial product. If you fix it yourself, it will cost you time, but hopefully you will be able to estimate the timeframe that will be required. This is not like any commercial product. For example, we have recently come across a showstopper bug in the .NET Framework 2.0 SP1. This is preventing us moving forward to .NET 3.5. The fix is known, has been raised with Microsoft, but we need to wait for their process to get a fix. (A recent update informs there will not be a hotfix release, because a workaround is available, which may not help to us, because the code is in a 3rd party control.)

    I am using WiX v2 and do not intend to move to WiX v3 until the schema is stabilised and it is given the go ahead. It would be too expensive for me to develop my installers in v3 and have to modify them heavily to work in later releases of v3. There are already plenty of modifications required to move from v2 to v3, so I only want to have to do this once. Having all the developers focused on v3 is an issue since support for v2 is short. The mailing list alleviates this issue, although many responses are "you can do this in v3", which is of no help. I would like to move to v3 due to great new features and integration with Visual Studio. This is not something that I can do if business depends on it. It was a risk moving to WiX v2 while it still was not finished. I had to choose a weekly release and work with that, until I hit a bug that was fixed in a later weekly release.

    Now that WiX (Votive specifically) is being developed within the Visual Studio Rosario team hopefully releases will be more supported, higher quality and better version compatibility. It is unlikely that I will move to WiX v3 for any commercial project before a release candidate of Rosario is available.

    Technorati Tags: ,