Tuesday, December 04, 2007
Some Microsoft employees have really cool jobs. Some fo the Developer evangelist types are planning a Code on the Road trip for 2008. Can you say geek out!

Keeps tabs at thecodetrip.com

12/4/2007 4:40:08 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Friday, September 01, 2006

Yesterday I was faced with a scenario that I have encountered many times before.  I am developing a system in which I will be tracking things like articles and putting them into categories.  I like my code to follow common patterns of abstraction and Domain design models.  Users of the dataset get change tracking for free.  Its time for the Domain Object community to get that as well.

The scenario:  Domain object Article has a property called Categories that is a collection (think List<Category>).  The persistence medium is a database that has 3 tables for articles, categories, and an article to category linking table.  The UI must show all possible categories, indicate the ones the article is already in and handle changes by the user.

The shortcut:  In the past my solution to this scenario was to simply remove the article from all categories and then add it back to the ones that were selected.  That solution is very simple because you never have to worry about which categories the article was in before the update.

The ChangeAwareList<T>:  As I pondered my previous shortcut solution to this problem I concluded that it was time to do it right.  After all, some systems will have a problem if you are always recreating the article to category mappings.  At a minimum the database probably has to re-index the data that may have already existed, but was just deleted and recreated.  Also, the linking table may have other data in it that is being used elsewhere and the shortcut solution could cause problems in those scenarios.  What is needed is a Domain class that can track the changes to a collection.  Note, this is not for tracking changes within an object.  The would be handled with a base class or an interface that tracks the state of an object.  ChangeAwareList<T> is about tracking the state of a collection.

ChangeAwareList<T> inherits from List<T> and adds support for change tracking.  It can be used anywhere a List<T> would be used.  In my case I created a Categories class that simply inherits from ChangeAwareList<T>.     public class Categories : ChangeAwareList<Category> {}

In my data access layer my Get operations load up the collection, turn on the change tracking, then hand it to the business layer.  When the business layer hands back the collection it simply deletes all the items in the RemovedItems collection and adds all the items in the AddedItems collection.  Anything that did not change is left alone.     ChangeAwareList<T> allows you to work with the original collection, the new items, the deleted items, or the updated collection.

Here is the code for anyone interested.

  public class ChangeAwareList<T> : List<T>
   {
      List<T> _addedItems;
      List<T> _removedItems;
      bool _trackChanges;

      public ChangeAwareList()
      {
         _trackChanges = false;
         _addedItems = new List<T>();
         _removedItems = new List<T>();
      }

      #region Clear
      public new void Clear()
      {
         if (_trackChanges)
         {
            _removedItems.AddRange(base.FindAll(AlwaysTrue));
         }
         base.Clear();
      }
      #endregion
     
      #region Remove
      public new bool Remove(T t)
      {
         if (_trackChanges)
         {
            _removedItems.Add(t);
         }
         return base.Remove(t);
      }
     
      public new void RemoveAt(int index)
      {
         if (_trackChanges)
         {
           _removedItems.Add(base[index]);
         }
         base.RemoveAt(index);
      }

      public new void RemoveRange(int index, int count)
      {
         if (_trackChanges)
         {
            _removedItems.AddRange(base.GetRange(index,count));
         }
         base.RemoveRange(index, count);
      }
     
      public new void RemoveAll(Predicate<T> match)
      {
         if (_trackChanges)
         {
            _removedItems.AddRange(base.FindAll(match));
         }
         base.RemoveAll(match);
      }
      #endregion

      #region Add Methods
      public new void Add(T t)
      {
         if (_trackChanges)
         {
            _addedItems.Add(t);
         }
         base.Add(t);
      }
     
      public new void AddRange(IEnumerable<T> collection)
      {
         if (_trackChanges)
         {
            _addedItems.AddRange(collection);
         }
         base.AddRange(collection);
      }
      #endregion

      #region Insert
      public new void Insert(int index, T t)
      {
         if (_trackChanges)
         {
            _addedItems.Add(t);
         }
         base.Insert(index, t);
      }

      public new void InsertRange(int index, IEnumerable<T> collection)
      {
         if (_trackChanges)
         {
            _addedItems.AddRange(collection);
         }
         base.InsertRange(index, collection);
      }
      #endregion
 
      #region Change Tracking
      public List<T> AddedItems
      {
         get
         {
            return _addedItems;
         }
         set
         {
            _addedItems = value;
         }
      }

      public List<T> RemovedItems
      {
         get
         {
            return _removedItems;
         }
         set
         {
            _removedItems = value;
         }
      }

      public List<T> OriginalItems
      {
         get
         {
            List<T> original = base.FindAll(AlwaysTrue);

            foreach (T t in _addedItems)
            {
               original.Remove(t);
            }
            foreach (T t in _removedItems)
            {
               original.Add(t);
            }
            return original;
         }
      }

      private bool AlwaysTrue(T t)
      {
         return true;
      }

      public bool EnableChangeTracking
      {
         get
         {
            return _trackChanges;
         }
         set
         {
            _trackChanges = value;
         }
      }
      #endregion


   }

 

