Tuesday, March 13, 2007
Saturday, February 17, 2007
NOVA / DC Area Code Camp
Wow, is this really my first blog post this year? The year has started off busy busy busy.
But enough about me... this is about you! YOU need to come to the NOVA Code Camp on 14 April! YOU need to volunteer to speak if you have some knowledge you are willing to share with your fellow developers.
I hope to see you there.
Details: http://novacodecamp.org/
Monday, October 16, 2006
.NET 3.0 Adoption and the current relative importance of its pieces
We (at IDesign (http://www.idesign.net)) are currently in the middle of a .NET 3.0 Roadshow (http://www.net3roadshow.com) across six cities in the U.S.
In the show, we cover a full day + 1 session of WCF, 2 sessions of WF, 1 session of CardSpace, and 1 session of WPF. I am doing the WF and WPF sessions.
A common question that is coming up is why this weighted mix instead of a more even spread of coverage?
It has nothing to do with the complexity of the topics. WF is equally as complex and capable for what it is designed to address as WCF is for its purposes. WPF is also very complex and capable. CardSpace has a much narrower focus than the others, but has a fair amount of complexity surrounding it as well.
The mix we came up with has a number of reasons behind it, but one of the most important factors was considering how many development organizations should be considering adoption of each technology at this point in time.
WCF is a remote communications platform that is rock solid, easy to use for simple scenarios, yet has a million knobs and dials that you can twiddle to address almost any remote communications needs. My perspective on WCF is that if you are writing any application from this day forward (even though WCF won't release until next month) that needs to make remote calls, you should be using WCF and forget that .NET Remoting, ASP.NET Web Services, and Enterprise Services exist. Obviously that has to be tempered with your ability to get .NET 3.0 deployed to the target platforms. But unless there is an unmovable roadblock to you doing that, it is worth your while to make the switch to WCF as soon as possible. Every application of any significant scale has at least a cross process hop to deal with somewhere in its architecture, and WCF works great for addressing those simple scenarios as well as full enterprise scale SOA apps. So I feel WCF should be adopted by most development organizations as soon as possible.
WF is an extremely capable platform for developing workflow driven processing in your enterprise applications. It is very stable and ready for adoption by those who need it. The only downside to WF is that because of some the capabilities that are built in to WF to address enterprise requirements (persistence, tracking, and scheduling to name a few), I don't think you can really say that simple scenarios are easy to implement with WF. So it takes fairly complex enterprise application requirements to justify the adoption of WF in your application. Additionally, not every application out there really has workflows of any significance (there are a lot of pure CRUD apps still out there). As a result, I think the number of development organizations that should be adopting WF at this time is smaller by at least 1/2 than those who should be looking at WCF.
WPF is a harder one to nail down, and my opinions are likely to incite some flames. I think that there are a lot fewer development organizations that should be bothering with WPF for the near future. The reason mainly has to do with productivity. Even though the runtime bits for WPF will be part of the .NET 3.0 release, the development tools for designing WPF UIs will not. Microsoft is hard at work on a WPF designer for Visual Studio that will hopefully release sometime next year. Alongside that effort is the Expression Suite that includes the Interactive Designer product for allowing designers to put together WPF UIs that they can hand over to developers to complete the hook up of the dynamic behaviors of the application from code. At this point in time and for at least the next 6 months, those products will only be available in a Beta form.
Even with the Visual Studio WPF designer, there is an awful lot missing at this point when compared to the Windows Forms or ASP.NET designers for rapidly designing and implementing UI applications. Even once they release next year, I suspect they will still feel like a v 1.0 designer. Think about how the Windows Forms designer in VS 2002 compares with the VS 2005 designer. Night and day in terms of productivity and producing good maintainable code. Hopefully the gap will not be that large. At the current time, if you want to write WPF apps, you will mostly be banging out XAML markup by hand (thankfully at least with some great intellisense assistance). The current CTP of the Visual Studio Orcas WPF designer does at least work pretty well for visualizing the result of your markup, but it is not really useful for doing a graphical drag/drop layout of your form nor for getting things like data bindings, styles, and resources hooked up.
You also have to consider how bad do you need/want what WPF offers. One of the biggest draws of WPF is that it allows you to write UI applications that are more visually compelling. In short, you could say WPF allows you to create eye-candy that you either couldn't do before or that was orders of magnitude harder to do. What you have to ask yourself is how bad you really need eye candy? If you are building consumer applications, then definitely eye candy is important. The difference between someone buying/using your app instead of your competitors is often a simple matter of whether they look at it, get a glazed look in their eye, and say "Keewwlll....." But if you are building internal enterprise business applications that show and manipulate data, do you really need pulsating 3D bar charts? Maybe, but it is a lot harder to sell that as a "requirement" than "I need my web server to be separated from my application server for security/scalability reasons" (i.e. I need WCF).
Don't get me wrong - I would love to incorporate many WPF features into every Windows app I build from today forward. Using things like styling and subtle opacity animations can make any application look better and more intuitive. Once you have adopted WPF, some of the other features of WPF such as the ability to use Style, Data, and Control Templates is very powerful and will be a welcome new model compared to Windows Forms. But the relative number of apps out there that really need embedded 3D modeling or video I think you can say is considerably less than the number of applications that need to do a cross process, machine, or network hop.
Compounding the problem is the fact that adopting WPF implies that you think you can get .NET 3.0 deployed to all of your client desktop machines to support your application. For an enterprise, that may be true if your organization is savvy about the benefits of adopting new technology and not overly paranoid about the risks of deploying a new version of the .NET Framework. For the open consumer market (yes, the primary ones who would drive you to want to incorporate eye-candy), that is going to be a much tougher nut to crack. For a back end server that you want to run WCF or WF on, having the control to deploy .NET 3.0 to that machine should be a lot easier to satisfy.
So as a result of the current maturity of the tools (equating directly to productivity), the relative importance of the completely new capabilities WPF provides compared to Windows Forms or ASP.NET, and the ability to guarantee that .NET 3.0 is installed on the client machine, I would say that a lot less people should be jumping on WPF for the near term. Once we have a good, near production designer for WPF apps in Visual Studio, my tune will change. Also, for those that really need some aspects of WPF now, by all means go for it. But my primary strategy for most smart client apps at this point would be to build it as a Windows Forms application to address the bulk of your requirements (and complete them in a reasonable timeframe), and then incorporate things like 3D, video, animations, etc. as needed using WPF controls embedded in the Windows application through interop (WPF controls can be hosted in a Windows Forms application and vice versa).
CardSpace's role in the mix is easier to address because it only really addresses one set of requirements: authentication and identity management. It does it well and provides a great new model for identity management that you should definitely be getting familiar with and thinking about how to incorporate it into your applications. CardSpace too faces some adoption challenges since it requires both a service or site that supports CardSpace and a client that has IE 7 or a smart client app designed to work with CardSpace. It definitely warranted coverage in the roadshow and Michele does an awesome session on it. But it definitely did not warrant more than one session compared to overall complexity and capabilities of the technology compared to WCF, WF, and WPF.
These were some of the considerations that drive the mix of sessions we are offering in the roadshow.
I'd be very interested in some comments on other perspectives on WCF, WPF, or WF adoption.
Friday, October 13, 2006
No mas inflight internet
I travel to Europe several times a year, particularly to teach classes in Sweden. One of the nice things about ending up on a European carrier like SAS or Lufthansa has been the availability of wireless inflight. I had hoped that the american carriers might catch on and start offering that too. Unfortunately it looks like there are not enough of us geeks out there who took advantage of the service, and Boeing is dropping it due to lack of interest.
I guess I just have to continue to think ahead and get everything staged to my machine that I need to get work done in flight...
Community | Travel  Friday, October 13, 2006 12:58:05 PM (GMT Daylight Time, UTC+01:00)  |
Sunday, September 3, 2006
New IDesign Member - Mark Michaelis
I'm very excited to announce that Mark Michaelis (http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=3) has joined our ranks at IDesign. I've had the pleasure of knowing and working with Mark for several years now through various system design review and early adopter program teams at Microsoft. He is a brilliant guy, has a great book (Essential C# 2.0), speaks at conferences, writes articles, and is a natural fit for what we do at IDesign. I'm sure you will be seeing more and more of his name in the community.
Welcome aboard Mark!
.NET | Community  Sunday, September 3, 2006 3:52:42 PM (GMT Daylight Time, UTC+01:00)  |
Friday, July 21, 2006
Microsoft Principles to Promote Competition
I always cringe whenever I hear about another lawsuit aimed at Microsoft for this or that perceived anti-trust violation or unfair practices. Recent examples include the EU's recent verdict on Microsoft's appeal to the 2004 ruling imposing fines on Microsoft, and Adobe's effort to force Microsoft to remove features from Office 2007 that simply add features that already exist in many other products.
As a developer, I am constantly overwhelmed with the power, capability and productivity that Microsoft puts into developers hands... all of which can be used to develop all kinds of software, including software that might compete with Microsoft's own products. The operating system's open-ness is also both a blessing and a curse. The biggest blight on the ease of use debate between Macs and PCs (highlighted by the recent cute and funny series of commercials by Mac) is really a direct result of the fact that Microsoft is so darned open with the OS - they will let any darn vendor provide software or hardware components for the OS that claim to work fine with Windows, and then when they don't, people blame the OS manufacturer, not the component vendors, yet they fail to see the fact that it is the very openness of the platform that causes the problems. In the next breath, they are cursing Microsoft for trying to squash the competition by running every other company out of business.
The sad fact is that these kinds of lawsuits just hurt the consumer. For those hundreds of millions of us out there who happen to use and like the Windows operating system, we just get less features and capabilities because opponents want to use Microsoft's prominence in the industry as evidence that it must be doing something wrong. How about they create a great product at a competitive price, and that is a hard equation for many companies to measure up to? It also hurts the shareholders and employees of Microsoft (whos numbers are not insignificant) because Microsoft's revenues are burned up in flames in legal costs.
Yesterday Brad Smith, Microsoft General Counsel, gave a talk I wish I could have attended that outlined 12 principles to promote competition. The overview of the talk, the principles, and a vibrant community discussion are going on here: http://news.com.com/Microsoft+vows+to+play+fair/2100-1014_3-6096011.html
I read over this list and it looks to me like things Microsoft has been doing for many years now. Unfortunately it is also being spun as "Microsoft is finally agreeing to play fair", implying that they haven't been doing these things all along.
Whatever the case, I think it is a good thing to have these principles outlined as a manifesto of sorts that people can measure Microsoft and other companies against to try to see if there is any basis for the frequent and invalid claims of unfair practices that get levied against Microsoft. Maybe people can quit spending expensive resources on fighting suits like the EU one and focus on providing what is best for consumers and the economy.
.NET | Community  Friday, July 21, 2006 12:21:08 AM (GMT Daylight Time, UTC+01:00)  |
Friday, July 7, 2006
Saturday, May 27, 2006
Mid-Atlantic Code Camp - Schedule Up and Volunteers Needed!
The schedule for our upcoming DC area / Mid-Atlantic Region code camp on 10 June in Reston VA is up:
http://www.madcodecamp.com/schedule/codecampmain.htm
The event is being held at the Microsoft Technology Center at:
Microsoft Technology Center 12012 Sunset Hills Rd Reston, VA 20190
You can find directions at:
http://www.microsoft.com/mscorp/info/usaoffices/midatlantic/mtc_reston.mspx
We are currently filled up on registration, but are taking waitlist people to fill in for no-shows.
If you are planning on attending and would be willing to volunteer to help out, please send me a note at brian.noyes(AT)idesign.net. (Change the (AT) to @)
We need volunteers for:
Registration - Help check people in off the registration lists.
Room monitors: All this means is you sit in on a session and make sure that if the speaker needs any help, you can help go and find someone so the speaker doesn't leave the room. You will also prompt the speaker when there is 15 minutes remaining and at completion time so that we can stay on schedule.
Food/drink - Just need a couple of folks to hang out in the food area for the morning break and at lunch to help out if anything is needed.
Saturday, May 20, 2006
Slides and Demos from SDC Netherlands
I gave four talks at the Software Developers Conference in Netherlands this week. This is a very fun and interesting conference that is put on by a large user group organization called Software Developers Network, run by Remi Caron and Joop Pecht.
This conference is one of the most enjoyable conferences I get to do anywhere in the world. It is amazing how professional and well run this conference is, especially when you consider that it is being put on by a user group organization and it is better run than many U.S. conferences put on by companies that are supposed to specialize in this kind of event. All of the user group members that run the conference are volunteers, and yet the quality and professionalism that comes out of that is outstanding.
The attendees are hard core, ask great questions, and make the event fun for the speakers as well. For those of you who attended and find your way to this post for the slides and demos - thanks!
You can grab the slides and demos here:
Build Smart Client Data Apps with Windows Forms 2.0: Slides Demos Build Custom Data Bound Objects and Collections: Slides Demos Present Rich Tabular Data with the DataGridView Control: Slides Demos Drive Application Behavior with Application and User Settings: Slides Demos
Saturday, May 13, 2006
DevTeach Slides and Demos
I spoke at DevTeach in Montreal Tue-Thu of this week and had a great time as always. If you haven't checked out this conference, you should plan on signing up next year. Great location, great speakers, very well done conference with lots of hard core sessions.
If you attended one of my sessions and want to get the slides and demos, here you go:
NET371 - Drive App Behavior with Application and User Settings: Slides Demos
NET391 - Custom Bound Objects and Collections: Slides Demos
NET463 - Advanced ClickOnce: Slides Demos
MusicLibrary Database Creation Script: Script
DC Code Camp - June 10 - Seats still available!
Make sure you sign up and come to the DC Code Camp in Reston VA on 10 June. You can find all the details at http://www.madcodecamp.com. We have a great line up of speakers with 4 concurrent tracks to pick from. Details will be out soon on the session schedules.
It's free!! You can't beat that price!
Community | Speaking  Saturday, May 13, 2006 5:58:17 PM (GMT Daylight Time, UTC+01:00)  |
Tuesday, April 25, 2006
Mid-Atlantic Code Camp time again! - 10 June
We will be running a Code Camp at the Microsoft Reston training center on 10 June all day. This is a great FREE event with great speakers teaching you hard core topics on .NET coding. We are looking for speakers, so if you are interested in sharing your knowledge with the local community, you can find the call for speakers here as well as registration information if you just want to attend and soak up knowledge.
Come on out and participate in the DC area developer community!
Tuesday, April 11, 2006
Monday, March 13, 2006
Friday, February 24, 2006
Slides and Demos from Connecting Smart Clients with WCF talk last night - Feb CTP lessons learned
I gave a talk on Connecting Smart Clients at the Microsoft Integration and Connected Systems User Group (MICSUG) last night. I discussed and demoed the basics of using Windows Communication Foundation (WCF) to connect applications, using the newly released Feb CTP.
You can get the slides and demos here: Slides Demos
In jumping through the hoops yesterday to get my demos running on the Feb CTP, there were a number of changes that I had to get used to compared to previous builds.
The biggest is that if you run svcutil against a service that uses wsHttpBinding to generate a proxy, you get a proxy service contract that uses custom message contracts to wrap the parameters and return values from each operation contract. XXXRequest and XXXResponse classes are defined in the proxy file for each operation, along with an XXXBody class that actually contains the raw parameter/DataContract types.
If you program against the service contract interface like so:
IAccountsManager mgrProxy = new AccountsManagerProxy();
You will have to create the XXXRequest message contract types to wrap all the parameters you pass into the methods, and unwrap any return values from the XXXResponse types. However, they also expose a public method on the proxy class directly that encapsulates these details so that you can deal directly with the underlying parameters and return values.
So instead of calling IAccountsManager.GetAllAccounts for example, you will have an easier time calling AccountsManagerProxy.GetAllAccounts.
This is true for wsHttpBinding because of the message level security involved in the default binding. If you use basicHttpBinding, or turn down the security on the wsHttpBinding, then you will get more straightforward service contract interface definitions on the client side proxy.
The resulting proxy and service contract look like the following:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute()]
public interface IAccountsManager
{
// CODEGEN: Generating message contract since message part accountNo requires protection.
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountsManager/CreateAccount", ReplyAction="http://tempuri.org/IAccountsManager/CreateAccountResponse")]
CreateAccountResponse CreateAccount(CreateAccountRequest request);
// CODEGEN: Generating message contract since message part GetAllAccountsResult requires protection.
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountsManager/GetAllAccounts", ReplyAction="http://tempuri.org/IAccountsManager/GetAllAccountsResponse")]
GetAllAccountsResponse GetAllAccounts(GetAllAccountsRequest request);
// CODEGEN: Generating message contract since message part fromAccountNo requires protection.
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountsManager/Transfer", ReplyAction="http://tempuri.org/IAccountsManager/TransferResponse")]
TransferResponse Transfer(TransferRequest request);
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public interface IAccountsManagerChannel : IAccountsManager, System.ServiceModel.IClientChannel
{
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public partial class AccountsManagerProxy : System.ServiceModel.ClientBase<IAccountsManager>, IAccountsManager
{
public AccountsManagerProxy()
{
}
public AccountsManagerProxy(string endpointConfigurationName) :
base(endpointConfigurationName)
{
}
public AccountsManagerProxy(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{
}
public AccountsManagerProxy(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{
}
public AccountsManagerProxy(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress)
{
}
CreateAccountResponse IAccountsManager.CreateAccount(CreateAccountRequest request)
{
return base.InnerProxy.CreateAccount(request);
}
public void CreateAccount(int accountNo, string name, decimal initialBalance)
{
CreateAccountRequest inValue = new CreateAccountRequest();
inValue.Body = new CreateAccountRequestBody();
inValue.Body.accountNo = accountNo;
inValue.Body.name = name;
inValue.Body.initialBalance = initialBalance;
CreateAccountResponse retVal = ((IAccountsManager)(this)).CreateAccount(inValue);
}
GetAllAccountsResponse IAccountsManager.GetAllAccounts(GetAllAccountsRequest request)
{
return base.InnerProxy.GetAllAccounts(request);
}
public BankingBusinessLayer.Account[] GetAllAccounts()
{
GetAllAccountsRequest inValue = new GetAllAccountsRequest();
inValue.Body = new GetAllAccountsRequestBody();
GetAllAccountsResponse retVal = ((IAccountsManager)(this)).GetAllAccounts(inValue);
return retVal.Body.GetAllAccountsResult;
}
TransferResponse IAccountsManager.Transfer(TransferRequest request)
{
return base.InnerProxy.Transfer(request);
}
public void Transfer(int fromAccountNo, int toAccountNo, decimal amount)
{
TransferRequest inValue = new TransferRequest();
inValue.Body = new TransferRequestBody();
inValue.Body.fromAccountNo = fromAccountNo;
inValue.Body.toAccountNo = toAccountNo;
inValue.Body.amount = amount;
TransferResponse retVal = ((IAccountsManager)(this)).Transfer(inValue);
}
}
.NET Rocks and DNRtv episodes up
I recorded a DNR and DNRtv last week in New London and they are already up on the site.
You can download/listen to the .NET Rocks! epsidode here: http://www.dotnetrocks.com
And the DNRtv here: http://www.dnrtv.com
In the DNR episode, we talk about data binding, ClickOnce and a few other related topics.
This DNRtv shows how to do some of the data binding stuff in the designer. Keep your eyes out for another episode in a week or so on ClickOnce deployment.
Wednesday, February 22, 2006
Monday, February 20, 2006
IDesign Newsletter
We have decided to start putting out a periodic newsletter at IDesign with information on the content that we are producing in the form of articles, books, blog posts, and public presentations. There will also be information in there for various events that we are involved in, such as conferences and classes.
If you would like to tap into another great informational resource that just shows up now and then, please subscribe to the IDesign newletter.
.NET | Community  Monday, February 20, 2006 7:44:40 PM (GMT Standard Time, UTC+00:00)  | .NET Rocks! and .NET Rocks! TV Episodes coming up
I went up to New London this week and taped two episodes of DNRtv and one DNR with Carl and Richard. The DNRtv episodes should go up in the next two weeks, one on data binding and one on ClickOnce deployment. The DNR will air on 22 March. Check them out!
Data Binding with Windows Forms 2.0 Slides/Demos from NYC.NET
I gave a talk on data binding in NYC this Thu night. Had a great time. Lively crowd as always, lots of good questions and interaction.
Here are the slides and demos:
Slides Demos
Wednesday, February 8, 2006
Selected as Microsoft Regional Director
Wow. What can I say. Wow. I'm not worthy!
I've been selected for the Microsoft Regional Director program (http://msdn.microsoft.com/isv/rd/) to represent the state of Virginia. Very cool opportunity. More chances for early exposure to new technologies coming out of Microsoft and the opportunity to influence what they become, more opportunities to help the community learn and adopt those technologies, and one of the biggest benefits is being able to collaborate with the other 150 or so RDs, which is quite a brain trust (myself excluded).
I thought being an MVP was a great opportunity, but this makes that pale in comparison!
.NET | Community  Wednesday, February 8, 2006 12:27:28 PM (GMT Standard Time, UTC+00:00)  |
Wednesday, January 18, 2006
Data Binding with Windows Forms 2.0 Talk in Sarasota last night
I gave a talk on data binding at the Sarasota FL .NEt Users Group last night. Had a great time, and it was especially fun to present this topic this time since it was the first time presenting on data binding since my book came out. Gave away a couple copies. It was also great to go have some beers with the group members afterwards, including fellow MVPs Stan Schultes and David Hayden.
You can grab the slides and demos here: Slides Demos
Thursday, January 12, 2006
VS 2005 DC Launch Event
I co-presented the Smart Client session at the DC Launch event yesterday at the Washington Convention Center with Marc Schweigert, a Microsoft Developer Evangelist for the Federal Sector. We covered a lot of good material on Windows Forms 2.0 capabilities including data binding and ClickOnce, two topics close to my heart since I have written/am writing books on them. I also spent most of the day in the Ask the Experts booth along with other local DC area experts like Sahil Malik, Randy Hayes, G. Andrew Duthie, Darrell Norton, Jonathan Cogley and Vishwas Lele. Besides being a great opportunity to catch up with all these guys and exchange ideas, it was a great day talking to developers from the area and seeing how much enthusiasm there is around the availability of VS 2005 and .NET 2.0. Most of the people there had spent little to no time looking at the new stuff, so there was the usual "wow!" reaction when they saw all the great features and capabilities that are now available to them.
I think we ended up with over 2000 attendees at the event, with about a thousand or so sticking around to the bitter end for our session, which was last up at 4:30-5:45.
The folks at Microsoft that put together the event (Darryl Schaffer in particular) did a great job organizing and running the event.
Thursday, January 5, 2006
Awarded MVP for another year! Visual Developer - Solution Architect
Looks like I get to hold onto the MVP title for another year. WooHoo!
Being an MVP has a lot of great benefits, but you need to contribute a lot of time to the community to earn the title. In case people are wondering the kinds of things you can do to qualify, I gave about 35 talks at major conferences in the last year, 14 user group talks, 3 webcasts, wrote a book (Data Binding with Windows Forms 2.0), published about a half dozen articles in various publications, helped run the Captial Area .NET User Group, and participated in 6 Microsoft partner events (SDRs, readiness events, etc.). This is all extra-curricular activity that does not directly earn me any significant money. On top of that I had to continue to earn a living as an architect and trainer with IDesign, which is a lot of fun in itself. Sounds exhausting, but I gotta say I feel pretty lucky to have found something that I love to do so much.
This year I have been moved to the Visual Developer - Solution Architect category instead of ASP.NET because that aligns more with where my primary focus is these days. I'm all about smart clients, but they don't have a category for that yet. I still can hold my own with ASP.NET, but just don't spend as much of my time in that space as with architecture and smart client technologies anymore.
Cool, cool, cool. I feel privileged to count myself part of a very talented community of Microsoft recognized experts!
Friday, December 9, 2005
Capital Area .NET Users Group Call for Speakers
I am the vice president of the Capital Area .NET Users Group, and help coordinate our speakers and sponsors. If you are interested in speaking at CapArea, or know someone who might be, I am trying to get our speaker line up for 2006 rolling. We need a speaker for Feb 2006, and April-Dec.
Like most user groups, we have no budget for paying speakers or covering travel expenses. This is just a chance for you to share your expertise with fellow community members and teaching them something new about .NET development.
If you are interested, please contact me at brian.noyes(AT)idesign.net.
Thanks
Community | Speaking  Friday, December 9, 2005 3:14:46 PM (GMT Standard Time, UTC+00:00)  |
Wednesday, November 30, 2005
Launching unmanaged applications with ClickOnce
The question came up from several attendees at my MSDN Webcast on ClickOnce yesterday:
"Can I launch a XXX application using ClickOnce?" (fill in XXX with VB6, MFC, etc. - non-.NET applications)
The answer is yes, you will just have to employ a little trick.
What you need is a simple little launcher application that IS a Windows .NET application. So do the following:
- Create a new Windows Application project with VS 2005.
- Delete the Form1 from the project.
- Add the unmanaged EXE and any supporting files to the VS 2005 project, which makes them part of this application from a ClickOnce perspective. As a result, they will get deployed with this application to its cache folder and can be executed by this launcher app.
- Edit the Program.cs file Main method and delete the current method body (which launches the application and the form) and replace it with code to launch the unmanaged executable. This just requires a single line of code: Process.Start("MyUnamangedApp.exe");
Note: You will need to give the launcher app full trust in the ClickOnce security settings.
Note2: If the unmanaged app relies on ActiveX or COM objects, those need to be added to the project as well, and you will need to add a reference to the COM DLL's to the project to get their reg-free COM information added to the manifest. See this article for more details.
You can download a sample implementation here.
Tuesday, November 29, 2005
Thursday, November 24, 2005
Another DC area expert blogging
My friend Clyde Barretto has started blogging. He has been giving some great talks to the local area user groups on developing custom Windows Forms controls. Hopefully we will see some good technical content there sharing his knowledge. Welcome to the blogsphere, Clyde!
Blogging | Community  Thursday, November 24, 2005 3:40:16 PM (GMT Standard Time, UTC+00:00)  | Slides and demos from Boulder .NET
I gave a talk on connecting smart clients with WCF on Tuesday at Boulder .NET. Had a good turnout desipte the proximity to the holiday and had a good time.
The talk covered the fundamentals of connecting applications with WCF since most of the people there had never seen anything on WCF. Then I moved into some of the specific client concerns when using WCF, similar to my talk at VSConnections.
You can get the slides and demos here: Slides Demos
Monday, October 24, 2005
Upcoming DevConnections Talks
I'll be speaking at Visual Studio Connections (part of DevConnections) in Las Vegas from 5-8 November. This is a great and growing conference that happens twice annually in the US, usually Orlando in the spring and Las Vegas in the fall, that I have been privileged to speak at for the last couple years. If you haven't been to one yet, you ought to be hammering your boss for permisson/funding to attend for the following reasons:
- It will rapidly and time-effectively expose you to new solution technologies you might not get a chance to explore on your own
- You will get concentrated advanced training in current and future technologies, getting you up to speed on them in far less time than you can achieve on your own
- You will get presentations from the top speakers in the business
- You will get a chance to network with peers in the industry, learn from others experiences employing .NET technologies, which will make you more effective at employing them yourself
- You will have a lot of fun (OK, maybe don't tell your boss this...)
You can learn a lot peripherally from the conference too by reading the DevConnections blog here. There are posts from other speakers as they develop their talks and their own observations and experiences at the conference.
I'll be presenting the following sessions:
VSM356: Build Custom Data Bound Business Objects and Collections VSM351: Secure Smart Client ClickOnce Deployments VID306: Build Event-Driven Applications with Indigo VID309: Connect Smart Client Applications with Indigo
If you make it to the show (and you should!!), stop by and say hi!
Two Upcoming MSDN Webcasts: Part of the "Best Of" Series
I've got two MSDN Webcasts coming up at the end of November, both part of the "Best Of" series that they are doing surrounding the launch of VS 2005 for those Webcasts focused on .NET 2.0 and VS 2005 that got the highest scores in the last year.
You can click through here to get to the webcasts:

The two I am giving will both be on 29 November:
Presenting Rich Rich Tabular Data with the DataGridView Control Tuesday, November 29, 2005 10:00 A.M.–11:00 A.M. Pacific Time
Deploy Smart Client Applications with ClickOnce Tuesday, November 29, 2005 1:00 P.M.–2:00 P.M. Pacific Time
Check them out!!
IDesign Site Facelift
Wednesday, October 12, 2005
Building Smart Client Data Applications with Windows Forms 2.0
I gave a talk at LexDotNet in Lexington KY last night on building smart client data apps. It really boils down to a similar talk to my Tackle Complex Data Binding with Windows Forms 2.0 talk, but with a slightly different approach and angle. I did mostly a large progressive demo where I started out with the simple and impressive data binding capabilties for working directly with a database in your Windows Forms app. Then I explained why you should never do that in a serious production application and stepped through how to migrate the functionality to a three or four layer/tier architect without giving up any of the capability of the data binding features in Windows Forms.
Here are the slides and demos that I used.
Thursday, September 29, 2005
Generating a good stored procedure CRUD Layer with CodeSmith
If you are not already using CodeSmith to avoid repetitive coding tasks, you should really take a look at it. One of the things I use it for frequently is to generate a clean stored procedure layer on top of my tables for doing standard CRUD (SELECT, INSERT, UPDATE, DELETE) operations on those tables.
Specifically, what you usually need for most tables in your database are: - A SELECT proc that returns all rows - A SELECT proc that takes a primary key value and returns the corresponding row - An INSERT proc that adds a row to the table - A DELETE proc that removes a row - An UPDATE proc that modifies a row
I actually prefer to just have a single SELECT proc that takes a primary key parameter that defaults to NULL. If that parameter is NULL, it returns all row, otherwise it returns just the one row requested. That saves on the number of adapters/commands you have to create to do SELECTs.
In combination with these procs, you will want to add a column to your tables if at all possble that can be used for optimistic concurrency checking. You can use a datetime column that gets updated with every modification to a row, a timestamp column, or a uniqueidentifier with the rowguid property set to get it to auto-update.
If you use this pattern or want to, I wrote a CodeSmith template that will code generate all the stored procs for you. You feed it a table name and the name of the column that is used for optimistic concurrency checking. It will then generate the appropriate stored procs to ensure everything gets updated correctly based on the optimistic checking column type. You can download it here. http://www.softinsight.com/downloads/StoredProcsForConcurrencyColumnTables.zip Also in that zip is another template that will let you generate all the procs for all the tables in your database. It will skip any tables that do not have the concurrency column name specified, or that do not have a primary key.
This pattern also happens to work beautifully with typed data sets and table adapters in VS 2005.
As an example, if you add a Modified datetime column to the Employees table in Northwind, and set its default value to the getdate() function, you now have a good column that can be used for optimistic concurrency checking, as long as you wrap it in stored procs that update the Modified column on updates. The template I wrote generates the following code with the click of a button:
/****** Object: Stored Procedure dbo.DeleteEmployees Script Date: Wednesday, September 28, 2005 ******/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DeleteEmployees]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[DeleteEmployees] GO
/****** Object: Stored Procedure dbo.GetEmployees Script Date: Wednesday, September 28, 2005 ******/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SelectEmployees]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[SelectEmployees] GO
/****** Object: Stored Procedure dbo.InsertEmployees Script Date: Wednesday, September 28, 2005 ******/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[InsertEmployees]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[InsertEmployees] GO
/****** Object: Stored Procedure dbo.UpdateEmployees Script Date: Wednesday, September 28, 2005 ******/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[UpdateEmployees]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[UpdateEmployees] GO
SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS OFF GO ------------------------------------------------------------------------------------------------------------------------ -- Date Created: Wednesday, September 28, 2005 -- Created By: Generated by CodeSmith ------------------------------------------------------------------------------------------------------------------------
CREATE PROCEDURE dbo.DeleteEmployees @EmployeeID int, @Modified datetime AS
DELETE FROM [dbo].[Employees] WHERE [EmployeeID] = @EmployeeID AND [Modified] = @Modified GO
SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GO ------------------------------------------------------------------------------------------------------------------------ -- Date Created: Wednesday, September 28, 2005 -- Created By: Generated by CodeSmith ------------------------------------------------------------------------------------------------------------------------
CREATE PROCEDURE dbo.SelectEmployees @EmployeeID int = NULL AS
IF (@EmployeeID IS NOT NULL) BEGIN SELECT [EmployeeID], [LastName], [FirstName], [Title], [TitleOfCourtesy], [BirthDate], [HireDate], [Address], [City], [Region], [PostalCode], [Country], [HomePhone], [Extension], [Photo], [Notes], [ReportsTo], [PhotoPath], [Modified] FROM [dbo].[Employees] WHERE [EmployeeID] = @EmployeeID END ELSE BEGIN SELECT [EmployeeID], [LastName], [FirstName], [Title], [TitleOfCourtesy], [BirthDate], [HireDate], [Address], [City], [Region], [PostalCode], [Country], [HomePhone], [Extension], [Photo], [Notes], [ReportsTo], [PhotoPath], [Modified] FROM [dbo].[Employees] END
GO
SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
------------------------------------------------------------------------------------------------------------------------ -- Date Created: Wednesday, September 28, 2005 -- Created By: Generated by CodeSmith ------------------------------------------------------------------------------------------------------------------------
CREATE PROCEDURE dbo.InsertEmployees @LastName nvarchar(20), @FirstName nvarchar(10), @Title nvarchar(30), @TitleOfCourtesy nvarchar(25), @BirthDate datetime, @HireDate datetime, @Address nvarchar(60), @City nvarchar(15), @Region nvarchar(15), @PostalCode nvarchar(10), @Country nvarchar(15), @HomePhone nvarchar(24), @Extension nvarchar(4), @Photo image, @Notes ntext, @ReportsTo int, @PhotoPath nvarchar(255), @Modified datetime OUTPUT, @EmployeeID int OUTPUT AS
SET @Modified=getdate() INSERT INTO [dbo].[Employees] ( [LastName], [FirstName], [Title], [TitleOfCourtesy], [BirthDate], [HireDate], [Address], [City], [Region], [PostalCode], [Country], [HomePhone], [Extension], [Photo], [Notes], [ReportsTo], [PhotoPath], [Modified] ) VALUES ( @LastName, @FirstName, @Title, @TitleOfCourtesy, @BirthDate, @HireDate, @Address, @City, @Region, @PostalCode, @Country, @HomePhone, @Extension, @Photo, @Notes, @ReportsTo, @PhotoPath, @Modified ) SET @EmployeeID = @@IDENTITY
GO
SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS OFF GO ------------------------------------------------------------------------------------------------------------------------ -- Date Created: Wednesday, September 28, 2005 -- Created By: Generated by CodeSmith ------------------------------------------------------------------------------------------------------------------------
CREATE PROCEDURE dbo.UpdateEmployees @EmployeeID int, @LastName nvarchar(20), @FirstName nvarchar(10), @Title nvarchar(30), @TitleOfCourtesy nvarchar(25), @BirthDate datetime, @HireDate datetime, @Address nvarchar(60), @City nvarchar(15), @Region nvarchar(15), @PostalCode nvarchar(10), @Country nvarchar(15), @HomePhone nvarchar(24), @Extension nvarchar(4), @Photo image, @Notes ntext, @ReportsTo int, @PhotoPath nvarchar(255), @Modified datetime OUTPUT AS DECLARE @CurrentModified DateTime SET @CurrentModified = getdate() UPDATE [dbo].[Employees] SET [LastName] = @LastName,[FirstName] = @FirstName,[Title] = @Title,[TitleOfCourtesy] = @TitleOfCourtesy,[BirthDate] = @BirthDate,[HireDate] = @HireDate,[Address] = @Address,[City] = @City,[Region] = @Region,[PostalCode] = @PostalCode,[Country] = @Country,[HomePhone] = @HomePhone,[Extension] = @Extension,[Photo] = @Photo,[Notes] = @Notes,[ReportsTo] = @ReportsTo,[PhotoPath] = @PhotoPath,[Modified] = @CurrentModified WHERE [EmployeeID] = @EmployeeID AND [Modified] = @Modified
SET @Modified = @CurrentModified GO
SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
Smart Client Deployment with ClickOnce talks in St. Louis and KC
I gave a talk on ClickOnce in both St. Louis and Kansas City Monday and Tuesday evening this week and had a really good time. After the St. Louis talk I was able to go out for a beer with Bill Evjan, Scott Spradlin, and some of the other group members, which is always a great chance to network while I am there. KC was more of a quick strike since I had to fly out first thing in the morning to head to the MVP summit in Seattle.
The code samples and slides can be downloaded here.
Friday, September 23, 2005
Major headbanging fix
Apparently Ten Thousand Fists released about a week ago. I happened upon it tonight as I was doing some coding to maximum volume Disturbed and it occurred to me they were due for a new album. Listening to it and burning from Rhapsody now.
This album F*&cking rocks. Period. First impressions: ((((The Sickness + Believe)++)++)++)++
Yes, my dirty little secret about music preferences is out. Yes, this is the same guy who blogged about Bond a while back. Look, my first album was Black Sabbath, my first concert was Kiss, Ted Nugent, and Montrose at Anaheim stadium at the tender young age of 11 in 1976. Lets just say my earliest music influences were HEAVY METAL. But I do have disparate tastes that span just about anything depending on mood other than country and opera.
But when I need to code or work out, rock is where I live.
Or, in the case of favorite bands like Distrubed, Limp Bizkit, Rage Against the Machine, Linkin Park, etc., it would be "Angry music" as my wife calls it. :)
Tuesday, August 2, 2005
Advanced .NET Master Class Oct 17-21, Reston VA
I'll take the opportunity here for some shameless self-promotion...
If you are an intermediate to advanced developer who already has some .NET experience and are looking to take it to the next level, you might want to check out our Advanced .NET Master Class, which I will be teaching in Reston, VA from 17-21 Oct. This is a public offering of a high-demand course that we normally only offer onsite for larger development teams. You can find the full class description here. This will be a well-timed, comprehensive, in-depth coverage of developing enterprise applications in .NET 2.0. I cover a huge amount of material including advanced language features in C#, assemblies and versioning, serialization, multi-threading, transactions, security, Enterprise Services, and Remoting.
If you are interested, contact us through this link to obtain more information.
Friday, July 29, 2005
Speaking and Drinking in Tampa last night
I had a great time speaking at the TampaBay .NET Users Group last night. We had a great turn out and it was a fun crowd. About 20 of us retired to a nearby bar afterwards for some suds and good conversation. Apparently they do that fairly regularly at their group. That is definitely the largest interactive mass of people I have encountered at a user group that goes out and really networks and has a good time together after the meeting on a regular basis.
Thanks for having me down guys and gals!!
The talk was on ASP.NET 2.0 Data Binding, and was a little rough since it was the first time I had given this talk. But hopefully people still got a lot out of it. I did all the demos on the fly, and as a result, a few of them didn't work out because I decided to take a few little side trips that I had not practiced, which is never a good idea on stage with new material.
If you are interested, here are the slides and outcome of the demos.
Wi Wi Wi Wi Wireless aplenty now
After my bitching about lack of wireless on travel here, I decided to shell out the bucks to make it a non-issue. I got a Verizon Wireless broadband PC card, so I now have 400-700 kbs speeds in about 25 major cities in the US, including here in the DC area, and 114 kbs just about everywhere else stateside. Sweet. I went with Verizon despite switching my cell away from Verizon to Cingular recently because Verizon's broadband access still kicks ass on speed compared to what Cingular and others have to offer.
Community | Travel  Friday, July 29, 2005 11:40:39 PM (GMT Daylight Time, UTC+01:00)  |
Wednesday, June 22, 2005
Interview with Roy Osherove
Roy and I had a great long interview/discussion on a myriad of .NET topics back a couple of months, and he has it all edited and posted now. You can find it here.
Sunday, June 5, 2005
Back in Conference Land at TechEd
I just got back from Holland Thursday after speaking at SDC there, and now I am in Orlando to speak at TechEd. These things are nothing but fun, but man, the travel can get crazy.
I had a great time last night joining in with the crowd at the Party with Palermo, which evolved from a loosely organized geek dinner into a great gathering of speakers, RDs, MVPs, and attendees in the Peabody hotel restaurant and bar. Today there are a collection of overlapping events that I plan to try to attend portions of, including some MVP events, the INETA summit, and some of the pre-con sessions.
The rest of the week is already pretty packed. My breakout session is not until Friday, but I have a bunch of other things I am participating in / presenting as well:
Tuesday 7 Jun:
3:15-6:15 PM- proctoring Juval Lowy's Instructor Led Lab (ILL) on Generics (DEV20/DEV20R)
9:00 - 10:00 PM - Preparing for Indigo Birds of a Feather (BoF) given by Juval
Wednesday 8 June:
8:30 AM-11:30 AM- proctoring Michele Leroux Bustamante's ILL on Iterators (DEV23/DEV23R)
7:00-11:00 PM Influencer Party
9:00-10:00PM Leading BoF session on Smart Client Deployment (BOF051)
Thursday 9 June:
3:15 - 6:15 PM - Giving System.Transactions ILL (DEV 22/22R)
Friday 10 June:
10:15 AM -12:00 PM - Answering Q&A questions through LiveMeeting for Juval Lowy's Simulcast session Being More Productive with the .NET Framework (DEV325)
1:00 - 2:15 PM - Presenting CLI440 Smart Client Offline Data Caching and Synchronization
Those are just the items that warrant an unchallenged block on my calendar. There are a ton of other events mixed in there as well to keep the week packed. I also need to get some more work done on my book this week getting the second half of the book up to date with Beta 2 and ready for Tech review, and also want to try to blog a few technical posts about stuff I am working on. Hmm, when is thattime expansion device going to be on the market??
Wednesday, May 18, 2005
SPOT watch - free - cool...
Yesterday I attended an all day event at the local Microsoft Office called the MVP Engagement Tour. This was put on by the team at Microsoft that manages the MVP program, and they are hitting about 20 major cities around the country and getting a chance to talk with the MVPs in that area (both developer, IT Pro, and End User app) about the program and what they are doing right or wrong. It was a great event and a good chance to find learn more about the program and how to optimize my role in the community and with Microsoft as an MVP.
Besides learning a lot and getting to network with the other MVPs in the area, they gave us a nice little gift for participating - A Suunto SPOT Watch with 3 months free MSN Direct. NICE. I had pondered getting one of these little beasts before, but couldn't quite justify another $200 gadget. Now that I have it, maybe I will actually play around with creating some app for it.
Being an MVP and having early access to bits and great channels into the Microsoft product teams is reward enough for the time I spent speaking and writing, evangelizing Microsoft products and educating the community on them. But I'm always a sucker for cool toys too. Thanks MVP Team!!!
Friday, May 13, 2005
David Chappell on Indigo
I attended a developer dinner put on by the local Microsoft office ( G. Andrew Duthie specifically) last night that was truly excellent. David Chappell was the speaker and I enjoyed his talk immensely, as I do all his talks. The talk was a basic intro to Indigo, and even though I was up to speed already on most of the content, it is always entertaining and educational to watch a masterful speaker spin his web. He did a great job explaining some of the more complex aspects of Indigo in ways that anyone could get. He has been doing a road show with this talk across the country and will be going to Atlanta next, so if you have a chance to see it there, you should.
Sunday, May 8, 2005
Slides and demos from Mid-Atlantic Code Camp
For those who attended, I hope you had a good time! Andrew did a great job putting the code camp together, and it seemed to go well all day.
Here are the slides and demos I gave:
Smart Client Offline Data Caching and Synchronization: Slides Demos
Secure Smart Client Deployment with ClickOnce: Slides Demos
Complex Data Binding in Windows Forms 2.0: Slides Demos
Friday, May 6, 2005
Woo woo - I'm a fresh graduate! M.E. in C.S. from CU
Another semi-major milestone in life complete - another graduate degree. As of today, I'm a graduate of University of Colorado Boulder with a Masters of Engineering in Computer Science. I should probably be a little more excited about this, but after 6 years of slugging through the course work in my precious-little spare time, I'm just glad to have the darn thing done.
This is my second master's degree, I already had a B.S. and M.S. in Aero Engineering (U.S. Naval Academy and Naval Postgraduate School Monterey).
So why did I bother with a second masters? Great question, but the truth is if I had it to do over again, I wouldn't bother. I decided to pursue it 6 years ago when I was transitioning out of the Navy into a full time job as a developer, and wanted to have a sheepskin to back up the knowledge that I thought I already had from self study over many years, and working on software development projects within the Navy. Within a year of starting it, I had already realized that knowledge and ability is what matters in this industry, not academics, and so I really didn't need the degree to get the kinds of jobs I wanted. And after six years of study, I found that I was pretty much right - I already knew most of the useful information that was contained in my course of study. Sure I learned a few things along the way and refined some knowledge I already had, but for the most part, it was just an awful lot of work. And I can say with convinction that if I had spent that same amount of time doing my normal course of self study, I would have acquired vastly more knowledge.
The other thing I found challenging (in a bad way) and frustrating about the degree was that it is really difficult to go from having an engineering degree and being a practicing engineer for many years to studying a science degree. Way too much time was spent covering things that may have been "academically interesting" but in reality have no practical value in industry.
Don't get me wrong, CU Boulder is a great school, and their distance learning program CAETE through which I did the degree is top notch. If you don't already have a masters and want or need one, this is a great place to look. But for me it was mostly just a large waste of time.
So that is at least one major distraction that won't be on my plate anymore! Good timing since I have a major and much more important distraction these days:

Wednesday, April 27, 2005
Fun time at Tulsa.NET UG
I gave a talk at Tulsa .NET Users Group on Monday 25 Apr on Windows Forms 2.0 Data Bining and had a great time. The group is large and growing, standing room only with over 40 folks. The group is well led by Caleb Jenkins, he is a great MC and keeps the group very dynamic and motivated.
Here are the slides and demos.
Philly Code Camp wrap up
It took me a few days to get to it, but here are the slides and demos from Sunday's talks at Philly Code Camp:
Smart Client Offline Data Caching and Synchronization: Slides Demos
Secure Smart Client Deployment with ClickOnce: Slides Demos
Sunday, April 24, 2005
3 Down, 2 to go
I'm speaking at the Philly Code Camp this weekend, and gave three talks today, and two tomorrow.
As promised to the attendees, here are the slides and demos from today for:
DataGridView Control: Slides Demos
Complex Data Binding in Windows Forms 2.0: Slides Demos
Extending ASP.NET with Custom Handlers and Modules: Slides Demos
Tuesday, April 19, 2005
Wednesday, April 13, 2005
Extending ASP.NET talk slides and demos from Texas
I had a great time speaking at the Austin .NET Users Group and Texas A&M .NET User Group last night and today, giving my talk on Extending ASP.NET with Custom Handlers and Modules
For those that attended, or others that are interested, here are the slides and demos that I gave. If you have grabbed earlier versions of these from when I have given the talk in the past, you may want to grab the demos again since I added a custom handler demo that does watermarking of images that I wrote on the plane ride to Texas monday.
Friday, March 4, 2005
Clawing my way back onto the face of the earth
The last month and a half has bascially flown by. I have had to keep myself from doing anything that was not of critical priority, because I had too many events stacked up that were of critical priority.
In the last month and a half, I have:
- Bought a house
- Moved
- Had a baby (Nathan).. Holy crap, I'm a dad! :)
- Helped my wife recover and care for our son after some complications with her that required every other day visits to the hospital for weeks
- Sold my old house (twice, but that is another story)
- Finalized a title for my upcoming book (Data Binding in Windows Forms 2.0: Programming Smart Client Data Applications with .NET 2.0).
- Completed another chapter for that book
- Completely neglected the remaining three chapters of the book for over a month (Sorry Joan!!!)
- Agreed to start another book very soon (details to follow) that I will complete within about 6 months
- Agreed to write another book soon after that to make sure I am overcommitted for all of 2005
- Wrote an article for The Server Side .NET that will be up soon on Smart Client Deployment and Update.
- Wrote an article for CoDe Magazine that will be in the April issue.
- Wrote a lengthy research paper as my “comprehensive exam“ for an M.E. degree in CS that I have been working on at University of Colorado Boulder remotely for about 5 years.
- Continued with my last class toward that degree with non-trivial weekly homeworks.
- Completed the slides for 3 talks and a full day tutorial I am giving at Visual Studio Connections in Orlando 20-24 March.
- Wrote proposals and got invited to speak at Microsoft TechEd in Orlando in June, SDC in the Netherlands in May, and DevTeach in Montreal in June.
- Wrote some other proposals for some other conferences further out in the year (fingers crossed).
- Spoke at the Charlottesville .NET Users Group (thanks Eric!!, it was great!)
- And a few other little things in there as well.
Things are starting to settle down now, I am getting a few hours of sleep a night in between feedings and diaper changes, and I am hoping to do a better job managing my calendar for the rest of the year. The one thing notably missing from the list above is anything that generates any significant income, which does not go well with the new house with a much bigger mortgage and impending child care when my wife Robin goes back to work in a couple months. Sigh.
Of course I probably still won't find time to blog about much other than pointers to all the other writing and speaking I am doing for publications and conferences... I don't know how guys like Scott and Chris and Sam and many others do it. I haven't even found time to read blogs for the last month, let alone write any meaningful ones...
Community | Speaking  Friday, March 4, 2005 11:28:32 PM (GMT Standard Time, UTC+00:00)  |
Monday, February 7, 2005
Testing ClickOnce Deployments
I had a question from a reader about testing ClickOnce deployments, and I thought I would pass my response along to anyone who is interested.
When you deploy a ClickOnce application, there are two manifests published with the application files to the deployment server: the deployment manifest (<appname>.application in Beta 1) and the application manifest (<appname>.exe.manifest in Beta 1). Bit of a confusing file extension choice if you ask me, but...
The deployment manifest includes information describing the deployment itself, including publisher information and a publish version that should be incremented each time you deploy a new set of files. The application manifest contains information that describes the application as a whole, including the collection of files that compose the application, and the permissions that the application requires.
When the application gets deployed to a client machine, a number of things are created at deployment. If the application publish settings are for it to only be available online, then the application files get cached under some obfuscated directories under the users profile \Documents and Settings\<username>\Local Settings\Apps. Additionally, an Application Trust will be created as part of the User Code Access Security policy for that version of the app. Finally, if the application puslishing properties are set so that application is available offline as well as online, then a Start menu shortcut and an Add/Remove Programs item is added.
The question had to do with had to do with problems they were encountering in repeatedly deploying an app to a client machine for testing. The deploy and launch mechanisms for ClickOnce are designed around the concept that the publish version should be incremented to indicate to a client machine that there is a new version to download. Although it might seem that you could just go delete the files from under the user's cache and redeploy to the same machine, you would also need to make sure all the other stuff mentioned above is also cleaned up.
There are two correct solutions to the problem of repeatedly deploying the same application to the same client machine for testing purposes.
1) Increment the publish version in the deployment manifest for each attempt. This can be done with the mage.exe tool found in the SDK bin folder. This will result in a new clean deployment to the machine each time.
2) Use a virtual machine (VMware is my preference, but VPC is fine too) in snapshot mode, where shutting down the virtual machine discards any changes made in the VM since you ran it. Now you can revert to the snapshot with a clean machine for each test.
If you test be manually deleting the files and artifacts from the user's machine, you are not testing the way ClickOnce was designed to be and should be used. In other words, you are not testing well.
Wednesday, January 5, 2005
Selected as MVP Again
Got the email this morning dubbing me with the MVP honorific for another year. Category is still Visual Developer - ASP/ASP.NET. Very cool. I have really enjoyed being part of the MVP program for the last year. Just the opportunity to attend the MVP summit, get a free year of MSDN Universal, and some various other swag is great. There are lots of other bennies as well.
.NET | Community  Wednesday, January 5, 2005 3:39:26 PM (GMT Standard Time, UTC+00:00)  |
Sunday, January 2, 2005
Comparing the IDesign process with Agile
Roy attended a week of our IDesign Advanced .NET Master Class last week, taught (and authored) by Juval Lowy, which includes a module on our recommended approach to software development process. Roy did a great job summarizing the key points in his article here, but seemed to have picked up a little too strong of a tone on certain points than was intended, based on my knowledge of the material (from being an instructor for the class myself) and from discussions with Juval.
Specifically, in the section of his article where he talks about the differences between our process and Agile, Roy talks about the ~30% effort dedicated to architecture and makes it sound like we are recommending a big-bang, all up front, try to think of everything to do with the product before doing any construction (aka waterfall), which is not what is intended. The ~30% effort dedicated to architecture and design is in fact done up front - but done up front for each stage of the product development, which distributes that effort fairly evenly across the product development lifecycle. It is one initial up front architecture piece, where you decide on the overall architecture of the system, what the major subsystems and components will be along with their interactions, security boundaries, transactions, identities, packaging, and so on, and then a bunch of smaller architecture and design pieces associated with the specific requirements for each component or subsystem in each stage of the development.
What we don't subscribe to is the concept that you can just sit down at a keyboard and start coding and come up with a coherent design for a large scale enterprise system as you go without some up front architecture and design work. We also believe that a majority of coders do not have the experience or big picture about the product for larger systems to be making all the design decisions themselves, thus the need for a dedicated architect who makes those architecture and design decisions throughout the development (with input from the team of course).
Another point I wanted to clarify is the use of test clients. I am not a true believer (yet) in full blown TDD, mainly because of the disconnect between our approach to actually doing some design and documentation before coding, at which point the benefit of writing tests before code becomes limited. But we definitely push that you should have tests for everything, preferably written in a way that you can automate the execution of those test, at a minimum the smoke test portion of them. Those test should be written and run by the developer, and can be used by QA for their testing as well. As such NUnit style tests are perfectly acceptable for component based testing of business logic and data access components, but some things really need a UI to test them, so for those we use simple UI test clients (typically WinForms). If you have not yet adopted NUnit testing and don't want to add that to your list of technologies to conquer, then you can write your tests how ever you like (such as all little WinForms and console test clients), but you should do so in a way that is not just total throw away.
Other than those minor points, I thought Roy's article did a great job of summarizing what I know Juval taught in the class.
Tuesday, December 28, 2004
Getting back in the saddle
OK, I know. I might as well not have a blog for all the posting I have done to it recently. Dec was a busy month, teaching 3 back to back 6 day sessions of our .NET Master Class to a customer in DC. Then I jetted off for a week vacation in beautiful St. Martin where I did absolutely nothing technical for an entire week, the first time I have completely relaxed for that long in as long as I can remember. The months prior to that, much of the same, conferences, the book, more customer demand than personal capacity, so blogging wasn't making it to the top of the priority queue.
So now I'm back and getting caught up. That includes trying to get back into at least reading blogs, which I had not been doing for a couple of months because of being swamped. Maybe I'll even write a few posts that people would care about.
Going to be a busy year with finishing up my book (Building Windows Forms Data Applications with .NET 2.0), moving to a new house, having a baby (and therefore discovering how much free time I actually used to have), probably starting another book, and continuing to work hard helping customers to learn how to properly employ .NET for application development.
I'm thinking 2005 is going to be a very fun year!
Blogging | Community  Tuesday, December 28, 2004 11:07:50 AM (GMT Standard Time, UTC+00:00)  |
Friday, November 12, 2004
Little Rock .NET Users Group Slides and Demos
I had a great time presenting at the Little Rock .NET Users Group last night on my way back to DC from VS Connections in Vegas. I was very impressed with this group. They had a good sized crowd (30-40) in a good little meeting room that was actually inside a Pizza Hut, and are led by a great group of guys. One of the most energetic groups I have seen, and when you consider the population and industry presence in Little Rock compared to the group size, you'll realize these guys are doing a great job of running a user group! There are a lot of times we don't get many more attendees at CapArea.NET, even though we meet in the heart of the tech sector of DC.
I want to thank the group for having me out to speak and pass along the slides and demos.
Wednesday, November 10, 2004
Saturday, October 23, 2004
Thursday, October 21, 2004
Friday, September 10, 2004
Enroute to Kuala Lumpur
I'm sitting in Singapore airport enjoying the airport wide wireless waiting to complete my trip to Kuala Lumpur for TechEd Malaysia. I have been traveling now for about 30 hours straight since getting to the airport in DC, with only a couple of naps on the 13 hour flight from San Fran to Hong Kong, and now have to lay over for 7 hours waiting for a 1 hour connection to Kuala Lumpur in the morning. Pretty brutal. Unfortunately the more optimal connection schedules were about $1000 more and broke the limit for airline tickets for the Microsoft TechEd budget. So I am getting some serious training in patience and endurance.
I'm really looking forward to Sunday, when I will trek into the rainforest and to a wild elephant preserve with Tim Huckaby, Richard Campbell, Kim Tripp, Adam Cogen, and Goksin Bakir. Should be a great adventure, and thanks to Tim for setting the whole thing up with his contacts in the Utan Bara Adventure Team.
Sunday, August 29, 2004
Reflector, what an awesome tool!
I just have to do a little spontanuous gushing on Reflector due to how extremely useful it is for me while working on my book (Building Windows Forms Data Applications with .NET 2.0). I've been chugging along, and it is going very well. However, I would be lost or taking significantly longer to get things figured out if it were not for Reflector.
I've been using Reflector off an on for a while now, but only recently started using it to figure out the Whidbey bits. It runs just fine against the .NET 2.0 bits, it just takes adding a config file to set the runtime to the .NET 2.0 Beta runtime so that it is happy. Basically, you just need the following in a Reflector.exe.config file in the app directory:
< configuration>
<startup>
<requiredRuntime version="v2.0.40607" />
</startup>
</ configuration>
Every time I come across one of those gaping holes in the Beta docs that they just haven't gotten to yet, it just requires firing up Reflector to dive into the implementation code to see exactly what a certain parameter means and how the method is going to use it.
Lutz Roeder: they should have a special community title for people like you who create tools of this caliber and usefulness, and then put them out there for free. Perhaps Microsoft Community Demi-God would be sufficient, perhaps not.
The fact that the tool is very polished and functional beyond just decompiling the IL is just very rich gravy on the steak. I especially love being able to get the Callee graph on something to see where a particular property is used or a method called from.
Thank you, Thank you, Thank you, Thank you.
Sunday, August 15, 2004
Clearing up the lingo: Whitehorse, Burton, Visual Studio Team System
A lot of people are throwing around the terms “Whitehorse”, “Burton”, “Visual Studio Team System”, “Class Designer” and others and incorrectly mixing and matching the combinations. Here is some information to help make things clear to those who might be a little confused by code-name mumbo jumbo.
Visual Studio Team System (Code-named Burton) is the family of products that will include new software development lifecycle management and design tools. There will be several product offerings in the family, targeting developers, testers, architects, and managers. Each of those will contain a different grouping of lifecycle tools, focused on their individual role in the lifecycle.
Visual Studio Team Architect (Code-named Whitehorse) is one of those products targeted at the Architect role, and contains the Service Oriented Architecture designers for modeling services and infrastructure. These tools are what are really referred to as “Whitehorse”. When you hear or say Whitehorse, you should be thinking SOA tools.
The Visual Studio Class Designer is a modeling tool that will be part of Visual Studio Standard and Professional versions, and all versions of Visual Studio Team System. The Class Designer is not part of Whitehorse. It is a feature of Visual Studio.
So just to put it in a few concise terms programmers should understand:
VSTS != Whitehorse
Class Designer != Whitehorse
VSTS == Burton
Now that we've cleared that up, I can get back to coding. Get it right, people!!!! :)
Saturday, August 14, 2004
Data Binding Scenarios??
I'm looking for suggestions for some tough data binding scenarios you have or would like to tackle in an application to use as sample cases for my book on WinForms data binding in .NET 2.0. If you have any nasty little scenarios that are not too contrived, let me know and maybe I can solve them and use them in my book.
Thanks!
Friday, August 13, 2004
Using Web Services as Data Sources in the Data Sources Window in Visual Studio 2005
The Data Sources Window in Visual Studio 2005 allows you to drag and drop data sources onto a form to generate all of the controls and components needed to use that data source for databinding. The Data Sources Window support binding to databases, Web Services, and custom objects.
The Web Services piece is still a little quirky in Beta 1 because they wisely chose to only let you bind to public properties on an object definition, not public fields. This will hopefully discourage the definition of public fields to expose data from a class, which is a bad idea all around. However, the current client proxy code that gets generated for a Web Service when you create a Web Reference just exposes public fields on the classes generated for objects returned from a Web Service. Thus the Data Sources Window in Beta 1 won't let you see any of the members on the object types returned from the Web Service.
The good news is that the wsdl.exe tool that ships with the .NET 2.0 SDK does in fact create public properties to wrap the members on the objects returned by a web service. So there is a fairly straightforward workaround to get Web Services working with the Data Sources window in Beta 1, detailed below.
1. Go through the Add Data Source wizard, select Web Reference as the type of Data Source, and point it at the WSDL URL for the data source. For example, you would point it at the Amazon Web Service at:
http://soap.amazon.com/schemas3/AmazonWebServices.wsdl
2. After completing the wizard, go check what the namespace is for the generated web procy file. To do this, you need to select Show All Files in Solution Explorer, and drill down to the Reference.cs file that was created under the Web References node for the Web Service. For the example above, that would be <YourApplicationNamespace>.com.amazon.soap.
3. Fire up a Visual Studio 2005 command prompt window, and run wsdl.exe with the wsdl url, an out param to generate the Reference.cs file, and the namespace param to set the namespace from step 2. Example:
wsdl.exe http://soap.amazon.com/schemas3/AmazonWebServices.wsdl /out:Reference.cs /n:MyApp.com.amazon.soap
4. Copy the generated Reference.cs file (or vb if that is your flavor) into the WebServices subfolder created under your project where the existing Reference.cs created by the Add Web Reference process lives, overwriting the existing file. You should see that the file sizes are about double. That is because the wsdl.exe has property wrappers for all the fields that the Add Web Reference one just exposed publicly.
5. Close the Data Sources window. Then close Visual Studio. Then reopen your project in Visual Studio 2005 and reopen the Data Sources window.
you should now be able to drill down into the properties of the data source objects returned from the web methods of the web service, and if you drag them onto a form, proper UI will be generated.
Tuesday, August 10, 2004
Harvesting ClickOnce Command Line Arguments
Thanks to Jamie Cool, Microsoft PM for ClickOnce, for providing the answer on a question I am often asked in talking about ClickOnce:
Question: How can I use command line parameters with a ClickOnce deployed application?
To answer that, you need several pieces of information:
1) How do you pass command line arguments to a ClickOnce application?
ClickOnce applications are launched using a URL to the deployment manifest (.application) file. So you use web querystring parameter syntax:
http://mydeploymentserver/MyApplicationFolder/MyApplication.application?param1=foo¶m2=bar
2) How do you tell ClickOnce and .NET Security to allow you to use the command line parameters?
Under the covers, you need to add a trustURLParameters=“true“ attribute to the deployment element in the .application (deployment) manifest file. In Beta 2, or at least by release, this should just be a checkbox in the poject properties Publish section. You can do this by dragging the .application file into Notepad.
You then need to open the manifest with the mage.exe tool (located in the <vstudio 8>\SDK\bin folder), and save it again, specifying a key file to re-sign the manifest. If you try to launch the app without doing this, the runtime won't do it on the client machine because it sees that the manifest has been tampered with since it was published.
Make sure to check the .application file again after signing to see if your trustURLParameters attribute is still there. If you screwed up the (case sensitive) name (as I did the first couple times), the Beta 1 mage tool will throw away any attributes it doesn't recognize when you save to re-sign the manifest.
3) How do you harvest the values passed via querystring assuming you have done 1 & 2?
string cmdLine = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0];
This will give you back the entire command line (URL with parameters), so you just need to parse that string for the ? separator between the path and the params, and then parse the remainder for the & and = separators.
Piece of cake!
ClickOnce demos from today's MSDN webcast
Monday, August 9, 2004
Digging out...
I'm not exactly what anyone would consider a frequent blogger, but it is my intent to share a few technical thoughts through this blog from time to time.
I have been dark on any real content lately other than links to demos and such because I said “Yes” about 10 times to many and have been totally buried with 8 webcasts, 4 conference talks, 4 user group talks, 6 book chapters, two product reviews, and a book technical review, all on top of full time consulting load, all in the span of July - September. So as you can guess, all that content creation and work doesn't leave a whole lot of leisure time for things like blogging. Heck, I have even stopped reading most of the blogs that I like because I flat out couldn't afford the time. Basically, my head has been about to explode for a while now, with me constantly asking myself: “why did you sign up for all this crap??“
Well, I am past most of it, at least the content creation parts of it, and plan to start blogging more to share some of the stuff I have been working on. I am spending a lot of time with the new WinForms features since that is what my book is about (due out with the release of .NET 2.0 next year), and am really digging the experience. The WinForms team has really done an awesome job with all the new stuff for building smart/rich client apps.
I've got 4 more webcasts this week that you may want to tune into if you have time:
Tuesday 10 Aug: Deploy Smart Client Applications with ClickOnce (1 PM PST)
Thursday 12 Aug: User Interface Process Application Block (1PM PST)
Friday 13 Aug: Extending ASP.NET (11 AM PST)
Friday 13 Aug: Bind Data Sources to WinForms Controls in Visual Studio 2005 (1 PM PST)
Then I am speaking at the Northampton MA .NET Architects group on 16 Aug (ASP.NET 1.1 Databinding), the NYC.NET group on 19 August (ClickOnce), and giving 4 talks at TechEd Malaysia in Kuala Lumpur 12-18 September. Then Extending ASP.NET for the DelMarva .NET Users Group in October, same for Little Rock Users group in November, and 3 talks at Visual Studio Connections in November in Las Vegas.
I love doing this stuff and teaching people how to use .NET. Too bad most of that doesn't directly earn me a cent... :)
DataGridView demos from MSDN Webcast today
Here are some simple demos I presented today in my webcast on the DataGridView control in .NET 2.0. Lots of cool new features for WinForms developers.
Kiss that obnoxious DataGrid goodbye!! There's a new grid in town, yaheer? (Yes it is still fully supported for backward compatibility!)
Monday, July 26, 2004
Sunday, July 25, 2004
My New Best Friend - Toshiba Satellite M35
It was time at last to upgrade. I love my tablet, and will continue to use it whenever mobility and flexibility is key. But too often I found myself coding on a postage stamp screen, missing the real estate of my old 15.4” behemoth laptop.
So I went out yesterday and bought a Toshiba Satellite M35-S456. 1.7 GHz Centrino (feels about twice that fast), 80 GB hd, DVD Multi-drive (RW for CD, DVD, and the upcoming dual sided DVDs), 4-5 hour battery life, lots of other nice features. Probably the most striking feature is the screen. 15.4” wide screen with a glossy, bright screen that looks like you are looking at a plasma screen. It is marvelous. I haven't had this clear and bright of a picture on a computer, let alone a laptop, in a long time. All that and only weighs just over 6 pounds. Nice trade between functionality and portability in my mind. All the P4 models sucked the battery like a vaccuum and weighed at least another couple lbs.
I have yet to try any games or DVDs on it, but since it is honed for that kind of thing with the multi-drve and the nVidia G-Force FX, I'm sure that will rock too. For now, I am just reveling in my fastest, brightest, most functional machine yet.
Community | Hardware  Sunday, July 25, 2004 10:26:24 PM (GMT Daylight Time, UTC+01:00)  |
Friday, July 9, 2004
EMAB Demos from todays MSDN Webcast
If you attended my MSDN Webcast today on the Exception Management Application Block thanks for attending! If you didn't, you suck, but can have the demos anyway. :) Just Kidding!!
Luckily I didn't pass out and my computer didn't explode from the heat since my A/C died yesterday and it is 90 degrees out and probably hotter inside right now! Off to Home Depot to buy some temporary relief until the main unit can be replaced (pronounced DOA by the service tech this morning).
Anyway, here is a link to the demo code. Let me know if you have any questions, and enjoy!
Wednesday, June 30, 2004
MSDN Product Feedback Center
Yes! It is now public so we can talk about it and use it more widespread. The MSDN Product Feedback Center was announced today at TechEd EU, and was the official launch of the center to the public. You can check it out here:
http://lab.msdn.microsoft.com/productfeedback/
Basically this will allow you to submit bug reports direct to the Microsoft Product Teams, track other bugs that have been reported, and get direct feedback on the problems you are having.
This is a great idea, I just hope it works. I don't envy the guys responsible on the product teams for managing this. I can't count the number of times I have people tell me they “found a bug” in some .NET technology, when the “bug” is really just their misunderstanding of how to use it correctly or wanting it to do something it was not designed to do. I just hope the signal to noise ratio is high enough to make it effective.
Monday, June 28, 2004
Sunday, June 27, 2004
Code Complete 2
I'm reading Code Complete 2, and loving it. The first edition was great on its own, and is still relevant. But having an updated version that includes more current language examples is even better, and the perspectives are brought up to date as well with lots of references to practices and processes like TDD, pair programming, XP, and so on. I have already found several quotable quotes that will be very useful when trying to articulate to customers why you should do this or that with respect to design and coding practices.
Even if you read the first edition, and think you know all this stuff, pick up a copy and refresh your convictions. Well worth the time and the cost is trivial compared to the value.
New tools weekend
I have had a number of tools on my “to-do” list for a while now that I wanted to check out and see if they are worthwhile. Let's just say that if I had got off my ass sooner and looked at those tools, I could have easily gotten to other things on my “to-do” list much quicker. I've seen most of these mentioned in various people's blogs, which is how they made it on my list of things to check out. But it really doesn't take hold until you try them out yourself.
First newest favorite tool : CodeRush. Yes, I heard the buzz at TechEd (thanks to a lot of evangelizing by Marc Miller and Scott Hansleman, but didn't get around to checking it out until now. What can I say. WOW. So many features and capabilities, I won't enumerate them here. Just go check it out. Makes your coding experience in VS.NET a whole different (and much more productive) thing.
Next favorite: CodeSmith. Freeware code generation tool, with lots of templates and community support. Way cool. I am so done writing tedious data access, stored procedure, and business object structure code.
Yet another: X1. I blogged about Lookout lst month, which is very cool, free, and does most of what X1 does. Basically it is a google-like search engine for stuff on your machine. X1 does an even better job, working by indexing emails, files, attachments, and contacts on your machine, and making it very fast and easy to find things that I used to spend an inordinate amount of time manually hunting for on my machine. Did I put that in a file, outlook message, or contact? Well, how about answering that in seconds instead of tens of minutes.
Another cool code gen tool: RapTier. If you just want to quickly generate a data access layer for your app, or stored procedures to wrap your tables and views, or generate database documentation, this tool will get you there quick. It too (like CodeSmith) is template driven and customizable, so if you don't like the default output, it is not real hard to customize. I haven't yet decided whether I will use this more than CodeSmith. Will have to see as I use it more on some real projects.
So a few hours invested this weekend playing with new toys is going to pay off handsomely in boosting my productivity. This is one of the things I am loving more and more about the .NET community - the constant growth of capabilities and tools to make the “out-of-the-box” benefits of .NET (which are HUGE compared to other dev platforms) get dwarfed by the benefits of the things you can use in that environment to do your job better, faster, cheaper, and funner.
Saturday, June 26, 2004
Saturday, June 19, 2004
Interesting new music discovery
Thanks to a link in Windows Media player “Now Playing” section this week, I stumbled onto a new-to-me group that I am really enjoying. The group name is Bond, and just released their third album.
My muscial tastes are all over the map and only really exclude Country and Opera. I lean towards hard rock stuff like Disturbed, Limp Bizkit, Godsmack, etc. (angry music as my wife calls it) for coding and working out, mellow stuff like Angelique Kidjo, Wasis Diop, Enigma, Deep Forest, Flamenco guitar, and so on for reading/relaxing, and enjoy a lot of stuff in between.
What I really like is finding new music with a unique sound. Bond is basically four (pretty hot) women who play classical string quartet instruments, but incorporate classical sound/riffs into pop/rock beats and tunes. They have stuff ranging from classical tunes with their strings overlaid on a pop sound, to pop/rock classics with classical sounds overlaid on their melody. I especially like Big Love Adogio from their Shine album, Explosive from their new Classified album, and Kashmir (yes, as in Zeppelin) from Shine. Of course they have a nice little rendition of the theme from Bond movies as well. All three of their albums are available on Rhapsody, which is the only way to enjoy/try/buy music for me now.
You can check out their video on WMP Now Playing music section right now for the “Explosive” track from their new album. These ladies are not at all hard on the eyes, and a good part of the video seems inspired by Victoria's Secret commercials. I think there is some sort of plot behind all the soldiers and russians running around, but I was... er... a little distracted by the... err... music, yeah that's it.
Tuesday, June 8, 2004
Friday, June 4, 2004
Arrived at DevEssentials in Kansas City
I'm giving three sessions plus a speaker panel at the DevEssentials conference here in Kansas City over the next few days. Tomorrow is a talk on the Configuration Management Application Block + the speaker panel, Sunday is my Deploying .NET Applications talk that I gave at TechEd, and Monday is a talk on COM Interop. Should be a lot of fun.
Off to the welcome reception!
VS 2005 MSDN Library problem - downloading pages never goes away
Had a problem with the MSDN Library for Visual Studio 2005 May Community Tech Preview (CTP) where it would just shown downloading... in the status bar forever for any topic selected.
After some googling, discovered that the readme on the MSDN VS2005 site is newer than the one on the DVD and addresses the issue:
If you use the external Help viewer with the Visual Studio 2005 Community Technology Preview May 2004, the Help system appears to be frozen when you try to access a topic. (You see the "Downloading..." message in the status bar, the progress bar barely moves, and the Internet Explorer icon continues to spin.)
Workarounds:
In the "C:\Program Files\Common Files\Microsoft Shared\help whidbey\dexplore.exe.config" file, change the following lines:
<supportedRuntime version="v2.0.40507" safemode="true"/> <requiredRuntime version="v2.0.40507" safemode="true"/>
to:
<supportedRuntime version="v2.0.40426" safemode="true"/> <requiredRuntime version="v2.0.40426" safemode="true"/>
- or -
Switch the Help settings in Visual Studio to use internal, rather than external Help. To do this, select Options from the Tools menu in either the Visual Studio IDE or the external Help viewer. In the Options window that appears, expand the Help entry and select the General subentry. In the Show Help Using dropdown list, select Internal Help Viewer. Click the OK button.
I recommend you check out the latest readme online if you are encountering any other problems since it looks like that will continue to be a living document:
http://msdn.microsoft.com/vs2005/currentreadme/default.aspx
Friday, May 28, 2004
Thursday, May 27, 2004
Parties galore at TechEd
Last night I had a dinner with the editors and folks from Addison-Wesley along with the other authors in the .NET Development Series. Nice place, great company, and unfortunately I had to leave before any food was ever served to go lead my BoF session on the Application Blocks.
After that, I went out to the MSDN party at the Bitter End, which was a rocking good time. I almost got pulled down to the jam sessions with Carl and Pat, but decided to go into the MSDN party to check it out. Then... after the bar closed down several hours later... it was time to call it a night. There are so many concurrent parties at TechEd you need to brush up on your task synchronization just to make sure you don't deadlock trying to attend them all... or deadlock from a beer induced brain freeze. Net result is the same.
Tonight I am off to the “Influencer” party, otherwise known as the under the influence party. Should be another great time. All the Regional Directors, MVPs, speakers, INETA leads, and other folks that are heavily involved in the community. An intimidating crowd to say the least. Makes one's brain feel puny and unworthy. But a great bunch of people who are fun to hang out with and have a good time.
Monday, May 24, 2004
Smart client track at TechEd
Just sat in on a great session by Tim Huckaby on Architecting and Building Smart Client apps in .NET. He showed a number of demos showing the differences between web apps (even rich ones with DHTML to enhance the user experience), auto-deployed smart clients with No Touch Deployment and the AppUpdater from gotdotnet, smart device apps, and Visual Studio Tools for Office apps. If you didn't make this one, check it out on the DVDs, Tim is always an awesome speaker.
Sunday evening I sat in on Juval Lowy's smart client Birds of a Feather session. Good lively discussion on the differences and justifications for moving to a smart client and what the comparative strengths and weaknesses are.
Right now in a session on handing occasionally disconnected client applications. keeping data stored and synchronized with the back end when you do connect.
We have been talking about the merits of smart clients for some time now and steering customers in that direction whenever it makes sense. It is great to see a focus on these topics emerging at TechEd.
Sites of San Diego - Stennis sets sail
As I was working out in the Hyatt this morning before heading in to the conference, I had a great view of CVN-74, USS Stennis (aircraft carrier) setting sail from North Island across the bay. Definitely brought back some memories of my Navy days. Going to sea always kind of sucked, with the only upside being that we usually flew a lot more at sea than when ashore, and it also meant that you were going out to do the job you were trained to do, which has a certain amount of satisfaction.
Just more of the interesting sites when you have a conference in a place like San Diego. :)
Tuesday, May 18, 2004
Deploying .NET Application talk at TechEd
If you are hanging out through the last day at TechEd and want to learn more about deploying .NET applications, come check out my talk DEV355 - Deploying .NET Applications. I'll be covering the basics of No Touch Deployment, and then going into detail on using Setup and Deployment projects to create MSI installers for apps of various types including WinForms apps, Web apps, Windows Services, and Enterprise Service components. I'll be showing several examples of creating custom installer classes with .NET code that you can easily plug in as custom actions in your installers to do things like create and populate databases and register and configure Enterprise Service components.
Microsoft Application Blocks BOF at TechEd
My Birds of a Feather (BOF) session for TechEd got approved. If you are interested in learning more about the Microsoft Application Blocks or share your experiences using them, come join us at 8:30 pm on Tuesday 25 May in room 14A.
ClickOnce - speaking at Bay.NET on Wed
If you are interested in learning about the future of auto-deployment of smart client applications with .NET, specifically ClickOnce (a new deployment technology in .NET 2.0), and you are in the bay area, come check out my talk this Wed night at the Bay.NET user group meeting. (www.baynetug.org).
Monday, May 17, 2004
Lookout rocks
I file every meaningful e-mail I get in a complex folder structure and have a way-to-elaborate scheme for organizing those folders and backing up and archiving them. As a result, I often find myself searching for an email I know I got a few weeks, months, or years ago, and sometimes I don't know exactly where I need to look. Now, I have always liked that Outlook will let you search an entire heirarchy of folders through the advanced search feature, but let's just say the performance of those searches left something to be desired.
I just downloaded Lookout the other day after discovering it from Robert's blog. This tool rocks. Search my entire (800MB) pst for a particular keyword - approximate 500 ms. Try the same thing through Outlook itself, well, go get a workout in, read war and peace, etc.
The cost is free for now (still in preview), but this is a tool I will gladly pay for once released, much like Newsgator. In fact, the too play perfectly together. That is how I remembered where I read about Lookout, a quick search with the tool, 480 ms, and bamm - there it was, of course it was Scoble. I am constantly reading blog entries these days on my tablet while mobile (i.e. the elipse trainer at the gym) and then later wanting to go back and find that post. The speed of Outlook searches previously made that intractable. Now, no sweat.
The impact on your machine is a little disk space. It works by building indices off your message store so that it can accomplish the speedy searches. Very smart. They liken themselves to being the google for email, but really it goes beyond that.
Very cool, you need to check it out if you use Outlook with any regularity.
Sunday, May 9, 2004
Upgrade to dasBlog 1.6 complete
Another excellent job by Clemens and crew with the release of dasBlog 1.6. In less than 10 minutes, I was able to apply the upgrade web files to a local copy of my site using xcopy to validate that it didn't break anything, then just xcopied again to my site on Orcsweb (an excellent hosting provider BTW) through FTP, and IJW.
You gotta love xcopy deployment and well designed apps.
Thank you Clemens again for providing this great blogging engine.
Friday, May 7, 2004
Whidbey toys
I got to spend a week in Redmond this week playing with some of the new stuff coming in Whidbey, using newer bits than the Community Tech Preview represents. Very cool stuff. Feels like being set free in a toy store's developmental lab to play. Tom Hanks on geek toys.
The Windows Client team has been doing their homework and you will be very pleased if you are a WinForms developer. Unfortunately I can't say much more than that. But you should be waiting with breathless anticipation with your trembling, twitching finger hovering over the mouse button to click that download link when Beta 1 first becomes available.
It was a good opportunity to provide some feedback based on the customers I deal with and the devs I teach through classes and speaking with INETA. It was also a great week for figuring out what the right things to cover and highlight are in my upcoming book with Addison-Wesley on Building Windows Forms Data Applications.
Next week I spend a rare full week at home befor hitting the road again.
BTW - if you are a steak lover and are in Seattle - you owe it to yourself to go to Union Square Grill. F%*cking fantabulous.
.NET | Community  Friday, May 7, 2004 5:50:37 AM (GMT Daylight Time, UTC+01:00)  | A luminary enters the blogging world
Michele now has a blog, very cool. I have been hounding her mercilessly to start. I'm sure we can count on many insightful posts from her. Surely she can outperform my pathetic ability to find time to post anything technically meaningful - meaning she just needs to have a pulse and some technical thoughts running through her brain that she finds time to share.
Welcome to the blogsphere my compatriot! We expect great things! No pressure....
Sunday, April 25, 2004
Chicago again this week
VSConnections in Orlando rocked last week. Had a fantastic time, sat in on some great talks by others, mine went well, and got to see a lot of other speakers and writers as usual which is probably the most fun part for me.
The next one is in Las Vegas in November. You should really consider attending this conference. It is small enough to not be as overwhelming and disorienting as something like TechEd or PDC can be, but big enough that you have lots of choices with great speakers in excellent facilities to choose from.
This week I'm back in Chicago for a week doing some architecture consulting. Next week it is off to Redmond for a lab. After that San Francisco for an INETA talk to Bay.net on the 19th (ClickOnce is the topic) and then San Diego for TechEd (where I am giving a talk on Deploying .NET applications). After that Charlotte... and so on and so on... I think the airlines are going to like me a lot this year.
PInvoke.net - what a great idea
Duncan points to a site created by Nathan that is a Wiki of Pinvoke signatures, tips, and tricks. What a great idea. When I teach people about PInvoke, I usually make the comment that one of the trickiest parts of getting it right is getting the signature mapped correctly from the unmanaged types to the managed types. That and of course creating the objects properly and passing them as parameters and handing them as return values. This site will make a great resource for dealing with some of those APIs as long as it continues to grow.
I will make it a point to go add stuff there every time I find myself making a PInvoke call that is not already fully documented there. You should too!
.NET | Community  Sunday, April 25, 2004 8:46:03 PM (GMT Daylight Time, UTC+01:00)  |
Sunday, April 18, 2004
Hello VS Connections in Orlando
Arrived safely in Orlando today for VSConnections. It is being held at the Hyatt Regency Grand Cypress, a fantastic resort. I went out for a run today around the grounds. Lots of nice facilities, their own lake with sailing, kayaks, paddle boats, golf course, horseback riding, biking, etc. Very nice set up. Too bad I will probably be in sessions the whole time and will not end up partaking much.
I am giving two talks at this one, both on Tuesday. One is on the User Interface Process Application Block (which just came out with a new version 2.0 last week) and the other is on one of my favorite topics these days - ClickOnce.
Today is just a pre-conference day, but pretty good crowds so far. Really great set up for the conference. If you haven't been to a VS Connections and can't make this one, I recommend hitting the next one in the fall in Las Vegas.
Tuesday, April 13, 2004
Hosting multiple communities with the ASP.NET Community Starter Kit
I had a reader of my article ping me today because he was having a hard time finding good concise help on how to set up two (or more) communities in an installation of the Community Starter Kit. Rather than just share it with one, I figured my blog is the perfect medium to share it with many. My response is below.
---
The kit is definitely capable of hosting multiple communities or virtual sites out of a single installation. Basically what it does is it discriminates a different “site” based on the server name used to address it. So to host multiple sites, you will need to have multiple domain names mapped to your server, or be able to discriminate them by subdomain (i.e. the servername in servername.domainname.org). Lets say you want to host ClubAAA and ClubBBB as distinct sites from a single installation. ClubAAA and ClubBBB will have to each have their own domain name or subdomain name, mapped to your server. Then when users come into http://clubaaa.org/default.aspx they see one site, and when they come in to http://clubbbb.org/default.aspx, they see another site, even though those two domain names are mapped to the same virtual directory in IIS, the directory where the CSK was installed. Or they could come in as http://clubaaa.hostingdomain.org and http://clubbbb.hostingdomain.org and those two could be mapped to the same installation folder in IIS.
Within the kit, you create two communities using the ISPAdmin interface, which will be at http://localhost/CommmunityStarterKit/ISPAdmin/default.aspx with a default installation. The key thing is to have the domain or subdomain names different. You can play around with this by adding a second community on the local machine. Have one of the communities mapped to a primary and community domain of localhost, and have the second mapped to a primary and community domain of 127.0.0.1. Because the server name part of the URL will be different when you address these two ways, the kit will see them as distinct domains and thus they can be used to discriminate different communities.
You can then go tweak the settings for one domain’s appearance to immediately see the effect. Log into the first community (http://localhost/CommunityStarterKit/default.aspx) with the admin name and password, and go to the Admin interface. Select the Edit Sections option, and select the Appearance tab at the top. Change the theme and style to a different named theme than the default Lunar one. Save the changes and return to the site. You should see a different theme. Now change the address in the URL of the browser to http://127.0.0.1/CommunityStarterKit/default.aspx and you should see the old theme.
Once you have multiple communities set up like this, any changes made to one site or the other through its admin interface will be partitioned by the settings that get saved in the database based on the server name in the URL that you are using to access the site. Likewise any changes made to the site’s data (events, downloads, discussions, etc.) will be partitioned as well from a presentation perspective. In the DB itself, the data all lives in one set of tables intermixed. But the data is always linked to the community to which it belongs so that when it is rendered out through the engine to the UI, it looks to the user like they are accessing a separate physical site.
Friday, April 2, 2004
The sweet bliss of a newly discovered WiFi hotspot
I'm sitting in Roanoke airport waiting to head home after speaking at the Roanoke Valley .NET Users Group last night, and got here a little earlier than I needed to. It is always such a breath of fresh air in this situation to fire up the tablet and see that happy little notification “One or more wireless networks is available...”
Ah, sweet bliss. My day just got a little better. The smile spreads across my face as I join the network and start hitting the net. Especially in places like this where there is no fee, no signing in, no nothing. You are just on.
The only question is why the only airports I seem to experience this in are small airports like Roanoke or Toledo. Granted, for larger airports it would be more expensive, they would need more hotspots to cover the gate areas and yadda yadda. But the improvement in quality of life for mobile warriors would be so worth it. I'm sure we will get there in the not too distant future, I just wish they would hurry up.
RVNUG was a great group last night, gave my talk on Extending ASP.NET with handlers, modules, and custom applications. Think it went well. They are a fairly new group, less than a year old, but good size for a town like Roanoke. Chris Williams, the group lead, was a lot of help in getting in and out of town and to the meeting.
I love being an INETA speaker. Hopefully the groups continue to like having me come talk.
Thursday, April 1, 2004
Carl owes me a beer
Oh yeah, and since I am speaking in Roanoke tomorrow to fill in for Carl who couldn't make it, I think that man owes me a beer! :) Carl, are you listening?
Speaking in NYC and Roanoke
Taught a one day seminar in .NET Security yesterday in NYC through the NYC.net users group at the Microsoft office in mid-town manhatten. Good time, great crowd, excellent questions. I always enjoying teaching classes like this because the topic is so broad and dense, everyone who attends brings different perspectives to the table and different comcerns and challenges they have faced
I learned a lot from the crowd, and they seemed to enjoy the class. All good.
Tomorrow I am off for a quick trip to speak at the Roanoke Valley .NET Users Group, giving my talk on Extending ASP.NET with HTTP Modules, Handlers, and custom applications.
Been ha ving fun playing with VS 2005 CTP, more to follow.
Saturday, March 27, 2004
VS.NET 2005 Tech Preview 2 Install Complete
I got VS.NET 2005 Tech Preview installed easily. The only hitch - you have to remove the 1.2 version of the framework that the previous tech preview installed.... and Yukon depends on that version of the framework. Hmmm. So no more working with Yukon until they come out with another beta?
Friday, March 12, 2004
Busy, busy, busy - Speaking at TechEd, book/article writing, training, etc.
Spent the day working on my TechEd 2004 presentation on deploying .NET applications. It was very cool to get selected to speak at TechEd. I am really looking forward to it. Not that the other conferences I speak at (VSConnections, VSLive!, DevEssentials, etc.) and user group talking is not important too, but there is a whole different anticipation level to preparing for TechEd based on its size and visibility in the industry. Only about 30 of us non-MS folks picked to speak, so feels pretty exclusive to be selected. I'm wearing a leather strap around my head to keep it from expanding unbounded. OK, not really, but maybe I should... Ah, screw it. I used to fly fighters, everyone expects me to be arrogant and obnoxious. :)
Another chapter complete on my book this week - at least as complete as it can be based on the PDC tech preview bits, which is not very... This one is an introduction to WinForms programming, and includes coverage of some of the new WinForms 2.0 controls that are not specific to data binding. Since the rest of the book will be focused on data binding and will cover the new data bound controls in detail, I deferred talking about them until the later chapters. Which works well since they are all in implementation flux in Redmond still. I'm really looking forward to Beta 1 to get to play with the bits that will be a lot closer to production than what I have now from PDC.
Two more articles became available in published form this week. One is my article on configuring ASP.NET and IIS to protect resource and document files in your web apps using whatever ASP.NET security mechanisms the rest of your app is using. This one is in the April issue of asp.netPRO. Unfortunately it is locked to subscribers only. The other is my bi-monthly DataStream column in asp.netNOW, this one is on working with loading XML schemas and data into DataSets and XmlDataDocuments.
Last week I completed another partial .NET Master Class in Chicago. Next week I start a dizzying sequence of travel that is sure to make me long for a nice stable week at home. In the next 12 weeks I will be traveling to York PA, Chicago IL, New York City NY, Roanoke VA, Tampa FL, San Jose CA, Orlando FL, San Jose CA, Redmond WA, Chicago IL, San Francisco CA, San Diego CA, and Kansas City MO for a combination of teaching, speaking, and consulting.
Needless to say, I will continue to NOT be one of those guys who finds time to blog every day... Not that there is anything wrong with that, I'm glad they are out there for our consumption, entertainment, and education. I just wish I could find more time for it.
Blogging | Community  Friday, March 12, 2004 10:51:02 PM (GMT Standard Time, UTC+00:00)  |
Friday, February 20, 2004
Do my project for me
OK, so I just don't get this, but it happens all the time...
In other countries, is it acceptable to walk up to a total stranger and demand that they devote significant amounts of their time to perform some task to make your life easier?
Maybe it is just a language barrier thing, but because of my email being all over the place in my article bios, I frequently get emails like the one I got yesterday. This one basically read something like this (shortened considerably):
Hi, i need to do a project for a class. Here is the project assignment: ... I need your help to proceed. Please tell me how you would do this project.
Now I do my best to help out any readers or people who attend my talks who write me with questions, whether they are specific to the topic or not. But these kinds of emails just drive me nuts. I want to respond and politely explain that I do not have the time to help them, but the sarcastic person in me just wants to write something like:
Can I drop everything I am doing in my life and do your work for you? Absolutely!! Why not?? It is what I live for!!
A night at Richmond.NET
I gave a talk on the User Interface Process block last night at the Richmond (VA) .NET User Group last night. What a great group!! Thanks much to Mike Richardson and Greg Robinson and the rest of the folks down there for having me down! Had a standing room only crowd in a big room (maybe 80+ people?). Very good crowd, considering Richmond is not that big of a town. Heck we only get about half that many on a regular basis at CapArea.net, the DC area group that I help run with Scott Lock, Alec Minor, and Hal Hayes. Maybe we need to get some advice from Mike on how he is marketing his meetings.
I think it went pretty well, although I was shaking off the adrenaline at the beginning of the talk of thinking I was not going to make it in time. Thought I was being pretty conservative allowing 4 hours for the 100 miles from DC to Richmond, but not so. Only made it with 10 minutes to spare, 3 hours of the trip being spent on the first 50 miles. DC traffic is just... well, you do the math.
Saturday, February 14, 2004
Week in Redmond
I got to attend a design review of some stuff I can't talk about in Redmond this week. Suffice it to say there is a lot of really cool stuff coming down the pike in the Whidbey time frame, a lot of which people have not even heard about yet.
I am always impressed by the size of the campus, the energy and activity when I am there. The project managers and program managers we deal with are all very enthusiastic and motivated about their jobs and really just busting their butts to pump out good tools to make our lives as developers better, easier, faster.
People can bash Microsoft all they want, but my respect for them as a company and as a group of individuals just grows the more direct contact I have with them.
.NET | Community  Saturday, February 14, 2004 3:03:28 PM (GMT Standard Time, UTC+00:00)  | Selected as MVP
Just found out I got selected as a Microsoft “Most Valuable Professional” (MVP), Visual Developer - ASP/ASP.NET. Very cool. I've always felt like that was a nice little recognition program they had going on, but never looked into how it worked until I found out I was nominated. I guess it had to do with all the writing, speaking, training, and early adoption programs I take part in.
Besides some nice freebies and early access to new technologies, makes a nice little moniker to hang behind the name to say “I'm somebody, I swear! Just ask me!” OK, well, maybe not quite so desparate as that...
Thanks to anyone who helped get me on the slate!
Saturday, January 31, 2004
Help shape content for asp.netPRO
As many people know, I am privileged to be part of the editorial board for asp.netPRO magazine. Now and then the board puts their heads together and tries to predict what good content topics would be for the next 6 months or so, both feature articles, and whether we need to modify our column focus.
If you are a reader of asp.netPRO (or maybe more importantly, WOULD be a reader of asp.netPRO if it did XXXXX), please let me know any ideas you have for things you would like to see in the magazine. We can never manage to tickle everyone's fancy, but we do like to get as much input as possible and try to find the best mix we can.
Probably the hardest thing to deal with is balancing the mix of future technology (i.e. .NET 2.0, Yukon, Longhorn, etc.) material - which is the sexiest and most attention grabbing stuff, with the current technologies, the stuff you need to build your ASP.NET web apps today.
So if you have any ideas for feature articles, new columns, etc., I'd like to hear them. Drop me a note in the comments, and if it requires follow up, I'll track you down.
This is your chance to make asp.netPRO a better magazine for the community at large, as well as for yourself.
.NET | Community  Saturday, January 31, 2004 1:55:54 AM (GMT Standard Time, UTC+00:00)  |
Monday, January 26, 2004
My .NET Rocks! Show is online
That moment of trepidation is past. My .NET Rocks! interview is live, and I think it came out pretty well. Checked it out this morning, and at least there was nothing where I was horrified by the way I answered or came across in the end product.
There were of course a number of things that I felt I could have explained better, most of which I thought of 5 minutes after we were done taping, but that is standard for any live unscripted thing like .NET Rocks! In fact, I think that is one of the things I enjoy about .NET Rocks! as a listener, is the fact that it is unscripted, so the conversatioon can take many unexpected turns.
The one “duh, stupid” that I thought of right after the discussion was the question on remoting and had I been looking at what was new there in Whidbey... you would think the Indigo workshop I attended in Redmond a few months ago would have jogged my memory as to what the remoting story is in Whidbey... it's called Inidigo, and its not part of Whidbey. They are not going to invest any time enhancing or modifying a remote communications protocol that will be subsumed by Indigo a year or so later. Oh, well, those thinking on my feet marks go down a little on that one.
Anyway, it was a cool experience to get on the show, especially since it is getting so big and well known. Thanks to Carl for having me on, and I'll enjoy listening to Carl and Rory on all the future shows.
Carl: Great idea on the live show this Friday, but make sure to tape it still for us offline listeners!
Friday, January 23, 2004
Rory is not going to like my show
Rory is justifiably upset by any complaints about his show on .NET Rocks! He raises some good points about the community aspect of the show and how it shouldn't be too technical. I think a good balanced mix is what they are going for and usually get. I thought his show was fine, but since he is a primary contributor to the humor quotient of my day through his blog, I am probably biased.
Just keep bloggin dude, we all need the laughs! No more hiati (plural for hiatus?)!
He will probably be one of the ones bashing my epidsode when it goes live though, because I think mine was pretty much all technical and very little human interest. I guess that is because I am not an interesting person... :P
|








| June, 2013 (1) |
| May, 2013 (2) |
| April, 2013 (2) |
| March, 2013 (2) |
| February, 2013 (2) |
| January, 2013 (2) |
| December, 2012 (3) |
| November, 2012 (1) |
| October, 2012 (1) |
| August, 2012 (2) |
| June, 2012 (2) |
| May, 2012 (3) |
| April, 2012 (1) |
| March, 2012 (2) |
| February, 2012 (2) |
| January, 2012 (1) |
| November, 2011 (4) |
| October, 2011 (1) |
| September, 2011 (2) |
| August, 2011 (1) |
| July, 2011 (1) |
| May, 2011 (5) |
| March, 2011 (4) |
| February, 2011 (2) |
| January, 2011 (3) |
| November, 2010 (4) |
| October, 2010 (1) |
| September, 2010 (5) |
| August, 2010 (5) |
| July, 2010 (6) |
| June, 2010 (8) |
| May, 2010 (2) |
| April, 2010 (2) |
| January, 2010 (1) |
| December, 2009 (3) |
| November, 2009 (2) |
| October, 2009 (3) |
| September, 2009 (3) |
| August, 2009 (2) |
| July, 2009 (3) |
| May, 2009 (3) |
| April, 2009 (2) |
| March, 2009 (1) |
| February, 2009 (2) |
| January, 2009 (2) |
| December, 2008 (1) |
| November, 2008 (2) |
| October, 2008 (5) |
| September, 2008 (4) |
| August, 2008 (2) |
| July, 2008 (1) |
| June, 2008 (2) |
| May, 2008 (2) |
| April, 2008 (3) |
| February, 2008 (6) |
| January, 2008 (3) |
| December, 2007 (1) |
| November, 2007 (1) |
| October, 2007 (5) |
| September, 2007 (1) |
| July, 2007 (3) |
| June, 2007 (8) |
| April, 2007 (2) |
| March, 2007 (4) |
| February, 2007 (1) |
| December, 2006 (2) |
| November, 2006 (9) |
| October, 2006 (5) |
| September, 2006 (3) |
| August, 2006 (2) |
| July, 2006 (4) |
| June, 2006 (5) |
| May, 2006 (10) |
| April, 2006 (4) |
| March, 2006 (2) |
| February, 2006 (12) |
| January, 2006 (7) |
| December, 2005 (2) |
| November, 2005 (15) |
| October, 2005 (6) |
| September, 2005 (7) |
| August, 2005 (3) |
| July, 2005 (10) |
| June, 2005 (11) |
| May, 2005 (7) |
| April, 2005 (8) |
| March, 2005 (6) |
| February, 2005 (2) |
| January, 2005 (6) |
| December, 2004 (3) |
| November, 2004 (5) |
| October, 2004 (2) |
| September, 2004 (5) |
| August, 2004 (13) |
| July, 2004 (6) |
| June, 2004 (14) |
| May, 2004 (17) |
| April, 2004 (12) |
| March, 2004 (8) |
| February, 2004 (10) |
| January, 2004 (14) |
| December, 2003 (9) |
| November, 2003 (13) |
| October, 2003 (3) |
Sign In
|