And overall I think it went quite well. My Suave Sessions session was attended by a whopping ONE PERSON! I seem to recall his name is Mark, and he runs the Ft. Worth DNUG, so kudos to him for picking a great session! I know it wasn't sexy, but good session handling is something we should all be concerned about, certainly more so than getting an intro to DNN by the great Shaun Walker (who was presenting at the same time and whom I blame for stealing all my potential attendees). The good news is that it's recorded and Wrox will be hosting it on their web site, so all of you folks who made the unfortunate decision not to attend can still get the session. :)

The EntLib session didn't go quite so well. Apparently, I should really check to ensure my old demos work before the day of when I give a repeat session, he thought, embarrassed. So I apologize again to all the troopers who toughed out the session with no running demos. Thankfully, the core concepts could still be expressed; it just wasn't as fun as it could be.

To use it, configure ELMAH as usual. If you want to use the EntLib logger, use GotDotNet.Elmah.EntLibErrorLog as the error log type instead of the standard SQL one.

To use the custom exception handler in EntLib, you just need to choose it in the EntLib GUI by loading the ELMAH DLL and picking the GotDotNet.Elmah.ElmahEntLibExceptionHandler as the handler type. It should look something like this in the standard config:

Other than that, I have to give some big kudos to David Walker and his team for putting the conference together. I've spoken at a number of code camp activities, and this was definitely one of the best organized and professionally done. I can't help but think that their not shunning sponsors (like Infragistics) helped in making it better. While I appreciate the academic ideal of trying to keep the code camp focused on devs sharing with devs, I think it is perhaps not in the best interests of anyone to shun sponsorship. The vendors who sponsor conferences like that have tools that are supposed to make devs lives better, so in my opinion, it only makes sense to welcome them in as long as it is done tastefully.

And no, I didn't just start thinking this now that I'm working for a vendor; you can ask Joe Healy--I was pushing for sponsors when I was helping organize the Tampa code camp. After all, it's not like Microsoft's stuff is free, and if the conference is about using Microsoft's technologies, why limit the vendor sponsors and topics to Microsoft? Microsoft does a lot to make software development better, and we all welcome that. I'm just suggesting the same thinking be extended to other companies who do the same thing.

Anyways, I didn't intend to rant about that really; I mainly wanted to say that David et al did a great job. It was good to visit my hometown again, and while I didn't make it out to Ron's Chli & Hamburgers Too for that sausage chili cheeseburger I've been missing, I still thoroughly enjoyed the visit. Tulsa certainly has been growing its dev community, and I hope they continue to do so.

That's it. Hope everyone's having a great day! Sorry bout the delay in getting this up.

A while back, I decided I needed to add browser-specific capabilities to my web application. While there are those who advocate using capability testing rather than browser sniffing, there is at least one good reason to prefer sniffing. That is that you want to be sure your site works as well as possible in all browsers but you want to take advantage of capabilities only available in some.

In itself, this is not a reason to prefer sniffing; the key, however, is that you "want to be sure," which means testing; otherwise, your stuff may or may not work, which isn't very reassuring. If you don't have the resources to do testing in all target browsers or the time to develop Javascript workarounds based strictly on specific capability detection, then sniffing is a good alternative because it allows you to only use "advanced" functionality in the browsers that you have tested and fall back to standard functionality for the rest. This of course assumes you have architected your stuff in such a way as to make downgrading possible and still offer fairly equivalent services in a less rich presentation. That in itself can be challenging and is far too involved and a bit off topic for this post.

So let's just assume you can fall back. The next question is where you do the downgrading. You can do it in Javascript, which if you only want to alter some functionality on the client side is fine, but if you want to, say, avoid Javascript altogether or emit significantly different script based on browser, the choice is to detect on the server and act appropriately.