9/1/2006 8:50:31 AM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Monday, May 15, 2006

I just discovered the latest in open Source Control options know as CodePlex.  It is built on top of Team Foundation Server (TFS) and makes use of all of the TFS goodness such as work items and full integration with Visual Studio 2005 through Team Explorer.  This one looks like a great way for people to get a taste of working with Team Foundation Server.  If it doesn't have the problems that GotDotNet had when it launched then it should be a real winner.  I have to say that if I were to get involved in another open source project I would definitely give this one a try.  I have tasted of the goodness of TFS and I love it!

Now, I wonder how I can get this nice web UI of CodePlex for my in house TFS projects at Pets Best.

 

5/15/2006 8:52:52 AM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Friday, March 31, 2006

If you have not heard the Waterfall method of software development is coming back strong.  Check out the Waterfall 2006 conference taking place tomorrow.  (For those who are stiull using BlondeStar, this conferce is on April first.  The folks at BlondeStar can help you get there.)

If you still feel that Agile methodologies are better then perhaps you would prefer the upcoming Test Driven Development seminar in Boise, ID.

3/31/2006 10:19:27 AM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Friday, March 03, 2006

Time is nearing for the first Boise Code Camp.  I will be doing 2 presentations on DotNetNuke and several others will be presenting a lot of other great material.  I put a lot of effort in getting door prizes for the event.  We are close to having enough prizes that most attendees should go home with something.  Of course the session material is the most valuable aspect, but winning a copy of Visual Studio Team Suite with MSDN wouldn't hurt either.

3/3/2006 10:19:09 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Friday, January 20, 2006

This week has been absolutely amazing.  Sr. level .NET developer jobs are showing up everywhere.  Here is a list off the top of my head.

Amphire
Healthwise
Micron
Comsys
TEK systems
Idaho Commerce and Labor
Innova Systems International
WillowTree Software
neoreef

1/20/2006 11:55:42 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Thursday, January 12, 2006

.NET guru Scott Hanselman has started a new podcast.  No excuses, just get over there and subscribe to it.

www.hanselminutes.com

1/12/2006 10:20:34 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback

I checked today and the script I wrote yesterday is working!  I was feeding the entire URI to the tracker which makes the document path show up with the protocol as the folder name in the tool.  I decided to modify the TrackIt function slightly.  I am peeling off the protocol from the link and prepending it with my own folder name to make it easy to distinguish document downloads for other content.

Enjoy!

function TrackIt(link)
{
// Remove the conversion to Lowercase if you are on a Case sensitive web server
var slashes = link.href.indexOf("//") + 2;
var docPath = link.href.toLowerCase().substring(slashes, link.href.length);
urchinTracker(
"/#docs/" + docPath);
}

