using Colin.Bowern;

Life ends with a semi-colon.

  Home  |   Contact  |   Syndication    |   Login
  22 Posts | 0 Stories | 2 Comments | 24 Trackbacks

News

Archives

Post Categories

Sunday, June 24, 2007 #

Check out http://colin.rockstarguys.com for more adventures!

Wednesday, July 12, 2006 #

Join the team that is building the next generation of Internet-based communities for music legends and new recording artists. If you are passionate about software and love regularly dealing with challenges then this is THE place to work. A strong development team with great team spirit and work culture is waiting for you here at officialCOMMUNITY – a place that provides an opportunity to make an industry wide impact.

We are looking for a highly motivated and seasoned Lead Web/Software Developer to work on the web platform for our communities in our Toronto, Canada office. The position involves technical design and implementation of new features as well as enhancements to existing feature sets. We are seeking an individual who will take a lead position in the development with a proven record of shipping iterative releases and enjoys sharing their experiences and knowledge with the rest of the team. Read on to find out if you can be part of this success story!

Required Experience and Education:

  • 3 - 5 years industry experience with a proven track record of shipping iterative releases.
  • Obtained or plans to obtain within the next 6 - 12 months a Microsoft development certification (MCTS/MCPD for Visual Studio 2005, MCAD/MCSD for Visual Studio .NET).
  • Technical degree in Computer Science, Math, or Electrical Engineering or a minimum of equivalent industry work experience.

Required Skills:

  • Experience with the following .NET technologies: C#, ASP.NET, SQL Server, Design Patterns;
  • Experience with Agile/Extreme Programming practices (unit testing, iterative development);
  • Experience with Telligent Community Server, ASP.NET 2.0 Web Parts, AJAX, RSS, Mobile Web Applications, and/or Media Center development an asset;
  • Development community participation (e.g. blogging, releasing sample code, working on open source projects, etc...) an asset;
  • Strong object oriented programming skills and secure development practices; * Ability to quickly understand user interface/experience concepts;
  • Ability to achieve results in a fast-paced team-based work environment;
  • Strong written and oral communication skills.
  • ... and of course, a strong passion for cutting edge technology!

Please send resumes to: sd_opportunity@officialcommunity.com

We appreciate and consider all applications, however, only those candidates selected for an interview will be contacted.


Thursday, June 08, 2006 #

I set off intending to experiment with Team Foundation Server recently to potentially replace our Subversion deployment.  As I built up my virtual machine for the TFS application tier I went to install the data tier on our beefy 64-bit SQL Server machine and was stopped by a problem:

SQL Server 2005 Reporting Services service is installed on the data-tier computer. The service should instead be on the application-tier computer. Uninstall SQL Server 2005 Reporting Services from the data-tier computer and run setup again.

Upon further investigation I found out that TFS seems to want to be isolated in it's data tier.  Sure we could everything onto a single box but I've got a perfectly good SQL Server which has three instances of SQL Server to support both production and development needs for the office.  Why would I want to install yet another copy of SQL Server which I need to manage, monitor, and patch?  I am amazed to see a mentality of application development that “applications require their own dedicated server“.  Sometimes I wonder if the folks in Redmond realize that not all of us have billions of dollars in the bank to buy servers?  I want to maximize the investment in my hardware which means stacking several applications onto a single server.  Wasn't that the message the Windows Server 2003 marketing folks wanted to convey -- “Do more with less“?  Applications should only need a dedicated server when their resource usage profile causes resource contention - not because a developer decided to assume that the server would contain nothing else. 

Reviewing the TFS installation guide again I noticed a related comment which made me chuckle:

Team Foundation Server cannot be installed on a domain controller and does not support installing other servers such as Exchange Server or Host Integration Server on the same computer.

I would really be interested in knowing why they wrote this.  What's so bad about a machine running as a domain controller or Exchange Server?  They don't mutate the system into a horribly unusable state last I checked.


Sunday, June 04, 2006 #

Recently I endeavoured to purchase a laptop on eBay.  Being a relatively sophisticated user I figured I could find and discern the validity of a decent deal.  I did succeed (well, waiting on the arrival at the moment is more accurate) in finding a good deal.  Throughout the process, however, I received numerous unsolicited emails offering up similar items.  The people who sent the emails purported to be the seller of the item which the referenced:

Message from eBay Member rocobar431  

