Tuesday, May 30, 2006

Microsoft Application Blocks

Microsoft Application Blocks form a collection of ready-built 'clumps' of code which solve common problems such as security management, data access, logging, etc. They are the tangible result of the Microsoft Patterns and Practices advice: all of it sound and solid.

John Jakovich, one of the 4 Guys From Rolla, gives a useful An Introduction and Overview of the Microsoft Application Blocks. He summarises the utility of the Application Blocks thus:

...you don't have to worry about the tedious details required to return a DataReader or write an exception to the System Log. This allows us to concentrate on the business logic in our applications.
I have written too many logging frameworks in the past: it's boring above all else. I just want to log exceptions in a thread-safe manner, with a unique ID.which I can display to the user if necessary. If someone (i.e MS) has already written code to do (most of) this, then fine - I'll use it.

The Security block is particularly useful for ASP.NET 1.1, where security and profile management is not as simple as in version 2.0. All that boring stuff about storing Role information in cookies? Solved! Better still, any security holes will be fixed by MS. Again, more time to concentraste on business logic.

Design Guidelines for Class Library Developers

The Application Blocks tie in nicely with a set of guidelines from MS on class library development. They include advice on:

  • array usage
  • exposure to COM
  • casting
  • threading
and several other subjects. This is basically just a gloop of Common Sense, but well worth a read.

MBR BootFX Application Framework

An alternative to the MS Application Blocks comes from Matt Baxter-Reynolds (he of DotNet247) in the form of BootFX:

The MBR BootFX Application Framework is a best-of-breed application framework that we offer to all our clients who engage us to develop software applications or software components for them. It's designed to give us a "leg up" on new projects by providing a tried and tested code base for common software development activities.
There are lots of goodies there, including Object Relational Mapping (ORM), and support for SQL Server, Oracle, and MySQL databases. To top it all, it's open source, via the Mozilla Public Licence 1.1. I met Matt 18 months or so back at a seminar run by Iridium; very personable guy.

Labels:

Saturday, May 20, 2006

Memory Use in Firefox

Firefox is great in many respects, but it hogs memory: closing down tabs does not seems to cause Firefox to release memory as you might expect. Once FF has grabbed a few hundred Mb, your PC can slow down noticably. Having to restart the application seems like an indication of a bug to me* (though the FF developers are pretty gung-ho about it).

Here is a collection of tips to help reduce Firefox memory usage - most involve about:config hackery, and some work only on Windows (due to the way in which the Windows kernel will page out memory of minimized applications).

Check this out: This behavior has appeared somtime after 1.0 - unfortunately, I can't be more precise... - somtime [sic] after 1.0?? That is a long-running problem.

Labels:

Mail: Enabled

At this point, I am inclined to decide that SMTP stands for "Stoopid Mother Truckin' Program", after some frankly bizarre shenanigens with SMTP on one particluar server ;-). Thankfully, MailEnable came to the rescue. This is a well-engineered bit of software, and best of all, it's free, even for commercial use (Enterprise users pay for high-end features).

The difficulties arose with a DotNetNuke installation, incombination with some stubbornly unconfigurable SMTP services. FOr example, the main SMTP server on the machine could not be configured to talk to web applications, and a second SMTP server program was available to do this, on another port (i.e. not port 25).

HOWEVER, it turns out that DNN does not allow you to specify an SMTP server on a port except port 25. In other words, a setting like this will not have the desired effect:

localhost:587

The port is ignored by the System.Web.Mail.SmtpMail class as used by DNN. I checked the source for DNN 3.2.2, and the port number is NOT parsed out from the servername string. This seems to me to be a serious limitation. A line or two of extra code would enable mail sending on alternative ports: parse out the port number, and if its there, set the port explicitly for the mail message before sending:

' line 152 or Mail.vb:

' external SMTP server
If SMTPServer <> "" Then

' TODO: parse out port number here

    Web.Mail.SmtpMail.SmtpServer = SMTPServer
        Select Case SMTPAuthentication
            Case "", "0" ' anonymous
            Case "1" ' basic
                If SMTPUsername <> "" And SMTPPassword <> "" Then
                    objMail.Fields("http://schemas.microsoft.com/ cdo/configuration/smtpauthenticate") = 1
                    objMail.Fields("http://schemas.microsoft.com/ cdo/configuration/sendusername") = SMTPUsername
                    objMail.Fields("http://schemas.microsoft.com/ cdo/configuration/sendpassword") = SMTPPassword

' TODO: Insert port here...

                 End If
            Case "2" ' NTLM
                    objMail.Fields("http://schemas.microsoft.com/ cdo/configuration/smtpauthenticate") = 2
        End Select
End If

So I was left having to use a server on the default port 25, but with only a single machine it's tricky to get SmartHost relaying working properly (in fact, it might be impossible - I haven't checked the RFCs).

In the end, I disabled the two existing SMTP servers, and installed MailEnable from http://www.mailenable.com/standard_edition.asp - it is very easy to use and configure. Crucially, it can listen on two different ports, and had no limitation with respect to web applications.

I highly recommend it if you are having similar problems.

Friday, May 19, 2006

Matt Cutts on SEO

...And speaking of putting a dash in URLs, hyphens are often better than underscores. african-elephants.html is seen as two words: "African" and "elephants". african_elephants is seen as one word: african_elephant. It’s doubtful many people will be searching for that...

http://www.mattcutts.com/blog/ guest-post-vanessa-fox-on- organic-site-review-session/