1/12/2006 9:42:59 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Wednesday, January 11, 2006

Previously I blogged about possible solutions for tracking downloads with Google Analytics.  The solution I am going to experiment with first is to dynamically add the tracking code to my download links via JavaScript.  I spent quite a bit of time on my script to make it cross-browser compatible and so that it would handle proper timing of execution based on the loading of the links.  I also used a regular expression to limit the tracking to specific link types.  Hopefully those match most cases.  If all goes well I will probably wrap all of this into a simple ASP.NET control that can be added to an page you want tracked. 

First off you need the standard Google tracking scripts:

<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
<script type="text/javascript">
_uacct = "UA-XXXXXX-X";
urchinTracker();
</script>

Second is my new download tracking script.  I have placed it in a separate file for browser caching and easy updating.  Also it has the defer="defer" attribute so that IE will not load the script until the content has finished loading.  XHTML compliance required me to include a value for the attribute.  Please let me know if you come up with any improvements to the script or if you find any errors.  Thanks to quirksmode for info on the dynamic event models and dean edwards for info on deferred script execution.

<script type="text/javascript" src="downloadtracker.js" defer="defer"></script>

Here is the actual downloadtracker.js code

// We dont want the try adding the tracking code until the page links are loaded
if (document.addEventListener) {
document.addEventListener(
"DOMContentLoaded", addEvents, null); // Firefox
} else {
addEvents();
// IE : Call the function immediately because the script is referenced with the defer attribute supported by IE
}

function addEvents()
{
// quit if this function has already been called
if (arguments.callee.done) return;
// flag this function so we don't do the same thing twice
arguments.callee.done = true;
for (i=0; i <document.links.length; i++)
{
var x = document.links[i];
// Only attach tracking code to specific file types
var extensions = new RegExp(".+\.(zip|pdf|xls|doc|csv|txt|ppt|xml|rtf)$");
var doc = x.href.toLowerCase().match(extensions);
if (doc)
{
if (x.attachEvent)
{
x.attachEvent(
'onclick', function () {TrackIt(window.event.srcElement)}); // IE
} else {
x.addEventListener(
'click', function () {TrackIt(this)}, false); // Firefox
}
}
}
}

function TrackIt(link)
{
// Remove the conversion to Lowercase if you are on a Case sensitive web server
urchinTracker(link.href.toLowerCase());
}

1/11/2006 12:02:45 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Thursday, December 01, 2005

Like many others I am trying Google Analytics.  I first heard of the JavaScript tracking technique with LiveStats 7.  One feature that kept me from liking the technique they use for tracking is that it is difficult to track file downloads.  I work with a lot of content management systems that would require quite a bit of modification to add the required scripts to file download links.  However, the information you can get from this tracking technique is otherwise far superior to anything you can ever get from  traditional log analysis.  Ideally I would like to dynamically add the tracking code to all download links in my content.  The 2 ideas floating in my head at the moment are:

#1  Add an ISAPI filter in IIS that would parse all output and add the tracking code to any download links that match RegEx patterns.  Perhaps all PDF download links for example.

#2  If possible, use JavaScript injected in the content pages to dynamically add events like onClick to elements like the anchor tag.  I already have to inject the tracker scripts so it would be great if I could inject a page parser script as well. 

Anyone have other ideas or thoughts on the possibility of these options?  I don't do ISAPI so #1 is out for me unless I can hire it out.