I am the seller of the  SONY-VAIO-BX570B-2.26GHz-1GB RAM-17"- Item number: 6884582148 and i have subscribed to the ebay second chance program . Second Chance offers can be sent to any of the non-winning bidders if the high bidder does not buy the item, if a seller has duplicate items, or the reserve price is not met in a Reserve Price Auction. eBay Second Chance Offer is made to give a another opportunity to non-winning bidders to purchase the wanted items.   Ebay asked me to email all my trustable bidders that expressed the interest of buying my product and ask them if they want to purchase it. If you are stil interested in my item please reply or mail me at rocobar431@yahoo.com   

REMEMBER: 
* WHEN YOU REPLY COPY THE ITEM FORM THE TITLE EX ITEM# 6884582148 !
* IF YOU ARE INTERESTED PLEASE REPLY OR MAIL AT :
rocobar431@yahoo.com  ! 

Thanks,  
===================================================
This request is related to item # 6884582148.
http://www.ebay.ph/viItem?ItemId=6884582148
=================================================== 

Marketplace Safety Tips 

Never respond to an unsolicited email that includes incentives to buy or sell an item off the eBay Marketplace. If you get such an email, please report it to eBay at
http://www.ebay.ph/helpTSForm. Never pay for your eBay item through instant cash transfer services such as Western Union or MoneyGram - such services offer Internet shoppers no protection against fraud. 

=================================================== 
Note: Immediately contact Rules & Safety
http://www.ebay.ph/help?page=helpPolicies if one of eBay's rules were violated, such as: 
- Your contact information was used for purposes unrelated to eBay business, published online or offline, or was used for the purposes of harassment.
- You received contact information that you believe to be erroneous.

Thank you for using eBay!
http://www.ebay.ph/

A little background check on the item and the member and I can see that there is no link.  On top of that the member has zero activity on their account and is less than a month old.  I would think it would be an easy win to enable an option for those who are not currently selling to disable unsolicited communication from members who  you have not interacted with. I emailed eBay to ask how this person could have sent this and I get the following:

We have reviewed your report and have found that the message you received was made to appear as if it had been sent by an eBay user, however, it was not. 

Is eBay running the scam?  Because when I look at the message headers it seems very obvious it was routed through an eBay mail server:

Received: from mx27.sjc.ebay.com ([66.135.197.19]) by bay0-mc11-f5.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.1830); Sun, 4 Jun 2006 07:17:59 -0700
Received: from qsxrow04.den.ebay.com (qsxrow04.den.ebay.com [10.4.67.14]) by mx27.sjc.ebay.com (8.13.5/8.13.5) with ESMTP id k54EHxE9003235 for <email-address-removed>; Sun, 4 Jun 2006 07:17:59 -0700
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by qsxrow04.den.ebay.com (8.11.6/8.11.6) with ESMTP id k54EHwb22880 for <email-address-removed>; Sun, 4 Jun 2006 07:17:58 -0700

Do they need to have an open relay server closed up?  Windows Live Mail reports this email as coming from a “Known Sender”.  I think this example highlights a key problem with the language used because I don’t know this person, I don’t like the smell of this email, and I would easily consider it junk.  I bet hitting Report & Delete will do nothing as well since eBay has paid to have their domain cleared through the Bonded Sender program.  Thanks for not protecting my security guys. Then I read:

All email sent to you from other members through eBay's Email Forwarding System are also in your My Messages portion of My eBay. If you get a questions from another eBay member, or from eBay, check My Messages first. If it's not there, then it is a fake email. 


Email forwarding system!?!?? That seems totally counter-productive when it comes to stopping fraudulent use of your system.

So I’m left wondering if I’m missing something there.  I think eBay needs to review their privacy policies and help protect those who don’t know how (or think) to look behind the covers of the messages they receive.


Thursday, May 11, 2006 #