Thankfully, most web server technologies support browser sniffing, and ASP.NET has expanded on and improved on this with their control adapters in 2.0. But you can still use the old browser capabilities approach. To do this in 2.0, you simply add the special App_Browsers folder to your web site or project (if you're using WAP). In there you just add a file with the .browser extension, and you can put in your own custom browser capabilities there. Here's an example:

That's it, if all you want to do is extend the existing browser definitions. If you want to define new ones or to find out more about the browser schema, you can consult the MSDN docs. Using refID just lets you reference an existing definition and extend it. You can view existing definitions that ship with .NET in the Framework CONFIG\Browsers directory (e.g., C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers), but be sure not to modify those directly to avoid your customizations being overwritten with later patches.

Note: You might be tempted to set a default value using refID="Default" as the docs suggest, but I've confirmed that there is a bug that causes the default to actually overwrite the more specific settings. Microsoft tells me that they have scheduled a fix for this bug and that it will be released with the next Service Pack, but if you need it sooner, you can create a support incident and get a hotfix. So the workaround is to not use Default and have your code check against null to determine default. It's not the nicest approach, especially when you're using a Boolean value that would be better to just parse to bool, but it's not a travesty either.

You can then test for the capability in your code like so:

this

.Page.Request.Browser["supportAjaxNavigation"] == "true"

and do your downgrading if need be. Of course, if you have some serious alternative rendering that needs to occur, you should consider using control adapters (especially the PageAdapter) to avoid complicating code with lots of conditional statements.

I don't watch the news. I figure what's important will filter down to me through one avenue or another, and it generally does (as far as I know hehe). Recently, Pope Benedict XVI made a comment in a university lecture that has caused quite the controversy. Naturally, the controversy wasn't intended, and the Holy Father, numerous bishops, and other Church officials have quickly done what they can to calm the situation down.

It appears that, as is often the case in such brouhahas, words were taken out of context, causing much consternation in the Muslim world and, possibly, even some violence on its account, such as the murder of a missionary nun in Somalia. Although I know I shouldn't, I still am dumbfounded and in disbelief when confronted with such inhumanity and evil as a group of individuals who would gun down a woman who has devoted her life to relieving ill and suffering around the world.

It does make one wonder if the words of the Byzantine Emperor that the Pope was quoting did not have some truth to them. Looking at the startling acts of violence, inhumanity, and yes, evil, perpetrated in the name of Islam (such as 9/11, the London bombings, not to mention those in the Middle East) and those acts which have been thwarted (such as the shoe explosive, recent liquid explosives, and more that we probably don't know about), outsiders such as myself are forced to wonder if the central message of Islam is not such evil and inhuman activity. And then a senseless and violent killing in Somalia only serves to harden such suspicion.

Yet despite all of this evidence, forgetting the unknown, countless lives tossed aside during the jihads that spread Islam across the Middle East, Africa, Turkey, and Persia in the first milennia, let us with good faith assume that the Emperor was not right (though surely he was more learned on the subject than I). Let us assume that there is some new good that Muhammed brought to religion. Even so, the point at issue is still a matter of lack of context.

The Holy Father was quoting the Emperor not as an endorsement or affirmation but as an illustration. He even says that we are "astounded" at the Emperor's "brusqueness." Pope Benedict continues, as Manuel II Paleologus reportedly does, showing that this is a hyperbole leading into a discussion about the incompatibility of violence with the nature of God (and reason). I've read the whole text, and while it isn't immediately obvious how the consideration of the Emperor's remarks fit into the greater dialogue other than, as the Pope says, "a starting point," it does fit with the broader theme of giving reason a greater place in human affairs, both in religion and faith and in the university, which these days has tended to want to limit reason to scientific thought stemming from Cartesianism and empiricism.

I believe the parallel between the reference to Islam and the reference to the developments in modern thought is that in both reason and God are seen to be somewhat, if not wholly, incompatible. With Islam, as His Holiness expounds, there are developments which say that faith is something other than and often in contradiction to reason; such a stance makes believing that conversion by the sword an acceptable means because reason is opposed to violence. The Holy Father also notes similar developments by some in the modern Christian tradition, so we see that it is not simply a criticism of Islam on this count.

Similarly, the modern scientific worldview sees anything that is not mathematical or empirically observable and verifiable as suspect, subjective, or wholly false, not in line with what is perceived as "reason." In both cases, the Holy Father is advocating a wider understanding of reason and its applicability to religion and faith--that there are valid, useful, indeed critically important modes of reason outside of the mathematical and empirical, that the mathematical and empirical depend on these, and that reason is in accord with them and with God's nature.

Thus we see a dual consideration: on the one hand, a critique of those who would push reason out of the sphere of faith and on the other those who would push faith out of the sphere of reason, leaving them as disparate spheres of life, more often than not in conflict. This is not the Catholic (read, historically Christian) way of understanding the relationship between reason and faith, and it is a greater understanding of and appreciation for the interdependence of faith and reason that the Pope is advocating, seeking more open and rational dialogue on both fronts.

All that said, I must say that I think the point could have been made without restating the controversial quip from Manuel II, but there I think we simply see the intellectual side of the Holy Father--the university professor who curiously relates how reading a text struck him and what it made him think of. Given the context of the address (a university lecture), this seems wholly likely.

It is highly unfortunate that this has been blown out of proportion and taken out of context, even to the point of violence. Hopefully, Muslims will see this as an opportunity to prove the Emperor wrong and make the noise of the good in Islam louder than the noise of those who would continue to try to spread and defend Islam through violence.

Hi all, I just wanted to spread the word about the Tulsa TechFest next month. As some of you know, I originally hail from Tulsa, OK, and I'm glad to be going back to my home town for this conference. I'll be doing one session on EntLib for ASP.NET (modified version of my TechEd talk) and one on professional session handling (talking about things like HTTP modules, handlers, custom controls, etc. to gracefully handle sessions in ASP.NET).

Of course, I'm just one of many speakers who'll be presenting on a large variety of topics, not just .NET. They'll also have vendors with lots of goodies--I know Infragistics has some neat giveaways planned. So if you're in the region, you should definitely check it out. It looks like it'll be the best tech event that the heartland has seen. Kudos to David Walker and the other organizers.

I'm pleased to announce that Brendan Patrick joined clan Little on this side of the womb today at 2:29. He's a healthy boy of 10 pounds, 5 ounces, and measures in at 21.5 inches. Christiane (mom) is doing well with no complications.

I just ran across what appears to be a nasty bug in Firefox today. Without explaining why I'm doing it, suffice it to say that I just wanted to call a script in a parent frame (from an IFrame) that ultimately results in an XMLHttpRequest. It works in IE 6 and 7, but in FF 1.5, it just doesn't. In fact, the result of the request seemed to be the result of the previous request that was executed, and to make it more interesting, the responseXML returned null while the text showed the results of the previous call.

Oddly enough, no errors were thrown--it acts like a regular call with an error free response; it just doesn't actually seem to perform the request and in the meantime loses its XML document.

Anyways, I was starting to despair when I ran across this blog post. It seems I'm not the only one who's bumped into this one (or some variation), yet I must say it was hard to find that blog entry based on my searching. So I want to raise its visibility with this post.

For me, the solution was simply to use window.top.setTimeout(myfun, 50). That appears to give FF the context it needs to properly execute the request. But of course, that breaks it for IE, so you gotta do a check for Firefox (e.g., if (navigator.userAgent.indexOf('Firefox') != -1)) do the timeout if so; otherwise, make the call directly.

I know the job market for .NET devs right now is really hot, and those with experience typically have a lot of choices. So let me add another choice to the list. Yes, I'm talking about Infragistics. No, they're not paying me to say this. Well, yeah, they're paying me, but not to say this. Rather than just stick a job description out, I hope you'll let me tell you why I like working for Infragistics. I've been here nigh on four months, and I'm still liking it, so that's something.

Why I Like Infragistics

I've worked at more than my fair share of companies in my career, sometimes consulting, more often as an employee, and this is the best company I've worked at. Sure, at other companies there are good people; I've worked with many. But Infragistics not only has good people, it is a good company--it has good culture and actively works to improve it.

It's not just that it is a software company, though I think that helps. I've worked at more than one commercial software company, and the cultures between them are as starkly contrasted as light is from darkness, happiness from sorrow. It's not just its size because I've worked at others about our size, larger and smaller. It's not just that the dress code is as relaxed as it gets, though that's nice.

Other companies talk about passion, but here it is ingrained in the culture. People care about what they are doing and strive to do their best, and it starts at the top. Probably no one here is more passionate about the company than our CEO and the rest of our management team. And the enthusiasm spreads into every department, even to folks like me, in case that wasn't obvious. For me, that makes all the difference--working with positive, enthusiastic, and creative individuals at a company that fosters that kind of an environment.

For those who are still new enough in their career to think that stuff like this isn't important, that salary is all that matters, I hope you can take it to heart from me that probably more than anything--more than salary, more than benefits, more than location--the culture of your company is what makes or breaks whether or not you are happy in your job. Now I'm not naive enough to think that our culture fits everyone; it won't. But if you are a motivated and talented individual who likes to be challenged, likes to make a difference, and wants to get experience working with, learning from, and sharing your knowledge with other similar individuals, Infragistics just may be the place for you.

Being a community guy, I also like that Infragistics has done and is doing a lot of community support. We host the local .NET and Java user groups at our HQ. We often sponsor and send speakers to code camps and tech fests. We sponsor user groups worldwide, and if you like being involved in the community, Infragistics goes out of its way to help you in that. And we're always looking for new ways that we can support our communities, so if you have ideas, shoot them over to me.

Of course, being a geek, I like that Infragistics gives me the opportunity to work on the latest and greatest technologies. If you're stuck in a job where they're taking the "safe" course of not upgrading, you won't face that problem here. In fact, we're challenged to be and stay on the edge of the technological spectrum.

And as an aesthetically sensitive person, I appreciate that Infragistics provides a good working environment. The building is nice; the work area is nice; the equipment is nice, and there is a degree of freedom to make your space your own. If you want to have medieval action figures along the tops of your cube (like I do), you can do that. Or if you are into feng shui, so be it.

In terms of location, I think it's great. I've already blogged about that. We're now rounding into fall (already!) and our hottest temps this summer were a few days of maybe a hundredish. Coming from Tampa, I can now avow that it in fact does not get (or at least seem) as hot and humid here--it was stickier when I left Tampa in early May than it got here the entire summer. And you don't have to worry about hurricanes really. Of course, Wally recently counseled me that I might want to wait until I've lived through a winter before I sing the praises of the weather, but I'll take a livable summer and cold winter any day over unbearable, six-month-long summers and mild winters (that don't really even qualify as winters). I've always said, you can bundle up as much as you need to, but you can only take so much off!

But again, like company culture, I know there are different strokes for different folks (Joe!). :) The only reason I mention this is to counteract the common misconception about New Jersey being an undesirable place to live. If you're into culture, plays, or clubbing, New York City and Philadelphia are just a stone's throw away by car or train. If you like small town family feel, we've got that, too; I just went to a butterfly festival with my family a couple weeks ago, and they've had others (like insect, peach, etc. festivals all over the place). If you like history, you can't go far without running into some monument commemorating where Washington did something or where, e.g., some of our founding fathers went to college. Shopping? Route 1 is the place to be (or, again, NYC). Like to travel? The Newark airport is one of the largest in the US. Compared to the other places I've lived, it fares quite well on the pros v. cons. So if the "armpit of the US"/Sopranos stereotype is all that's stopping you from joining us here in central Jersey, don't let it!

What's Available

Now that I know you're chomping at the bit to work for Infragistics, I guess it wouldn't hurt to mention the positions we're hiring for. You can see a full list of open positions on our careers pages. You'll need to use the quick links to see the list by location. Yes, we do have more spots open than at our HQ here in NJ, and if those appeal to you, the more the merrier. But looking specifically at our HQ openings (and since this is a developer-oriented blog), I'll highlight the Sr. R&D Engineer position for our .NET web controls. We need someone who is very strong with web UI development and, of course, .NET. It's a tall order, but I'm sure you're out there. If you think you're an ASP.NET web UI expert, you should definitely consider it. That position has challenges that most of us devs never have to face.

We also have some other dev positions in the internal systems department, so if the R&D position doesn't seem like it would fit you, you might check those out. There is a lot of mobility possible in this company, so you might start in internal systems and then move to other areas that you later find more interesting, e.g., evangelism, R&D, etc., as positions become available.

It's certainly a fun, interesting, agile, and challenging place to work. All of these positions involve cutting edge technologies, working with great people, in a great culture. Maybe you see some other position that's open and interests you, or even if there isn't a perfect fit on the web site but you think you have something to offer a company like I've been describing, you can just send me your resume, and I'll ensure it gets into the right hands. Yes, we do have a referral program, and yes, I will take you out to lunch if you get hired on as my referral. I had to mention that because, hey, you wouldn't believe me if I said I'm just doing it to help my company (no matter how true it is). :-p No more waiting. Do it!