12/1/2005 11:47:57 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, November 22, 2005
I love my Zen Micro.  Tiger Direct has one now for $129.99 after rebate.  Get one of these and then sign up for Yahoo Music Unlimited for a year while the price is still only $59.88.  You won't be disappointed!
11/22/2005 8:13:31 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, October 25, 2005
I just got an Email about the new certification tracks.  For those of you who are MCSD you will have 2 new exams to get the premiere developer cert.  It looks like I would have to change jobs to get the Architecture cert.  Oh well, we will leave that one for Hanselman and Vasters.
10/25/2005 8:24:27 PM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Thursday, September 15, 2005
Today I discovered that Google finally launched a blog specific search engine.  Exactly 2 years ago I was at the PDC in Los Angeles with my buddy Richard Hundhausen at a small Google sponsored party.  Richard told them they needed a blog specific search engine.  It took them far too long, but I give credit to the idea to Richard!
9/15/2005 8:36:07 AM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, August 16, 2005

The August 1st, 2005 edition of InfoWorld has an interesting article about a new technology that looks like it will kill NAS (Network attached storage) as we know it today.  Currently NAS devices have drive controllers embedded in them and function like mini file servers on the network.  Zetera has created a solution that lets you put drives on the network that act like a SAN (Storage Attached Network).  The IP network becomes the pipeline directly to the disk.  This provides 2 awesome features.

#1 No controller needed in the drive enclosure significantly reducing cost and improving performance.
#2 The drives are seen to the local PC just like any physically attached hard disk, but without special, expensive hardware.

Additionally these drives can be mirrored and support other RAID configurations.

Netgear has a box coming any day that will host 2 IDE drives on the network using this technology.  It is slated at $129 retail and I can't wait to get one.  I look forward to seeing how it performs with applications an other things like that loaded onto it.  It may be the ideal data drive in the sky.  It would be interesting is the drive could be mounted before the OS loads, but I don't see how that would possible without a special NIC that could tell your BIOS it was a drive controller.  They are probably working on that if they don't have it already.

 

8/16/2005 8:35:45 AM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Thursday, August 04, 2005

This morning I noticed that our local independent ad paper (more ads than news) the Boise Weekly has an article on Google.  The nugget of relevance I got from the article was that there is a way to search books with Google.  After a little Googling to find the search I landed on print.google.com.  There are many books not yet indexed, but also many that are.  Next time you are looking for something you read in a book give it a try.  It is certainly faster than flipping through the pages manually.

8/4/2005 7:32:08 AM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Monday, July 25, 2005

I was unable to make the first Code Camp for Portland.  My supervisor however decided at the last minute that it was worth checking out.  He reports that it was great.  When I asked him if it was as good as a commercial conference he said that he thought so.  Perhaps even better.  And that comes from a guy who was just at TechEd 6 weeks ago.

Congratulations to Jason Mauer, the Portland area .NET user groups, speakers and everyone who put in the effort to make it happen!

7/25/2005 7:43:27 PM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Saturday, July 02, 2005
The Portland .NET community is hosting their first Code Camp!  Anyone from Boise thinking about going?  It looks like it will be a fantastic weekend over there.
7/2/2005 5:30:52 PM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  |  Trackback

A friend of mine, Max Karpov, is partnering with Microsoft to host a Portals code camp.  The material looks fantastic and I know the speaker is excellent!  I met him at VS Live! back in February and have considered him a friend ever since.  If you can make it to Charlotte, North Carolina on August 20th then you will not want to miss the event.

FREE Portal Development mini-Code Camp covering SharePoint, DotNetNuke and Portal Framework ASP.NET 2.0

Overview of the event

Theme: Web Portal Application development with Microsoft technologies.  Sponsorship by Microsoft and my company, Faith Interactive.

Web Portals are not new to the scene, but enterprise adoptions to our technologies on a larger scale are just now beginning to take place. Microsoft has a number of products and technologies on the market to empower users to build web portals. SharePoint (SharePoint Portal Server and Windows SharePoint Services) technologies are one of these products. The SharePoint community has grown and embraced the open-source nature of developing these products. One product that will be demonstrated was developed by Jan Tielen. His product is called SmartPart Web Part. Microsoft doesn’t provide official support but thousands of developers have embraced the development of SharePoint portals through the use of it.