Looking to deploy the Atlas Framework to our production environment and I realized their registration script for the http handler only registers the script on the first site (site ID 1).  Since we have multiple sites I thought I'd through together a more robust registration script based on my previous blog entry that I thought I'd share:

    1 Option Explicit

    2 Dim WMIService, ApplicationPool, ApplicationPools, Applications, index, VirtualDirectorySettings

    3 Dim ApplicationName, ScriptMap, FoundMapping, ScriptMapCollection, LastPosition

    4 Const ComputerName = "localhost"

    5 Const ScriptMapExtension = ".asbx"

    6 Const ScriptMapEntry = ".asbx,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST"

    7 

    8 Set WMIService = GetObject("winmgmts:{authenticationLevel=pktPrivacy}\\" + ComputerName + "\root\microsoftiisv2")

    9 Set ApplicationPools = WMIService.ExecQuery("Select * From IIsApplicationPool Where Name LIKE 'W3SVC/AppPools/%'")

   10 

   11 For Each ApplicationPool in ApplicationPools

   12     WScript.Echo "Inspecting Application Pool " + ApplicationPool.Name

   13     ApplicationPool.EnumAppsInPool Applications

   14     For index = 0 to UBound(Applications)

   15         ApplicationName = CleanApplicationName(Applications(index))

   16         Set VirtualDirectorySettings = GetObject( "IIS://" + ComputerName + "/" + ApplicationName)

   17         If Err.number = 0 Then

   18             ScriptMapCollection = VirtualDirectorySettings.ScriptMaps

   19             FoundMapping = False

   20             For Each ScriptMap in ScriptMapCollection

   21                 If LCase(Left(ScriptMap, Len(ScriptMapExtension))) = ScriptMapExtension then

   22                     WScript.Echo ApplicationName + " - Updating (Previous: " + ScriptMap + ")"

   23                     ScriptMap = ScriptMapEntry

   24                     FoundMapping = True

   25                     Exit For

   26                 End IF

   27             Next

   28 

   29             If FoundMapping = False Then

   30                 LastPosition = UBound(ScriptMapCollection) + 1

   31                 Redim Preserve ScriptMapCollection(LastPosition)

   32                 WScript.Echo ApplicationName + " - Adding " + ScriptMapExtension

   33                 ScriptMapCollection(LastPosition) = ScriptMapEntry

   34             End If

   35 

   36             VirtualDirectorySettings.ScriptMaps = ScriptMapCollection

   37             VirtualDirectorySettings.SetInfo

   38         Else

   39             WScript.Echo ApplicationName & " - Unable to locate application virtual directory."

   40         End If

   41     Next

   42     WScript.Echo

   43 Next

   44 

   45 ' Trims the leading /LM/ and trailing /

   46 Function CleanApplicationName(applicationName)

   47     Dim ReturnValue

   48 

   49     If Len(applicationName) < 5 Then

   50         WScript.Echo "applicationName should be greater than 5 characters: " + applicationName

   51         Exit Function

   52     End If

   53 

   54     ReturnValue = Mid(applicationName, 5)

   55     ReturnValue = Mid(ReturnValue, 1, Len(ReturnValue) - 1)

   56 

   57     CleanApplicationName = ReturnValue

   58 End Function


Monday, May 08, 2006 #

Ever get the following error? “It is not possible to run two different versions of ASP.NET in the same IIS process. Please use the IIS Administration Tool to reconfigure your server to run the application in a separate process.” And of course you don't want to spend all day going through the IIS MMC dialog boxes on a web server with a large number of applications....

Friday, January 06, 2006 #

I've always been puzzled as to why the Web Site Administration tool shipped with ASP.NET 2.0 didn't seem to function nor error out when I had a brand new application being developed on my workstation where SQL Server 2005 Developer Edition is installed.

The ASP.NET 2.0 machine configuration has a pre-defined connection string for providers which is tied to the default SQL Server 2005 Express Edition configuration that ships with Visual Studio 2005. I never installed the Express edition because the projects I work on typically require the more advanced SQL Server feature set. As a result I use the Developer Edition for most of my work. To get the 'out-of-the-box' functionality of the Web Site Administration Tool I made a few changes to the machine.config. Here's an excerpt of what I use on my C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config:

<connectionStrings>
    <add name="LocalSqlServer" 
         connectionString="data source=.\SQL2005DEV;Initial Catalog=aspnetdb;Integrated Security=SSPI"
         providerName="System.Data.SqlClient" />
connectionStrings>

Saturday, January 07, 2006 #

Are you a developer interested in improving your .NET skills? Then this is the event to attend. The Toronto Code Camp promises to be the biggest and best community owned event we've ever had in Toronto, Canada. This free one day seminar is designed as a series of intensive code related demos and technical sessions to guide the developer to the next skill level. The continuing goal of Code Camps is to provide an intensive developer-to-developer learning experience that is fun and technically stimulating. The focus is on delivering programming information and sample code that can be used immediately. All training, slides, manuals and demo code are provided free of charge!

I'll be presenting a session on Getting to Know Your Users with Membership, Roles, and Personalization in ASP.NET 2.0 that day, so if you're there be sure to drop in and say hi! Some additional spaces just opened up for the event on Saturday January 14th, 2006.

Link: Toronto Code Camp


Friday, January 20, 2006 #

So it's time to actually deploy a real anti-virus vendor here at the office.  We've run out of our free one year trial of CA e-Trust.  So we closed our eyes, and of the vendors which support all of the stuff we need (ISA Server, SharePoint, Exchange, Windows) we threw darts.  Symantec got the dart and what a ride it has been. 

