Archives

Archives / 2003
  • Timezone Bug in Visual SourceSafe

    I checked in a file to Visual SourceSafe at 3:49pm.  My colleague applied a label to our files at 4:29pm.  Now wouldn't you think that my changes would be included in the label.  Well, you would be wrong if you think that VSS works in the obvious way.  I work in Atlanta using EST and my colleague was working in Mineapolis using CST.  Apparently VSS is totally clueless about timezones, and it does not use GMT internally.  Instead, it recorded my check-in at 3:49pm, and my colleague's label at 3:29pm, which was his local time.  That's right, even though my changes occurred before his label, his label was recorded before my changes!  I checked the contents of the labeled file just to make sure it was not a discrepancy of history being displayed, and it was not.  The labeled file clearly did not contain my changes that were checked in prior to the label.  Now I have to tell my team of consultants to always set their local PC time to EST before working with VSS!

  • Aspect-Oriented Programming (AOP) and Tracing

    I've been interested in Aspect-Oriented Programming (AOP) for some time now, but I hadn't actually experimented with it myself until recently.  That's not totally true, since most O/R mappers use AOP in their implementation, but I've only been a consumer of AOP in those cases.  For my own experiment, I decided to dig up an old MSDN article by Dharma Shukla, Simon Fell, and Chris Sells that used AOP for tracing.  By just decorating your class with an attribute, their code automatically adds tracing when you enter each method (with all your parameters included) and when you leave each method (with the return value included).  I modified it a little in my experiment to make explicit tracing calls much easier, and I also added a config switch to disable or enable the actual tracing output.  You could similarly modify it to output the trace to different “listeners”, or even add severity levels, but I'm just experimenting so I haven't done that yet.  This is all really cool stuff, especially since its so much easier to actually consume than other tracing methods like Log4Net, the Exception Management Application Block, or custom Trace Listeners.  By the way, that last one is an excellent article written by my good friend Jerry Dennany, who has an occassional clue here on these weblogs too.  Anyhow, my question to my few readers out there is how much does this context-bound call interception technique affect performance when you compare it to the other more traditional methods?  Also, are there any other things to worry about with these techniques, whether it be for tracing, persistence, security, or something entirely different?  And finally, what other uses have you dreamed up, or just heard about, for AOP, and what has been your experience using AOP for such things?

  • Cool Web Debugging Tools

    I don't usually repeat what others are saying, but these web debugging tools posted by Jon Galloway are awesome.  I've used ieHttpHeaders for quite a while, but the FullSource tool is new to me -- and its just incredible in what it does.  By the way, all web developers should at least have a fair idea of what's going on under the covers with the http protocol.  I used to send raw http commands using telnet, but ieHttpHeaders makes it trivial to see everything that is involved with a request.  Similarly, if you've ever used javascript to dynamically create your tables then you know its a pain to debug, and FullSource is what you've been needing.

  • Force ASP.NET Apps to Keep-Alive and Pre-Compile

    Larry Silverman has taken my Keep-Alive / Pre-Compile code for ASP.NET and extended it a fair amount.  I still get a lot of email about my version, so I thought I would share Larry's code for those interested.  Larry's version works with Forms Authentication, solving one of the problems I left undone.  It does require a super-user manually kick off the process, but that seems to be a fair tradeoff.  He's also separated the keep-alive functionality from the pre-compilation, and added a base page class for pre-compilation to avoid real functionality.  There's also an email sent about success or failure, along with the exceptions that occurred.  So if you liked my keep-alive and pre-compile code, but need more, then this may be what you were looking for.

  • Weird Session State Problem and Computer Names

    One of my colleagues installed one of our ASP.NET applications on a demo laptop recently and came to me yesterday since he couldn't get it to work.  It didn't take a long time to figure out that he had forgot the Infragistics controls that we use, along with Adobe Acrobat, so I installed them and tested it using localhost.  He came back a short while later claiming that while it was now running, it wasn't working correctly, since his entries kept getting ignored.  I tested it again using localhost and it certainly worked for me -- so I assumed he was doing something wrong and asked him to try it again.  This time he sent me a screen shot of what he was seeing, and I noticed that he was using the computer name instead of localhost to access it.  That seems innocent enough, but I decided to try it and sure enough the session state kept getting lost when using the computer name, but not with localhost.  I looked at all the settings for IIS and everything else I could think of but it just didn't make any sense, and I certainly couldn't find anything wrong.  Finally, I looked through the posts in the ASP.NET Forums that are related to State Management, looking for anything about session getting lost.  That's when I found this MS support link that states cookies, and thus session, will cease to function if computer names have an underscore!  Yes, this particular computer name had an underscore in it, and of course localhost doesn't, and it all makes perfect sense now, although the solution isn't very pretty.  Anyhow, I've never personally used underscores in my computer names, but I also never realized it was a potential problem, so beware.

  • Have You Seen My Website Yet?

    Have you seen WilsonDotNet.com yet?  Well, you should take a minute and check it out.  I'm using some really cool technologies to put out a simple yet effective website.  Take the design for a second.  You want to get a jump on MasterPages in ASP.NET 2.0?  They you should check out MasterPages in ASP.NET v1.* (http://ASPAlliance.com/PaulWilson/Articles/?id=14).  Its not just very effective, allowing me to not have to worry about mixing content and design, but it is MasterPages.  I converted my entire site from MasterPages v1.* to MasterPages v2.0 in about 1 minute.

  • Online Aggregator: BlogLines.com

    I've been wanting an online aggregator for a while, but so far I had not been to impressed.  Until now that is.  So far I'm rather impressed with BlogLines.com -- you can even view my public subscriptions.  Why an online aggregator?  I can easily access all the feeds I want from multiple computers, even public computers, without multiple aggregators running.  I can also catch up on new subscriptions, since the past feeds are already in their database in most cases.  I can also save my favorites in a private folder, again from any computer.  My main gripe so far -- I haven't found a way to have all the various feeds sorted together.

  • Getting the ASP.NET Forums to Actually Work

    I decided to download and install the ASP.NET Forums for DotNetAtlanta.com.  I thought this would be a simple task, but it was not as simple as it should be.  The download installed the web application, database, and source code locally just fine.  However, those of us that use shared web hosts, like WebHost4Life, can't just run an exe to install our apps.  Still, how hard can it be I figured -- just copy the web files and run the database scripts.  I took my time with the database scripts, since I needed to make sure they didn't drop and try to recreate my database.  I also needed to make sure they pointed to the correct database, instead of the default database name.  Still, I got several errors that I didn't really understand the significance of at first.  It turns out that the scripts assign dbo as the owner for the tables, but not for the views, stored procs, or user functions.  This required a search for a script to fix this problem, one of which I know was posted here very recently.  There were also two procs that required some changes (forums_GetAllForumGroupsForModeration, forums_GetForumsForModerationByForumGroupId).

  • Introducing DotNetAtlanta.com with Forums

    Introducing DotNetAtlanta.com, now with Forums also. My vision for this site is to provide a single community site for all .NET developers in the Atlanta area. We have several excellent .NET user groups already, and this is not intended to compete with them in any way. Instead, this site aims to highlite each of these existing .NET user groups, while at the same time adding other things currently lacking. These forums are obviously one such missing element, so I've taken the Microsoft ASP.NET Forums and installed them here. I've also seen many people interested in the Who's Who of .NET Atlanta, so I'm trying to create a list of leaders, MVPs, and bloggers. There are many other possibilities still, like a list of developers and their resumes, and maybe even an aggregated blog feed, so please give me your suggestions. Also, feel free to volunteer if you have the time, desire, and ability to either give this site a better look, or to code some of these other features.

  • Random Observations

    Has anyone else noticed that using the mouse to click in the scrollbar area now seems to advance or backup two pages instead of one?  This is happening on all of my machines that have the latest MS patches that came out this last week -- really annoying behavior to say the least.

  • The .NET Community in Atlanta

    Atlanta User Groups are getting several .NET celebrities in the next month.  First up is Rocky Lhotka, a long-time top VB author and speaker, next week, November 19 at 6:30pm, at the Atlanta VB Study Group.  Then Alan Griver, a MS VB.NET PM, will give a preview of Whidbey (.NET v2.0) at the MS Internet Developer's Association on December 2 at 6:00pm.  Finally, Jason Beres, an Ineta speaker and author, will be at the Atlanta DotNet User Group on December 15 at 6:00pm.

  • ObjectSpaces to NOT be Slower Afterall

    Andrew Conrad indicates that ObjectSpaces will not be slower afterall as was originally reported due to some misunderstandings.  It will of course be 30% slower than using a DataReader, not a DataSet, but that's got to be expected, just like a DataSet is slower than a DataReader.  It should, however, be very comparable to using a DataReader and creating your own custom objects, and probably faster than using DataSets.  This is good news -- now they need to get support for Access and Oracle, or at least allow a provider-model so someone else can implement the support.

  • ASP.NET v2.0: Miscellaneous Cool Features

    ASP.NET v2.0 makes it easy to set focus and defaul buttons, as well as maintain your scroll positions across postbacks.  Its easy to setup a site map so navigational menus, trees, and breadcrumbs are all based on this one store.  Client-side callbacks that allow you to minimize postbacks are really cool, as is the creation of a separate ControlState (from ViewState) for essential properties.  Of course, it goes without say that I like MasterPages, as well as Themes and Skins.  I also like the Code and Resources directories, and you can even specify additional code directories to automatically compile.  Finally, VS.NET actually does not alter your html, and it actually will even supply some more control of how it alters it if you want it to do so at all in the first place.

  • ASP.NET v2.0: Posting to Other Pages is too Limited

    I'm definitely excited about ASP.NET v2.0 and all the new features it brings, so its hard to criticize it in most cases.  However, one problem I have is with the current implementation of posting to other pages.  As most ASP.NET developers know, your server-form is limited to posting back to itself in ASP.NET v1.*.  This behavior will change in ASP.NET v2.0 with a feature called cross-page posting.  Basically, each button (and other relevant controls) have a postTargetUrl property.  This property allows you to specify where that control will cause the page to be posted to.  This is great in most cases since it allows the post target to be changed on a case-by-case basis, while keeping the rest of the form to still post back to itself.  The problem is that the  current implementation forces this url to be a page in the same application!

  • ASP.NET v2.0: New Web.Config Options in Whidbey

    There are lots of new options in the web.config file in ASP.NET v2.0.  I particularly like ability to globally define your RegisterTagPrefixes, as well as your Imports for all of your Pages.  Its also nice to see the cookieless attribute for Forms Authentication, with more options then just true or false so that different devices are handled appropriately.  Many of these others are very complicated, and they'll be discussed in articles about the specific features.  Here's the general layout:

  • ASP.NET v2.0: ObjectDataSource and ObjectSpaces

    ASP.NET v2.0 has several datasource controls that allow you to declare all of your database access code when using the new GridView and other controls.  One of the coolest versions of this is the ObjectDataSource control which lets you easily declare the name of a class and a method that will return a collection of bindable of objects -- not your usual DataSet or DataReader:

  • ADO.NET v2.0: ObjectSpaces Delivers an O/R Mapper

    ObjectSpaces is one of the most exciting parts of .NET v2.0 to me.  Yes, I'm well known for ASP.NET, but I'm a software architect, and I've really been intrigued by the potential of O/R mappers.  So read my article on ObjectSpaces and download my sample code that uses the Northwind database.  The front-end is ASP.NET, and there's no links between pages or any instructions, but the code works if you have Whidbey.

  • ASP.NET v2.0: Update on the Page Lifecycle

    I just posted a new article on the Page Lifecycle in ASP.NET v2.0 (Whidbey).  Its mostly just a brief update of my previous article on the Page Lifecycle in ASP.NET v1.*.  Keep in mind that the page lifecycle is probably the single most important thing for any ASP.NET developer to understand, and I can't begin to count the number of problems that I see in the Forums from those that don't get it.  I'll try to blog a few other experiences with .NET v2.0 today, and I'm going to work hard to get another article that will be really cool tomorrow, or as soon as possible.

  • VB.NET v2.0: Generics are Supported in VB Also

    Rob Chartier has created a really nice article titled Introducing .NET Generics.  Unfortunately, all of the sample code was written using C# -- just like every sneak peek on generics so far.  However, VB.NET will also fully support generics in .NET v2.0 (Whidbey), although not much has been stated about this.  Take a look at my VB.NET translations here -- you'll note that Of is the VB keyword used for generics, instead of using the <> syntax of C#. 

  • VB.NET v2.0: Generics are Supported in VB Also

    Rob Chartier has created a really nice article titled Introducing .NET Generics.  Unfortunately, all of the sample code was written using C# -- just like every sneak peek on generics so far.  However, VB.NET will also fully support generics in .NET v2.0 (Whidbey), although not much has been stated about this.  Take a look at my VB.NET translations here -- you'll note that Of is the VB keyword used for generics, instead of using the <> syntax of C#. 

  • ASP.NET v2.0: Code-Beside Replaces Code-Behind

    I'm not at the PDC, but that can't stop me from talking about .NET v2.0 (Whidbey) as of today.  I'll try to do even better than the folks at the PDC and actually post some real details!  That's right, my goal this week is to post a brief article each day at ASPAlliance.com.  I'll also try to blog some other shorter details based on my experiences this last year.  So, here's the first article: ASP.NET v2.0: Code-Beside Replaces Code-Behind.  ASP.NET v2.0 replaces the Code-Behind code-separation technique with Code-Beside, which is designed to be an easier and less brittle method based on Partial Types.  (Note: I'm glad they did not call this Code-Behind v2.0, which was one of the early candidates.)

  • ASP.NET v2.0 (Whidbey) Articles on ASPNetPro.com

    I've been watching ASP.NET Pro Magazine start releasing articles on ASP.NET v2.0 (Whidbey) this week.  Technically they seem to be jumping the gun a little ahead of the PDC, but go ahead and read them if you subscribe.  So far they've released the following 3 articles, including mine on Master Pages:

  • Sorting and Paging Recordsets in SQL Server

    Here's a stored procedure that I use for sorting and paging large recordsets in SQL Server, as opposed to using the more common and terribly inefficient entire dataset approach in .NET.  It certainly doesn't matter much in the little classroom examples of a few hundred, or even thousands, of records, but working with larger recordsets with datasets is just bad.  This is even more true with ASP.NET, since the entire dataset is usually saved in viewstate, and since the web server is doing the processing for many users.  This stored procedure is certainly not the only way to do sorting and paging in SQL Server, but it is probably the most efficient, although proper indexing is still required to avoid table scans.  Note that this does not use temporary tables, which are convenient but not as optimal -- this also means you could modify this to be dynamic SQL for Access or other databases!  The parameters are the name of the table, the name of the primary key (necessary for the little bit of optimization included), the name of the sort field (or sort fields, with or without ASC/DESC), and the page size (number of records).  It also allows optional parameters for the page index (defaults to 1st page) and a query filter (defaults to null) so you can sort and page through filtered records only!  Note that it returns two recordsets -- the first is the results you expect, and the second recordset is a scalar with the number of total pages so you can better define the GUI pager for a grid.  This is relatively easy to integrate with the ASP.NET datagrid if you use custom paging and sorting, and it will minimize both your load on the server and the amount of data sent to the client's browser!  By the way, this code is just modified from some I found on the net, and there are certainly some minor optimizations that can be done, like using different sql for the first page.

  • Observations on my Google Search Rankings

    I've watched several others, usually with less common names, note their high rankings in Google, but I usually didn't stand out unless you included “ASP.NET“ in your search.  Until now -- a search on “Paul Wilson” on Google returns my blog as #5-6 now, as well as listing my WilsonDotNet.com site as #6-7 -- pretty good for a common name like “Paul Wilson”. Also, a search on “Wilson Blog” lists my blog as the #3-4, and a search on “Wilson .NET” (without the full “ASP.NET“) finally ranks me as #1 -- even ahead of Brad Wilson, aka DotNetGuy! The funny thing is that I have not been ranking quite as high lately on more specific searches, like page templates, master pages, and multiple forms, where I used to rank as high as #1. Another observation is that I don't see my articles on ASPAlliance.com show up as high in the searches anymore -- anyone else noticing poor rankings for their ASPAlliance articles? Finally, even though I've never really figured out what to do with MicrosoftArchitect.com, I also now have MasterPage.net, in honor of the upcoming ASP.NET v2.0 Master Pages.

  • Atlanta .NET User Group and DataGrid Girl

    I made it to last night's Atlanta .NET User Group meeting, as well as having dinner with Marcie (aka DataGrid Girl).  I don't get to these things very often -- I think this was my third total and second in the last year or so.  I was impressed with the size of the group (96) and the interaction that actually occurred amongst all us geeks.  Marcie did a great job -- I learned how to use the datagrid without enabling its viewstate!  Steven Heckler also gave a short talk on Regular Expressions which had to be the best explanation I've ever heard or seen.  There were also a good number of job announcements, which appeared to interest many attendees.  I was also pleasantly surprised at the number of people that knew who I was and wanted to talk to me -- and all I did was sit quietly in the back.  Anyhow, if last night was typical, then I would recommend attending if you are in Atlanta, although I still prefer going home to be with my family.

  • Are Many ThirdParty WebControls to Heavy?

    So what do you think of 3rd party webcontrols, like Infragistics, ComponentOne, Farpoint, etc?  We use Infragistics here at PRG, which is certainly a well-written set of controls.  The problem is that these things have to be so flexible to appeal to the largest number of customers that they are often way too heavy!  I was using their tree-view control (they call it WebNavigator) for a little while to easily display my data with dhtml behavior and it worked fine.  All the sudden when I had to add some more dynamic behavior in their client-side javascript I found that it took a couple of seconds or more to update!  My solution was to port my own rather simplistic tree-view control that I use on my site and the dynamic behavior is now instantaneous.  My code is certainly not as flexible as Infragistics, but it is incredibly fast due to its simplicity.  Similarly, while all these web-grids have cool features, they are also just too slow to use in anything but the simplest cases.  Their client-side sorting is way too slow for even medium sized resultsets, and once you turn to server-side you have now opened up the whole viewstate issue.  Instead, I end up doing custom paging and sorting through a stored procedure that only returns the page of data needed since this performs optimally.  But this leaves the grid being just another too-heavy pretty GUI control that really has nothing beyond a simple repeater.  So what does everyone else think about these super 3rd party webcontrols that have something for everyone?

  • One Month at New Job with PRG-Schultz

    I've been at my new job at PRG-Schultz for 5 weeks now, or a day or two past a month if you prefer.  Things are going very well, culminating in a very high profile demo yesterday in front of the CIO, VP, and other important folks.  This was an ASP.NET web application, with a SQL Server backend, that has a rather significant dynamic user interface.  Its also the first application based on a new GUI specification that was put together by a leader in the industry.  Of course, everything worked flawlessly -- I can't stand it when presentations are full of bugs so I make sure I do it right!  I suppose that's easier said than done, and I don't want to sound cocky, but I really do think that many people just don't think bugs are a big deal.  So lets get this straight if you are doing demos or presentations -- bugs are a big deal and you should work hard to avoid them.  This may mean you simply don't give into the impulse to add something new at the last minute, but its something that you must keep as a high priority no matter what.  OK, end of rant.

  • ActiveReports, Crystal, or Other for ASP.NET

    We need to make some decisions about reporting tools for .NET, including but not limited to ASP.NET.  I know ActiveReports is very popular, and of course Crystal is common since its included with VS.NET.  I've personally never been a big Crystal fan, but I haven't used it in a long time either, so maybe its improved.  Anyone have any thoughts or experiences with these, or other, reporting tools for .NET.  I would be especially interested in developer vs. end-user customizations, and licensing issues.

  • Talk to your Users like they may be the CIO

    I have an interesting story from work today.  First, this is just my second week at PRG-Schultz.  I know who my manager is, and I know his boss, who is a VP in the IT division, but that's about it.  I know I've been told lots of other names, but I'm not good at names, and I probably don't really care either.   Now I've already been working on one project, and I had put together a simple prototype.  I've met one chief user, and my coworker showed my prototype to him yesterday.

  • Update on my Coding Standard for .NET

    My second week at PRG-Schultz is now just about over.  I finished my coding standard for all new .NET development and we went over it today.  It went pretty well for the most part, although that's probably equally attributable to my manager as to my work.  As for my part, since I just summarized and referred to the MSDN docs and other similar standards, its hard to argue with the rest of the .NET world.  I think the existence of FxCop for easy self-checking also won a few people over, since it doesn't mean lots of policing.  The consultants on the team were probably the most receptive of all, even though one wasn't involved with .NET and the other is still rather new to it.  They are just more used to change and some type of client standard or other expectation.  On the other hand, I have a most excellent manager (are you reading this Frank?) that actually did a little research and calls to others to prove to himself that this really is the industry standard in .NET.  As a result, he prepped the team so that it was understood it was a done deal and not open to much change, although gripes were more than welcome this one time.  One person that had told me he would not change seemed content with accepting it, and one other is what I suspect is the one that every shop has.  But it went real well overall, and so far they appear to be a very solid team, evidenced even more by a team-building session we had yesterday.  Some of them are going to be very new to .NET, as this is a very diverse team, but I think we'll make it.

  • Tip on Getting ViewState past Some Proxies

    Yet another tip on viewstate from a reader of mine, Cliff Harker.  Basically, there are some proxies out there, including AOL apparently, that cut off any hidden fields that are greater than some size.  This obviously screws up viewstate, so this code breaks viewstate up into multiple smaller fields to get around this problem:

  • Coding Standard for .NET and VB6 Teams

    I started my new job at PRG/Schultz last week here in Atlanta, and had a very nice first week.  One of my first tasks is to create a coding standard for all new .NET development.  Now anyone that reads the MSDN docs should know what Microsoft recommends.  There are also others besides Microsoft that have adopted this new coding style.  There is even an automated compliance checker called FxCop available from Microsoft.  Most all .NET books and articles are also written to this new standard, checked by FxCop.  So it seems obvious that the Microsoft recommendation should certainly be the first choice.  Especially when you consider large corporations assume that people will come and go over time.

  • Finishing at Old Job -- Starting New Job Next

    Today is my last day at Roche Diagnostics, where I have been the Software Architect for 2 1/2 years.  This site was originally an acquisition and they finally decided to close it.  I've known for over a year, and I finally got my notice 2 months ago, and now its over.  Some of my colleagues still have some things to do, but they are due to be out soon also.  They're all really sharp guys, so let me know if anyone is needing developers in coming months.

  • What I've Been Doing Lately

    I haven't blogged in a long time, so I guess its time I provide some type of update.  First, I'm approaching my last day of work at my current employer and I'm still looking for my next gig to start on August 11.  I've had a couple of interviews, with another one later today, but most people haven't really wanted to talk until lately since they always want someone “immediately” and I had 60 days notice.  Hopefully now that I've got just 2 weeks left that will no longer be an issue, and so far I've been very picky and things still appear promising at this point.

  • Rapid Application Development with DeKlarit

    I just finished a review of DeKlarit and I must say that it is an excellent and unique RAD tool.  I'm a software architect that likes to get my hands dirty, but I will definitely be using it myself.  It can totally create a working web or windows application, from database to data-access layer to the user interface, which makes sense for small projects, or you can just use it as a data-access code-generator and do the rest yourself.  I must confess that I don't personally like using typed datasets that it creates, although many folks will love that, but I still plan to use it for rapid prototyping for complex projects.  I don't know of any other tool out there that comes even close to DeKlarit for designing business objects, including sophisticated business rules and relationships, without worrying about the database schema first.  The fact that it even builds optional web or windows applications, which look better than anything I can create, makes it even great for demonstrations of your application design to clients early in development.  Take a look at my review for more details and evaluate this product yourself if you ever need to design and/or build real business applications -- its definitely a tool worth having.

  • IIS Applications, Virtual Directories, and ASP.NET

    I have just posted 2 new articles: IIS Applications and Virtual Directories, and IIS Applications and ASP.NET Specifics.  I've noticed for a very long time that there is hardly anything documented about IIS Applications, and yet understanding them is critical to successful ASP.NET development.  I've even noticed that nearly everyone, including Scott Guthrie and Fritz Onion, incorrectly refers to Virtual Directories when what they really mean is IIS Applications.  These terms are not interchangeable -- you can have a Virtual Directory without it being an IIS Application, and you can also have an IIS Application without it being a Virtual Directory.  Being a Virtual Directory is not relevant to ASP.NET -- its just a logical way to organize your web-site and physical directories.  On the other hand, there are all sorts of things relevant to ASP.NET when it comes to IIS Applications, and I've tried to list most of them and provide some useful tips also.  So please read both of these articles -- and let's see if we can keep our terms correct when talking about IIS Applications and Virtual Directories.

  • ASP.NET Developer's Cookbook Stolen

    I was one of the contributors to the ASP.NET Developer's Cookbook with Steve Smith and Rob Howard.  Today I finally got my free copy, only it was already opened and stolen off my front porch, or somewhere in route.  I've never had any stolen from my mail before, and this seemed like one of the least likely things to be taken.  My wife even had something come today that's probably more useful and expensive, but I guess the package didn't look as interesting.  The upside is that maybe someone around here will actually read it and start working with ASP.NET, and then later need my help to bail them out of a mess they get themselves into.  I can dream anyway.

  • Welcome Jerry Dennany to WebLogs

    One of my colleagues, Jerry Dennany, has finally got a blog here -- and it should be a good one.  Don't believe him for a minute when he describes himself as a "software configuration manager / release engineer".  That may be his title here at Roche, but Jerry is actually one of the smartest "developers" I know period, .NET or otherwise, even though he claims to not be a developer.  He has been one of the main guys on "my" team that answers my questions -- not the other way around!  Remoting, garbage collection, MSIL (or CIL), COM+ configuration, network admin -- this guy is your .NET and overall Microsoft internals resource guy!  I've been very fortunate to have worked with him for the past couple of years, and I know he will have some great posts here on some of the internals of .NET and other things Microsoft (or even Linux if we let him).  I see he's already correcting Microsoft's Suzanne Cook, from the CLR team, in his blog -- and he's right of course.  Also, check out his article on CodeProject on "TraceListeners and Reflection" -- definitely a very good read on tracing.

  • Pocket PC Development with VS.NET 2003

    I finally got my free PocketPC yesterday and its vastly superior to my Handspring Treo.  Of course, my Handspring Treo actually works with the Internet over the built-in cell phone, so it will continue to be my main PDA.  I suppose this is why so many other developers are already starting to put their free PocketPCs up on EBay!  I'm keeping mine to develop on though, and its amazing how easy it really is to do with VS.NET 2003 -- Microsoft definitely got this right.  There is already a project type for PocketPC development, and using it automatically lets you know what .NET functionality is valid for the PocketPC.  Setting a reference to the System.Data.SqlServerCe namespace even automatically installs SqlCE on the PocketPC when you deploy.  I haven't really done much yet, but what I have tried has been remarkably easy, so I plan on doing more.  So if you qualify for this free PocketPC you really need to sign up and get yours before the offer is no longer valid.

  • Do You Need Your Very Own ASP.NET Guru ?

    I got my 60-day notice earlier this week, so if anyone needs an ASP.NET guru, or .NET in general and other Microsoft technologies for that matter, I'll be available starting August 11.  I've known they were going to be closing our Atlanta office now for about a year and a half, so this wasn't a surprise, and I actually pushed for it to occur now instead of later this year, so I'm ready.  You can see my resume at http://Paul.WilsonDotnet.com if you are so inclined, otherwise just let me know if you have a lead.  I live in Atlanta, actually the North-Northwest side, and would like to stay here, although I'm willing to consider a few other things for the right opportunity.  I'm leaning towards consulting or contracts, although once again I'm open to permanent positions if they fit me and my location well.

  • Patterns and Practices to Finish my TechEd Trip

    I attended two sessions from the Patterns and Practices group this morning.  I was very impressed, not just with what they've done, but also with their honesty and openness.  They already documented a fair number of patterns and released several application blocks, like the Data Access Application Block, and more will be coming soon.  I'll have to reevaluate their work, and the community additions they've encouraged, since I wasn't real impressed the last time I checked.

  • Finishing Up this Morning at TechEd 2003

    I've got two sessions this morning before I head back to Atlanta this afternoon.  I struggled through two boring sessions yesterday afternoon, while finding one that was pretty good.  It was "Building Application Back-Ends Quickly" by Kate Gregory and Kenneth Spencer.  There was good discussion of design patterns and lots of examples of code generation.  They did not, however, mention Eric Smith's CodeSmith, which would beat their tools hands down.  They also did not mention O/R mappers, my latest interest, which promises to make lots of code obsolete, generated or not.  Last night was the big attendee party -- it featured SmashMouth and the WallFlowers.  Good music, but its just hard to get a bunch of techies, mostly male, to get real excited, so it seemed a little dull.

  • More Fabulous Sessions and TechEd Updates

    So last night I said "Real-World Tips for Real-World Web Applications" by Paul Sheriff and Ken Getz was the best ASP.NET session.  I was also asked why in the comments and I will try to explain that in a minute.  Today I went to two of Clemens Vasters sessions, "Building Distributed .NET Applications" and "Aspect-Oriented Programming", and these were also fabulous.  I will even have to go out on a limb and say Clemens' "Building Distributed .NET Applications" is the best overall session for me so far. I'm not saying its better than Paul and Ken's talk for everyone, but that depends on whether you need to learn more ASP.NET or not, and I'm simply past that point.  Clemons spent some time first talking about the difference between layers (logical separation) and tiers (physical separation), including some real cool pictures and a comparison to something Men In Black.  He showed a demo of one of his apps that works both disconnected and connected -- can't wait to get the code for this later on his blog.  Finally, there was a lot of distinctions made between the types of tiers, that being local (same machine), near (LAN), and far (everything else).  Local should use Remoting and take advantage of properties, inheritance, byref, events, and be synchronous.  Near should use Enterprise Services and take advantage of chunky calls, interfaces, byval, and may be synchronous.  Far should use Web Services and take advantage be asynchronous message based.  There were a lot more details, but I had never heard anyone say that Remoting is only best for same machine communication and once you step out into the LAN you should be using Enterprise Services.  I've heard hints of this before, including some stuff from Ingo himself at DevConnections, but this was right in your face this is the way to do it conclusion.  It sounded good to me, but I don't have much experience with these, so let me know your thoughts on this.

  • The Absolute Best Session on ASP.NET

    I have not attended all that many ASP.NET sessions (just the ones I'm required to review) since I already know all of ASP.NET (ha ha), but "Real-World Tips for Real-World Web Applications" by Paul Sheriff and Ken Getz is definitely the absolute best of all the ones I have seen.  It may even be the best of any period that I've seen, although I have not mentally walked through all the others to be sure that is the case -- but it may be.  Apparently the audience thought so too -- it was standing room only and lots of good vibrations were evident during and after the session.  I haven't read their book, but I'm thinking it might be one of the best out there based on what I just saw -- and they also did say it was the best!

  • More Assorted and Useless TechEd Notes

    Scoble linked to me!  Not exactly my best stuff to have generated a link, but I'll take it.  I'm actually well known among my colleagues and employers for telling it like it is, so I guess its one of the best things I have to offer.  Does anyone think this trait could be valuable for an independent consultant?  I've been pondering this of late, as I try to decide what I'm going to do after my current gig is up around September.  I mean its easy to get lots of billable hours if you just do what you're asked to do, but sometimes the best thing is to actually not do what you've been asked, or to just offer some raw advice that may not get you lots of work either.  Feel free to send me your thoughts or advice on whether I should continue with low-risk corporate jobs or go out on my own in some fashion.  I've got to minimize the risk since I've got a wonderful wife and two kids, but I do think something more independent would be more interesting.

  • CommNet Problem at TechEd

    There's one huge CommNet area at TechEd, and lots of little satellite areas.  Apparently since roaming profiles are enabled the machines tend to run out of disk space a lot.  That's probably quickly fixed at the main area, but not at the other areas.  This sounds bad, and it is for most people, but the upside is that you can always go back to any particular computer that you have previously used and be one of the only ones able to use it now.  Its kind of like reserving my own computer for the rest of the week!  Sorry, it wasn't my idea, but I'm willing to exploit this to its fullest.  :)

  • SQL Server Yukon and .NET Programming Features

    I went to see the talk about SQL Server Yukon and its .NET Programming Features given by Jose Blakeley and Eric Brown this morning.  There weren't as many demos as I would have liked to see, but there was no shortage of new things coming that they talked about.  My take is that its not just use any language to work with SQL, but also work with your data in any way you want.  That's right, you will be able to work with any data as either normal data (DataSet), objects (ObjectSpaces), or xml (XmlReader).  I'm not sure what all the implications or limitations are since I haven't gotten a copy of it myself (yet), but it makes sense.  Since .NET languages and constructs will be a native part of the database, its just a natural evolution to be able to natively expose objects.  Also, they will be adding an xml data-type to the database itself, so once again it just makes sense to expose any data as xml also.  My question is whether or not ObjectSpaces will be part of .NET itself, or part of SQL Server?  Why does it matter -- because I want to read and persist my objects totally independent of the database so my code will automatically work with Oracle and Access too!  I can do this now with Thona Consulting's EntityBroker, and others are also going down this path, like Andres Aguiar's DeKlarit, who I met this morning.

  • Meeting More Gurus at TechEd on Day 1

    I went to listen and review Nikhil Kothari's talk on server controls and Scott Guthrie's talk on assorted black-belt tips.  Scott again keeps giving hints about ASP.NET version 2.0, basically saying that everything he showed will be unnecessary.  Let's see, he talked about setting focus, keeping scroll position on postbacks, lots of client-side javascript, and how to add themes or skins to templated controls.  I then went to help at the ASP.NET Ask the Experts booth, and I got to meet more of the ASP.NET team, like David Ebbo and Joseph Croney.  David knew who I was and said he was referring lots of people asking about his original MasterPages to my article -- really cool.  Then I went to a get-together of TechEd bloggers, meeting Clemens Vasters, Scott Hanselman, and too many others to list here.  I also re-discovered a former co-worker, so you never really know what all to expect at these conferences.  Finally, I got to see the book I co-wrote -- ASP.NET Developer's Cookbook.  OK, I didn't contribute that much, but the book doesn't say how much, it just says I did!

  • C# Future and First Morning at TechEd

    I made it to TechEd on an early flight this morning.  I saw a couple of other bloggers after registering: DataGridGirl, Eli Robillard, and Stephen Swienton.  Stephen made me feel good since he said he presented some of my template techniques at a user group.  I just finished listening to Dan Fernandez talk about the future of C#.  Nothing new was said that isn't already available in white papers on the net, but he did demo some real generics using Gyro, that is available for Rotor now, that I hadn't personally seen.  That one always seems to get the most attention, although ASP.NET developers should also be interested in Partial Types. :)  I'm off now to see Rob Howard give a Tips and Tricks talk that I'm supposed to formally review as part of my deal for being here.  It looks like Rob is going to go the route that I really prefer, that being lots of code and less slides, so maybe he'll get a good review out of me yet!

  • TechEd 2003 -- Ask the Experts

    I'll be at TechEd in Dallas next week as one of the Experts for the Ask the Experts booth, along with some additional responsibilities for Microsoft.  Hope to meet some of you that I haven't already met at Microsoft or DevConnections, and I'll try to blog some also since I'm set up on http://techedbloggers.net.

  • WinForm UserControls in Internet Explorer

    Check out my latest demo that shows a Windows Form UserControl embedded in an ASP.NET Page.  It populates the ComboBoxes and DataGrid by calling a WebService that returns DataSets that are bound to the controls.  The data is automatically refreshed with the correct child DataSets whenever the selection in one of the ComboBoxes is changed.  Note that the Windows Form DataGrid automatically supports Sorting and Scrolling -- all without PostBacks!  Note that this does require the client computer to have .NET v1.1 installed locally since it uses Windows Forms.

  • Best Sandwich in the World

    I had the best sandwich of my life tonight -- the Gyro Melt at Gondolier Pizza.  Its a small Italian and Greek franchise in Georgia, Tennessee, and Florida.  Also truly wonderful pizza.  Sorry its not .NET related, but this was a really good sandwich!

  • DevConnections Conference Summary

    I went to the DevConnections conference in New Orleans last week.  I got to meet some great .NET folks for the first time, like DataGridGirl, Ken Getz, Don Kiely, and Keith Pleas, and saw some I'd previously met too, like Steve Smith.  I attended some great sessions given by gurus like Dino Esposito, John Lam, and Ingo Rammer.  Dino even knows who I am and said I get a credit in his upcoming book -- I probably shouldn't say that but its just too good to resist!  I also attended sessions by Scott Guthrie, Rob Howard, and Jeff Prosise, but they were in the ASP.NET track so they were things I already knew.  They were still great talks, but not as exciting for me, plus I had already met each of these guys last year at Microsoft.  I also saw my share of totally boring sessions, and some that were a complete waste of time, which really makes me think I that I could be a conference speaker.  The best parts for me were the keynote featuring ASP.NET v2.0, sessions from Dino, John, and Ingo, and a parade featuring a marching band to Pat O'Briens for all you could drink!  Next month its off to TechEd 2003 in Dallas to be one of the "Experts" in the Ask the Experts booth -- see you there.

  • ASP.NET Version 2.0 Public Preview

    I'm at the DevConnections conference in New Orleans this week and last night's keynote featured Scott Guthrie's first ever public demo of ASP.NET Version 2.0!  It looks like DataGridGirl beat me to the scoop about how cool the new grid control will be -- no code for paging and sorting and even editing.  The other feature he showed was the new sql dependency supported by output caching -- the data is cached as long as you set and is automatically invalidated when it changes in the raw data table.  He didn't show any of the other cool things that some of us have seen in private, but this was a really cool initial public preview.  By the way, it was obvious looking at Scott's demo that "Venus" is the codename being used for at least part of ASP.NET v2.0.

  • ValidateRequest in ASP.NET v1.1

    There's been a lot of discussion lately, both here and elsewhere, on the ValidateRequest feature in ASP.NET v1.1.  For those who aren't familiar with it, ASP.NET is basically checking all submitted form and querystring parameters, as well as cookies, for < and > to prevent script attacks.  Its easy to turn off this feature when you need to allow for this type of input, just set ValidateRequest=false in Page directive or in the web.config file, but you should then be taking the appropriate precautions in your own code.  Anyhow, the point of my post here is to APPLAUD Microsoft and the ASP.NET Team for the guts to add this new feature with it enabled by default (true)!  Yes, this is breaking a lot of people's sites, but that's because they simply didn't read the docs or perform any significant testing before upgrading to the latest and greatest.  That's right -- this feature has been documented all over the place since v1.1 came out in beta as something to watch out for when you upgrade.  So why didn't MS just make the default to be false and avoid all the hassle that everyone is now experiencing?  Security!  Everyone has been complaining forever that MS doesn't make security a priority and that products ship with insecure features enabled.  Well that's changed now -- as it should have -- so let's stop the grumbling simply because we were inconvenienced due to our own lack of due diligence.  Yes, this can be interpreted as a breaking change, but this should be expected when something is done in the name of security for now on -- get over it!

  • NUnit, Log4Net, and O/R Mappers

    I've been playing around with some of the cool .NET tools that have been ported from Java lately.  The simplest and most standard ones are NUnit for unit testing and Log4Net for logging.  I got NUnit v2.0 working no problem with .NET v1.1 and really like the idea of using it for automated unit testing.  On the other hand, Log4Net v1.1, which SharpReader uses, looks good, but I still haven't gotten it to actually work.  Finally, I've been testing Thona Consulting's EntityBroker, which is the first O/R mapper for .NET.  Object/relational mappers, also known as persistence frameworks, are well established in the Java world, but are new to most Microsoft developers.  They basically allow you to totally skip writing or generating code for your DAL (data access layer) and domain objects so you can focus on objects.  You just define your objects and use some attributes to map them to the proper database tables, fields, and relationships.  That's all -- and it really works!  I just gave a demo to a group of friends, and I never had to write any SQL or data access code.  It worked equally well with both MS SQL and Access, as well as both Windows Forms and ASP.NET, including databinding in both.  I'm definitely convinced this is something worth knowing about, since it radically simplifies development and maintenance.  I'll admit, however, that I'm still shaking a little since this goes against the normal stored procedure paradigm that I'm used to with Microsoft.  But even there, its worth remembering that Microsoft itself will be in this game soon with ObjectSpaces, so . . .

  • Microsoft's Free PocketPC Offer

    I just got confirmation that my free PocketPC is on the way (in 8-12 weeks).  If you haven't seen this yet and you have VS.NET or MSDN Subscription, then you need to check this out quick since time and supplies are limited.  Thanks Microsoft for the free PocketPC -- now if only it were a camera phone too.

  • Earthquake Rocks the SouthEast

    OK, so maybe we didn't exactly rock, but we did shake for a minute at 5:00 am EST here in the Atlanta area.  This is big news in the South since we seldom get noticeable earthquakes -- its actually the only one I've ever felt in my life.  This was a 4.9 on the Richter scale, centered along the Alabama / Georgia line near Fort Payne in Alabama.  Fort Payne is the location of the deepest gorge east of the Mississippi, and the fault line there runs along the Appalachian Mountains.  I estimate my house is about 75 miles from the epicenter -- I've seen several hurricanes and now an earthquake!

  • Atlanta DotNetWeblogs Lunch

    I had lunch today with some local Atlanta .NET gurus -- how's this for a group: Kirk Evans, Don Browning, Matthew Nolton, Wally McClure, James Shaw, John Croft, and myself.  That's 5 guys with Blogs here at DotNetWeblogs.com, along with 2 other really top-notch guys in the industry also.  Of course, Wally's really from Knoxville, but that will be a suburb of Atlanta in a few more years, so that's close enough to count.  We really need to get some girls next time though -- hey Dana, do you have lots of blonde friends that can join us next time.  :)  So who else is in or near the Atlanta area?

  • Windows 2003 Blue Screen of Death

    I've had my computer at home running Windows Server 2003 RTM for a few weeks now and I finally got my first Blue Screen of Death last night!  I haven't even seen one on a Windows 2000 system in years, so it really surprised me when it did occur, but it was a lot nicer and informative.  It had larger print and less information, although what was there was more helpful, and I could easily spot IRQ and Alcatel on the screen.  So to me it seemed obvious that this was due to my DSL modem somehow, which really means this was more of a hardware driver problem than a Windows 2003 problem.  After the automatic reboot after 60 seconds, I was prompted to submit a report to Microsoft, which was quickly analyzed with an online response.  The web response very clear stated the problem was my Alcatel modem, in plain English of all things, and gave me a link to download the latest driver to fix it.  I was very impressed, although I still think that the whole process would not have been so nice to experience for my wife or kids.  Also, the auto reboot would have left me wondering what they were talking about, although I still think that this is the appropriate behavior for a server.  I don't really know if anything can be done to improve this any better, but a couple of my colleagues are debating this today -- so what do you think: are Blue Screens acceptable or is there an alternative?

  • Renewing Domain Names

    I have been using BulkRegister.com for my domains for a few years now.  They added a new feature this last year called auto-renew, so I eagerly setup my domains to auto-renew.  Apparently, this also has the side-effect that no emails are sent at your normal renewal time, since it is supposed to happen automatically.  All the sudden this morning my domain stops resolving while I'm making some minor changes with my web-host's help, and it ends up having nothing to do with my web-host afterall -- BulkRegister just did NOT auto-renew my domain.

  • Workaround for Bug in ASP.NET Version 1.1

    Changes in ASP.NET version 1.1 can generate a postback script with a bug in it.  It is particularly a problem for anyone using many of the page template solutions.  I posted both C# and VB workarounds on the ASP.NET forums, and here's the C# code:

  • AppSettings can Reference an External Config File

    I recently discovered that the app/web.config file can reference an external config file to get some or all of its appsettings.  You don't have to name it with the extension config, but that's best since its protected from anyone browsing to it, and since it has the support of the VS.NET editor.  You can have keys that are only defined in the external file, or you can override keys that were already defined in the app/web.config file.  One great use of this would be to store your database connection string, or other settings that may vary from development to testing to production.  I did notice that changes made to the external config file are not automatically picked up until the app restarts, but thats easy to force by simply editing the real app/web.config.  By the way, this does fully work in the original version 1.0 .NET framework, although it was apparently undocumented until 1.1.  Sorry if someone else wrote about this -- I can't remember where I first saw this tidbit recently -- I think it may have been in the last MSDN Magazine but I'm not sure.

  • Paul Wilson starts Blogging

    It seems that everyone else in .NET has a Blog, so I am submitting to this unstoppable force.  Those that follow ASP.NET probably know me already -- the rest of you are asking who am I now.