In areas where SharePoint products fall short, for example ease of UI customization through skins and custom login mechanize, open-source DotNetNuke portal is a great solution. I will be sharing from my production experience (1) why I choose this product for large portal implementation in big corporations and (2) the lessons learned from my experiences. 

Technology will never become stagnant and we can predict that the next version of ASP.NET 2.0 is just around the corner. It will include Portal Framework out-of-the box. The ability to code today in such a way that allows a smooth migration path is very important, so we will be examining the newer features of Web Parts framework and the best choices of technologies available today in order to escape the headache of a complete rewrite of portals.

Yes, the cost of the event is completely free and the quality can be likened to that of TechEd or VSLive.

Agenda Details (Subject to Change)

Imagine a day jam-packed with fun that has the potential to fill you to the brim with web application portal technologies. We will be starting at 9:00 am and wrapping up by 7:00pm. Below are the titles of each track and a detailed explanation of what each will cover.

Portal Design Patterns

This initial session will set the tone for the rest of the day. I will uncover common design patterns using and building web portal applications. We will look at the problem from the perspective of a generic viewpoint in which we will isolate ourselves from the nitty-gritty implementation specifics of coding. Don’t fret.  There will be more than enough code in the sessions following. You will leave not only with source-code good enough for production applications but also with the Design Pattern knowledge that transcends throughout technologies today.  This session will also prove why technologies capable of managing information, such as SharePoint, will continue to be around for many years to come. It will lay the foundation for the rest of our sessions.

SharePoint (Web Parts, SmartPart, Document Libraries)

SharePoint Technologies consist of many parts and implement solutions for a wide variety of problems.  How can we grasp such diverse technologies? This question will be answered as we walk through some of the topics listed below:

  • Code Access Security Configuration
  • SmartPart Web Part and User Controls
  • SharePoint Recycle Bin for document libraries
  • WPPackager to deploy Web Parts
  • Migration strategies between Development/Staging/Production
  • Tips and Tricks for Web Part Development/Deployment

At the end of the day you will not only be able to develop/deploy custom Web Part but you will also become familiarized with the use of SmartPart development framework. All of our tips and tricks for customizing SharePoint are from on-the-scene production implementations.

ASP.NET 1.x DotNetNuke Portal (Modules)

Today, if you’re faced with the decision to implement web portal and you cringe at the idea or are unfamiliar with the process of how to implement SharePoint technologies you can use Open-Source product DotNetNuke Portal. (For more information, read DotNetNuke book).  I will dismiss the myth that Visual Basic.NET code of DotNetNuke , isn’t too dangerous and can in fact be used by C#  and even COBOL developers.

I will even go so far as to make a strong point to not modify the core portal code but rather use it as SharePoint and customize the UI and modules. The issues we will uncover are listed below:

  • DotNetNuke Architecture in plain English
  • How to extending DotNetNuke core engine at your own risk.
  • Build and Deploying core DotNetNuke portal engine without a source-code
  • Power of DotNetNuke Skin engine revealed User Interface Customization.
  • DotNetNuke Modules to customize functionality of the portal

ASP.NET 2.0 Portal Frameworks (Web Parts)

What will the technologies of tomorrow bring?  How can we be prepared? The main purpose of this session is to prepare you to write code that can easily be modified to work under the newer ASP.NET 2.0.

  • Master Page and Web Part Page Framework
  • Cons and Pros for Web Part Development
  • Web Part Properties for Customization and Personalization
  • Web Part Communication
  • Providers explained

We hope this wets your appetite.  See you there!

Remember to fill in your evaluation forms at the end of the day for our drawing!!

7/2/2005 4:49:15 PM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Friday, May 20, 2005

I stumbled on Rick Laplante's blog entry today where he gives some details on how Microsoft is responding to customer feedback about Team System.  He links to a couple of important charts that will help us all make decisions about which versions to buy.  The other exciting piece of news is that each of the Team System role sku's will include a 5 developer license of Team Foundation Server.  That should help the small shops find it easy to get started with.