First was the challenge of testing the client installation.  Got to love the developers for forgetting that processes can hang and the user needs to be informed during installation. As it turns out, Symantec Anti Virus and ISA Server 2004 Firewall Client can potentially clash - the result being an unexplained hang in the installation (underneath the savinst.exe process is toast).  So I've got that fixed and now it's on to trying to get LiveUpdate to see the real world. 

Next problem requires me to disable the Windows Firewall on each of the desktops - not a recommendation I would expect from a security vendor, but we continue.  Finally with the client installed it looks like it's time to install the server product.  We'll be venturing into that world this weekend. 

But first before I break open the box it turns out Symantec has no support for ISA Server 2004 - the product I received only supports ISA Server 2000.  Hello, retro?  Why don't we just install Proxy Server 2.0 for all it matters.  The kicker is that I did research the product specs and I overlooked that they were very vague about system requirements with “Microsoft ISA Server, SP1“ as their requirement.

So the fun continues and I'm sure I'll have many more items to share on the joys of antivirus deployment. Maybe I should start a blog on poor user experience design.


Saturday, January 21, 2006 #

I really liked the original exception management block put out by Microsoft.  The reason is because it included all the information relating to an exception - not just the Message property.  It made production debugging a breeze.  Now with ASP.NET 2.0 and Health Monitoring something similar has been created but it doesn't quite cover all the details.  I first ran into this in an application where I had created a custom exception, ArgumentFormatException, and passed along two additional properties.  After puttering through the underpinnings of the Health Monitoring feature I noticed that the exception information is captured using the Message property of the Exception by the EventLogWebProvider class.  In order to beef up the data returned by my exception I put in a Message property which overrides the base version:

  127         public override string Message

  128         {

  129             get

  130             {

  131                 StringBuilder messageText = new StringBuilder(base.Message);

  132 

  133                 if ((this.m_ExpectedFormat != null) && (this.m_ExpectedFormat.Length != 0))

  134                 {

  135                     messageText.Append(Environment.NewLine);

  136                     messageText.AppendFormat(CultureInfo.CurrentCulture, StringResources.ParameterExpectedFormat, m_ExpectedFormat);

  137                 }

  138 

  139                 if ((this.m_ActualValue != null) && (this.m_ActualValue.Length != 0))

  140                 {

  141                     messageText.Append(Environment.NewLine);

  142                     messageText.AppendFormat(CultureInfo.CurrentCulture, StringResources.ParameterActualValue, m_ActualValue);

  143                 }

  144 

  145                 return messageText.ToString();

  146             }

  147         }

After re-running the tests voila I now have more detailed exceptions.

Exception information:

Exception type: ArgumentFormatException

Exception message: The variable does not match the expected format.

Parameter name: emailAddress