Compare Visual Studio 2005 Team System Software Editions

MSDN Subscriptions for Visual Studio 2005

5/20/2005 12:11:40 PM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, May 17, 2005

This information simply must be propagated on the net.  I have been going back on forth with Creative support via Email and they have suggested the standard stuff, all of which I tried.  After I upgraded my Zen Micro to support subscription media via their latest firmware I ran into a serious problem.  My laptop would no longer recognize the device.  It showed up in device manager, but no software would acknowledge it.  I am so glad to have this solved.  I really did not want to play for format c: game on my machine to get this working.

So here is the fix that I finally discovered at: http://hardware.mcse.ms/message94329.html

1. Log in as an administrator (if you are not already logged in that way).

2. Go to Start, Run and type "regedit" (without the quotes).

3. When the registry editor starts, navigate to the following location in
the registry:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum

4. Right-click the Enum hive and select Permissions.

5. In the permissions dialog, add the Everyone group.

6. Give the Everyone group Read access.

Close the registry editor and connect the Personal Media Center device.

5/17/2005 9:45:12 PM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Monday, May 16, 2005

Last Friday I decided to see how well the 30 day return policy at Best Buy would work.  I returned my Samsung MP3 player and they gladly exchanged it for whatever I wanted.  As previously mentioned I decided to go for the Creative Zen Micro since it supports subscription DRM services.  BestBuy.com has the player $10 cheaper than the store and they had no problem taking the extra $10 off during the trade in.  Best Buy gets a +1 for this!

Of course I could not wait to rip into my new device and give it a spin.  All was well until I did the latest flash upgrade.  This was required for it to support subscription music.  After the upgrade my laptop refused to see the device.  I assumed it was defective and returned it to Best Buy and got it replaced, again with no problems.  You can imagine how bummed I was when the 2nd Zen had the same problem as the first.  After searching the net for others with the same problem I found that I was not alone.  Since Creative Tech support is closed on weekends I decided to wait until today to call them.  I brought the device to the office to see if my work PC liked it.  Guess what, no problems.  Now I have an interesting dilemma.  My cool MP3 player will not work with my home PC.  Next thing is to rebuild the home PC and see if that takes care of the problem.  Forget calling Tech Support, at least for now.

Microsoft, Creative and other players in the subscription audio world are going to have to make this stuff work flawlessly or they may find MP3 players thrown through the Windows.  I don't mind being on the bleeding edge of technology, but when my very recent hardware and completely up to date software do not work together I am not a happy boy!

5/16/2005 9:04:29 AM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Wednesday, May 11, 2005

I have been having a discussion with one of our developers about SSL.  He is updating some code and wanted to make sure that anyone who used the application would be doing so via SSL.  I believe the discussion will be valuable to many so I wanted to share some tips.

 

There are a couple of simple ways to guarantee that users are using SSL.

 

#1 In IIS you can set the application to require SSL so anyone trying to access it over HTTP will get an error.  I do not like this option for 2 reasons.  It requires extra IIS configuration to implement and I like to avoid throwing errors if possible.

#2 Applications can check for the use of SSL and force a redirect if it is not being used.  This is my preferred and recommended approach for all applications that involve sensitive data. 

 

Here is some simple VB.NET ASP.NET code that does the trick for option #2.

 

‘ Force users of this application to come in using SSL

If Not Request.IsSecureConnection Then Response.Redirect(Request.Url.ToString.Replace("http:", "https:"))

 

The biggest question this creates is how to handle the development and testing environments where SSL certificates may not be installed.  I have good news for you there.  Microsoft has a couple of tools for creating self-signed certificates that are prefect for development environments.  You can easily install a test certificate on your own development machines.

 

The IIS 6.0 Resource Kit includes a tool called SelfSSL that you can use to make certificates.  I prefer to use MakeCert.  I use it enough that I put together a simple Create_Cert.BAT file to make it even easier to use.  The file takes in the machine name as a parameter (%1%).  You can find documentation on the various options in MSDN.

 

makecert -r -pe -n "CN=%1%" -b 01/01/2000 -e 01/01/2036 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -nscp

  • Copy the MakeCert.exe tool and create the Create_Cert.bat file on your machine.
  • Open a Command Prompt window and change to the directory where you put the makecert.exe and the create_cert.bat files.
  • Execute the create_cert.bat using the machine name of your PC as a parameter.  Typically we use LOCALHOST on our local machines. (ex. C:\tools\create_cert.bat localhost)
  • In IIS you can now set the Default Web Site to use your test SSL certificate. 
    My Computer -> (right-click) Manage -> Services and Applications -> Internet Information Server -> (right-click)Default Web Site -> Properties -> Directory Security -> Server Certificate – Assign Existing.

I hope you agree with me that it is easy to develop and securely interact with customers over with SSL.  If you are looking for affordable SSL certificates for production servers you can now get them for as little as $29.95 at www.GoDaddy.com.

 

 

 

5/11/2005 9:11:08 AM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, April 12, 2005

I just got notice that the Boise Idaho chapter of ISSA will be holding the 3rd Annual Information Security Conference May 4th and 5th.  There is no cost and the quality of the speakers is top notch.  Where else can you hear this lineup and get a free lunch to boot!  I have attended this conference in the past and I believe it is well worth the time.

Howard Schmidt,
Vice President and CISO, eBay

Enterprise Security Incident Management - Can we run any faster?
The volume, severity and frequency of IT security incidents has increased dramatically in the past few years resulting in increasing risk to enterprises. Traditional incident response programs are failing to keep up. Effective proactive and reactive programs must be established to manage these threats. This session will outline steps taken by one organization to develop a comprehensive incident management program and bring order where there was chaos.

Peter Coffee,
Technology Editor, eWeek

State of Technology
Peter Coffee, Technology Editor of the national enterprise newsweekly, eWEEK, has twenty years' experience in evaluating leading-edge information technologies and practices. In addition to writing product reviews, technical analyses and his weekly Port Scans column on IT issues and practices, Peter has appeared on CBS, NBC, CNN, Fox, and PBS TV newscasts addressing system and network security, the Microsoft antitrust case, and other eBusiness issues. He chaired the four-day Web Security Summit conference in Boston during the summer of 2000, and has been a keynote speaker or moderator at technical conferences throughout the U.S. and in England.

Sherry Ryan,
CISO, HP

Getting Governance Right - Aligning IT Security with the Business
Hewlett-Packard has developed organizational linkages and established a number of practices designed to engage HP's business units with IT Security governance and implementation. This session outlines the key elements of these practices and covers the challenges associated a broad approach to integrate security into business processes.

Dave Cullinane,
CISO, Washington Mutual

Secure Application Development - Where do you start?
Security assurance in software development environments requires building security in from the start. This session will describe the approach taken by one company to embed security throughout the lifecycle including lessons learned and cover tools and techniques for enabling and empowering developers.

John Wylder,
Strategic Security Advisor, Microsoft

TBA
TBA

Ira Winkler,
CISSP, CISM is President of the Internet Security Advisors Group

TBA
TBA

4/12/2005 12:21:56 PM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [4]  |  Trackback
 Friday, March 04, 2005

2nd Chance at MS Certifications
Get a free second shot at any Microsoft Certification exam:

Register for this offer by May 31, 2005, before taking any Microsoft Certification exam.

If you don’t pass on your first try, you can take it again for free. 

Click HERE to visit the website.

Offer expires May 31, 2005. See registration site for full details.

3/4/2005 7:55:57 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Wednesday, February 09, 2005