Expected Format: ^([a-zA-Z0-9_\-\.']+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$

Actual Value: xxxx


Development machines here use a delayed signing for building binaries. Only during the build process on the build server does a public/private key pair get used for signing assemblies. When using the unit testing features of Visual Studio 2005 we are prompted to provide a key for re-signing an assembly after instrumentation has been applied. If we provide the public key it will fail. If we provide the public/private key pair it will work. 

Has anyone else managed to get this working?  Here's what I'm trying to do:

1. Create a public/private key pair and extract the public key:
sn -k Private.snk
sn -p Private.snk Public.snk
2. Create a class library project and specify it should delay sign using Public.snk
3. Create a test project and enable Code Coverage.
4. Check the "instrument assemblies in place" option and provide a path to the Public.snk
5. Attempt a test run.

-or-

From the command prompt:

sn -R bin\Debug\MyAssembly.dll Public.snk

In turn you'll get the following when using IDE for code coverage:

Instrumentation warning: Cannot extract the public key from the key file 'C:\Projects\Common\Common\Public.snk': Bad Version of provider. (Exception from HRESULT: 0x80090007)
Check that the key file is not password protected. Password protected key files are not supported. (It's not password protected!)
Code coverage instrumentation warning while processing file Common.dll:
Warning VSP2001 : C:\Projects\MyAssembly\MyAssembly\bin\Debug\MyAssembly.dll is a strongly named assembly. It will need to be re-signed before it can be executed.
Warning VSP2013 : Instrumenting this image requires it to run as a 32-bit process. The CLR header flags have been updated to reflect this.


When using command prompt:

Failed to extract public key from key pair -- Bad Version of provider.

Ah well.  Filed as a bug and will hopefully be fixed.  So much for the joys of delay signing.

MSDN Product Feedback Center: Bug Details


Thursday, January 26, 2006 #

Most server administrators separate their content from their system data (at least I think they do :) ).  Content that grows will from time-to-time get by the monitoring process and bring a server to a halt because there is insufficient space on the sytem drive to continue. 

As I built up another test server image I had a desire to delete the c:\wmpub\wmiislog folder which Windows Media Services leaves behind.  From explorer you can't delete this folder because it is in use.  But what is using it?  After a quick search with Sysinternals Process Explorer I found that winlogon.exe is the culprit. 

Screenshot of Process Explorer handles window showing winlogon.exe's handle on the wmiislog folder

But why?  A search of the internet has revealed no published rational behind this.  Being a fan of keeping things in order there doesn't appear to be any purpose behind the folder so I'm nuking it.  To make this happen I first had to close the handle using Process Explorer (right click on the handle, “Close Handle”) and then remove the folder.

The bad news is that upon reboot the folder reappeared.  Hopefully we'll see this change in the next release of Windows Server.


Friday, January 27, 2006 #

While building a new Exchange 2003 server I was installing Service Pack 2 and came across an interesting issue:

Setup failed while installing sub-component Exchange ActiveSync with error code 0xC0070643 (please consult the installatoin logs for a detailed description).  You may cancel the installation or try the failed setup again.

Digging into the installation logs I see it's trying to install MSXML:

[18:52:22] Calling MSXML installer with command line:  "msiexec /i msxml3.msi /q reboot="ReallySuppress""
[18:52:22] Process created ... waiting (-1)
[18:52:23] Process has exited with 0x000643
[18:52:23] The command

 msiexec /i msxml3.msi /q reboot="ReallySuppress"

failed, returning error code 1603 (Fatal error during installation.). -- ID:31136 -- ScCreateProcess (f:\tisp2\admin\src\libs\exsetup\hiddenw1.cxx:1821)
           Error code 0XC0070643 (1603): Fatal error during installation.

The event logs subsequently tell me:

Event Type: Error
Event Source: MsiInstaller
Event ID: 1013
Description:
Product: Microsoft XML Parser -- Your system has newer version of MSXML3 SP5 than the version you are attempting to install. Setup will quit.

Well, duh!  I have MSXML3 SP7 installed.  It appears that someone didn't quite figure out that yes in fact new versions of dependent component do in fact come out and that it's nothing to error out over.  I wish all the product groups would expose a service like the MSDN Product Feedback center.  I can't be bothered to open up a PSS case just to report this.  So here's my workaround for anyone else that comes across this:

  1. Get a copy of the Windows Installer package for the version of MSXML 3 you have installed.
  2. Place a copy inside Exchsrvr\bin
  3. Rename the existing msxml3.msi to msxml3.msi.backup
  4. Make a copy of the latest version MSXML Windows Installer file and rename it to msxml3.msi.  This will leave you with msxml3.msi and msxml3sp?.msi (in my case msxml3sp7.msi).
  5. Click Retry on the error and it should continue as planned.

Hope that helps.  One of these days we'll get these things right.


Thursday, February 02, 2006 #

I really hope Outlook 12 has a nice RSS/NNTP integration story.  I use Omea Reader right now because it has provided the smoothest integration between RSS and NNTP.  I find myself in Outlook Express from time to time for NNTP though because OE is quite responsive.  Omea does a good job, it's just a bit sluggish at times.  What would be better is to see JetBrains develop an Outlook add-in (hint, hint Omea development team!).


Monday, February 06, 2006 #

Have you ever had the need to get line numbers from an exception stack trace for an assembly in the GAC?  If you work with BizTalk Server the answer is likely yes.  To debug Commerce Server pipeline components which I have traditionally put custom C# pipeline components in the GAC and then registered for COM interop.  I've found having line numbers indespensible when apps are running in the production test environment. I went searching for the answer and came across it.  I thought I'd write it down here so I remember it.

To get line numbers with your stack trace:

  1. When compiling both debug and release builds make sure to generate a program database (aka symbols). 
    • For release builds you'll want to make sure you use the correct switch, /debug:pdbonly, since /debug:full disables optimization.
  2. When you need line numbers place the .pdb file beside your assembly (in the same folder). 
    • For GAC assemblies you'll need to put it in the assembly folder (e.g. c:\windows\assembly\gac\\__)
    • Be aware that the .NET Framework 2.0 is adding platform specific GAC folders (e.g. GAC, GAC_32, GAC_MSIL, etc...).

Then you should have line numbers in your stack traces.  It's great for debugging and the program databases can be in place for explicit debugging needs and then removed if you don't feel comfortable with them there.