Permission Manager has been updated for Beta 2 of VS 2005.  The more exciting part is the addition of Authorization Manager.  This is similar to the AzMan from Microsoft in purpose.  The best part about Fredrik's version however is that it is true .NET and does not require any install (think standard .NET XCopy) or COM+ registration like AzMan.  For more info head on over to the run down on Fredrik's blog.

2/9/2005 10:32:38 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback

You will not want to miss the February 17th NETDUG meeting if you are anywhere near Boise.  We have the privilege of having ineta speaker and MSDN Regional Director of the year Scott Hanselman.  He will be speaking on the Zen of Web Services.

2/9/2005 1:05:29 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [2]  |  Trackback
 Tuesday, February 08, 2005

I had the privilege of meeting Jimmy Nilsson today in the speaker lounge.  He did a talk on Domain Driven Design today at VS Live.  It was good introduction to the concept.  I had hoped it would go deeper, but in 1 hour it is hard to cover much.  After my exploration into Business Objects earlier this week with Rocky I was curious about Jimmy's recommendations for persistence with the private fields problem I mentioned before.  In short the answer was that nHibernate uses reflection to address the problem.  He acknowledged the performance costs.  

I guess it just brings out the reality that as solution architects we have to balance performance and maintainability and choose wisely.  I know that most of the things I work on can afford the impact of reflection and it will not be problem.  Today I am back with thinking that the best approach for Domain Design will include a service layer that handles the interaction with the persistence layer.  So, when I use the CSLA framework I will move the Data Portal code to separate classes and find a way to integrate my favorite best practices for persistence and object creation.

2/8/2005 6:07:30 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Monday, February 07, 2005

I made an exciting discovery today in the vendor hall at VS Live.  SoftWIRE is here and I stopped by to talk to them about their tool.  I ran across it a couple years back when I was looking for tools to help teach my kids programming concepts.  They have a library of controls for programming Lego Mindstorm robots among many other things.  Now that the toolkit is free you can all afford to pick up a Mindstorms kit right!  I asked about some books to help me get started teaching the kids and what do you know they now have some teacher and student guides included with the SoftWIRE software.  I am looking forward to giving this one another look and getting my kids and others interested in programming.  I think I will stop back by their booth and pick up a few extra CD's for the user group.

Thanks SoftWIRE!

2/7/2005 3:43:40 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Thursday, January 20, 2005

A coworker and I were talking about wireless internet providers  in our area yesterday.  The number of providers continues to grow so I thought I would make a list for anyone interested.

Fixed antenna ISP's
Heritage Wireless Internet (roaming available?)
Big Sky Telecom

Hot Spot providers
Imperial Wireless (Jackson's stores, many more)
MetroCloud Networks (mostly downtown)

NomadISP (some RV parks)
Airpath (Various)
Wayport (McDonalds)
T-Mobile (Borders, Kinko's)
SBC FreedomLink (B&N, UPS Stores, Wayport sites)

Let me know which ones I might be missing.

1/20/2005 7:40:54 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Friday, November 26, 2004

In my previous Microsoft.ScalableHosting post I described with some excitement the .NET 1.x Membership API found hidden inside of DotNetNuke 3.0.  My excitement is mostly about using the API outside of DNN.  There is also excitement about the possibility of DNN supporting alternate authentication stores through the provider model and the improved API.  Windows authentication is something missing from previous DNN that may work well now.  I have not yet tried it.

 

2 days ago a document describing Membership usage inside of DNN was posted.  The reading of that document prompted several thoughts which I will share here.

 

Why use Microsoft’s Membership API? 

One of the important things the API does for us is standardize how authentication is handled in ASP.NET.  With everyone cooking up their own solutions we constantly are learning a different authentication methodology and system with every application.  With standardization of the API we can now use front end tools like the Login controls in ASP.NET 2.0.  As long as developers stick with the base API’s, controls can be written against them and have high levels