Sunday, September 25, 2005
I'm testing Kevin Daly's Diarist app on my Axim. I plan to do a live blog demo at SAF from my PDA, if the wi-fi works in the room.

I used the first version a little, but this more recent relese is much improved. Great job and thanks, Kevin!
Sunday, September 25, 2005 11:12:50 AM (Eastern Standard Time, UTC-05:00)
 Friday, September 16, 2005
I'm thrilled to be selected as a Galley Reviewer At Large for "Naked Conversations", a forthcoming book by Shel Israel and Robert Scoble (yes, that Scoble, as if he needs the link).  "Naked Conversations" looks into how blogs are changing the way businesses talk with their customers.  I'm speaking at the Society of American Florists convention in two weeks on using a blog as a marketing tool, so this is very exciting to me.  In addition to this very blog, I also run The Weddings Blog at http://www.bloomeryweddings.com/blog, and my new site Florist Blogs at http://www.floristblogs.com.  I'm stoked, thanks to Shel and Mr. Scoblizer (can I call you that?) for the opportunity.
Friday, September 16, 2005 3:42:26 PM (Eastern Standard Time, UTC-05:00)
 Wednesday, September 14, 2005
The date for the Philly VS 2005 / SQL Server 2005 has been changed from December 13th to Nov 17th.  More info as it becomes available.
Wednesday, September 14, 2005 7:35:23 PM (Eastern Standard Time, UTC-05:00)
 Friday, August 26, 2005

Turns out, it's a crappy night for a lot of people.  I've heard from several people who would like to attend but can't due to school orientation, classes, etc.

So, the Augist BADNUG meeting is postponed.  We'll make it up to you, we promise.

Friday, August 26, 2005 9:40:07 PM (Eastern Standard Time, UTC-05:00)
 Wednesday, August 24, 2005

I've had the priviledge of reading Dan Egan's Building Websites with VB.NET and DotNetNuke 3.0 recently, and there are other reviews out there, I figured I'd chime in also.

Overall, I think this is a better book for the DNN beginner than the WROX book (see http://www.rjdudley.com/blog/ReviewProfessionalDotNetNukeASPNETPortals.aspx), and is more suitable to the non-technical people who may be administrating the portal, but not developing for it.  It's not perfect, but I think these users will appreciate some of the extra work Dan put into this book.  Most of the book is written as if you are building a coffehouse locator together, so much of the book flows from one topic into another, and is written with a point.

Chapter 1 starts you with an overview of portals in general, and explains why DNN is a very good choice.  Dan also lays the groundwork for the portal you'll be building (Coffe Connections), and demonstrates a technique called "user stories" than can help design an effective portal.

Chapter 2 covers installation on a local machine, which I think many users may not need to worry about.  It's not something everyone needs to know, but it's a good idea to familiarize oneself with the information even if you won't be performing the installation.

Chapter 3 really gets into the meat of DotNetNuke.  It's probably the best coverage of users, roles and pages and how they operate in DotNetNuke I've seen.  There is a chunk of very technical information regarding the Membership Provider; if you're not developing for DNN, you can safely ignore this section and not miss anything.  Useful information for all in this chapter includes how to control user registration, how to create pages and control access to them using user roles.  This chapter is written using the user stories created in chapter 1.

Chapter 4 is great.  This chapter covers all the standard modules included with DotNetNuke, with a simple explanation.  Coffee Connections isn't tied into this chapter too tightly, but it fits.  Dan went above the usual descriptions of the modules, and includes some "Practical Purposes" of each module, and how to administrate the modules.  This is a very useful chapter for anyone who will be working with DNN.

Chapter 5 covers the host and admin tools.  This seems a little out of order, but contains great information on how to administer your portal.  It covers the difference between 'host' and 'admin' logins, how to change site settings, upload new images to be used on the site, view logs and a few other features.

Chapters 6 and 7 get way off course in the context of building Coffee Connections.  They contain some very detailed technical information, more suitable for the developer than administrator.  The non-technical administrator can skip over these chapters and not miss too much.  For the developer, chapter 6 covers caching, config files, providers and other detailed information you'll need to develop custom modules.  Chapter 7 is an introduction into building custom modules (called "Private Assemblies") in DNN.  Included are discussions of setup and adding the proper user controls (you need at least 3 ASCX files--a View, an Edit, and a Settings), packaging your module and adding it to a site, and creating a business logic layer and a data access layer using the database provider module.  Extensive code examples in VB.NET are provided.  The sample module you're building is a custom Coffee Shop Listing control for Coffee Connections.  This chapter alone is nearly 1/5 of the book's almost 300 pages, and is very detailed.

Chapter 8 covers creating DNN skins and containers, and how to apply them to your site.  You create Coffee Connections' skin using Visual Studio, and ending up with an HTML and token based skin.  This is a short chapter, and doesn't go too deep into skinning (but compared to custom modules, skinning isn't a deep subject anyway), but you'll be able to create DNN skins after reading this chapter.

Chapter 9 lists some must-have modules, where to find them and how to use them.  Another great chapter, and I now use several modules I didn't know about until I read this chapter.

Chapter 10 covers deploying your portal to a live site, using FTP and SQL Server Enterprise Manager.  Presumably, many readers will already have passed this point, but it's good for the beginner ready to go live.

Chapter 11 covers one of DNN's best features--supporting multiple portals from a single installation.  This is exceptionally useful for a school or other setup where one parent portal may be the gateway to the portals of other departments, etc.

Chapter 12 covers the Provider Model as its implemented in DNN.  If you're new to the provider model, DNN is a very complicated example to try and learn from.  Chapter 12 will bring you up to speed with the theory of the provider model so you'll be able to work with DNN's implementation effectively.

Overall, I think this book is better for the non-technical user than WROX's book, but adds technical information in a few spots that can distract such a user.  If you're a hard core DNN developer, DNN's book is probably the better technical manual (being written by the DNN Core Team, you'd expect that), but this book makes an excellent secondary reference.

Wednesday, August 24, 2005 9:33:52 PM (Eastern Standard Time, UTC-05:00)
 Monday, August 22, 2005

The design and layout of pages in StoreFront 6 can be somewhat controlled through their design and configuration tool.  When the page is rendered, the values you set in the configuration tool overwite the defaults set at design time, generating the final layout.

As it turns out, the physical layout of the pages is controlled by two tables.  One, named PageTable, is the outer table, and its defaults are not overwritten.  PageTable contains a single row, with a single cell, no borders, 100% width.  The inner table, PageSubTable, is the one whose settings are overwritten.  Maybe there's a good reason for this, or maybe LaGarde didn't read the "Good HTML" chapter in their books.  Whatever the reason, with some small tweaking, you can use PageTable to your advantage with more stylized layouts.

Rather than change the tag on every page, it would be nice to assign PageTable a CSS class, so we can control its appearance using stylesheets.  Rather than edit each and every page, we can use FrontPage's "search all pages" feature for the string 'id="PageTable"', and edit the tage ourselves.  Unfortunately, not all the tags are the same, or we could just use the Replace feature as well.  There's less than 50 instances you'll need to edit, so it's not so horrible. Bare minimum, the TABLE tag should have an id attribute and class attrribute.  After this, you can control its appearance through CSS.

If you want to tie PageTable's appearance into the SF/FP configuration tool, you can skip the editing of each tag.  Instead, open CWebPage.vb, and find the sub named SetDesign (around line 289 in my version).  Several lines into this sub is the block of code which overwrites PageSubTable's default values with the ones you set through the designer.  Make a copy of this block, ad change PageSubTable to PageTable.  This will apply the designer settings to PageTable.  You can comment out PageSubTable (you really shouldn't apply the settings to both tables, the results could be a little unexpected), or change it to suit your needs.

Monday, August 22, 2005 10:12:29 PM (Eastern Standard Time, UTC-05:00)
 Sunday, August 21, 2005

Don't let anyone ever tell you LaGarde's StoreFront produces clean HTML.  Far from it!  Most modern browsers will work around the duplicated attributes, missing tags and non-compliant HTML.  But, if your site is targeted to users who may be using assistive devices, you or your technical staff have a lot of cleanup work ahead of you.  Additionally, some of this non-compliant HTML affects your design in very annoying ways.

One problem StoreFront has is with the TopSubBanner.  To start with, it's named TopBar in the configuration tool, but the files are named TopSubBanner, and the documentation refers to TopSubBanner.  Maybe they'll invest in a proofreader for version 7.

The display of TopSubBanner is controlled by a checkbox in the configuration tool.  This checkbox determines whether or not the contents of TopSubBanner.ascx are displayed.  So far, so good, right?  So much you know.

The display of the control is actually handled by setting the visibility of the table cell.  The control is still loaded and processed (a waste of time and CPU cycles), but visibility is controlled at the HTML level.  You can see in this snippet below:

       <tr>
        <td class="TopSubBanner" id="TopSubBannerCell" width="100%" colSpan="3">
         <!-- Top Sub Banner Start -->
         <uc1:topsubbanner id="TopSubBanner1" runat="server"></uc1:topsubbanner>
         <!-- Top Sub Banner End -->
        </td>
       </tr>
       <tr>

If you choose to display TopSubBanner (or TopBar), this is all well and good.  However, if you turn off the display, when your page is rendered, the final HTML is thus:

   <tr>
   </tr>

An empty pair of TR tags.  Not compliant at all!  The effect differs with the browser.  In some older browsers (and don't think people aren't still using them) this will throw your page layout way off.  IE will compensate by inserting the missing TD tags, leaving you with a blank row (1 px in height, unless you've added additional padding or spacing or such)--see below.

FireFox ignores the tags, which in this case is a better way to handle it.

There are a couple fixes, but unfortunately you will have to make these changes on every page.  One simple solution, if you won't be using the TopSubBanner at all, is to turn off the visibility of the TR tags with a simple HTML modification:

       <tr runat="server" visible="false">
        <td class="TopSubBanner" id="TopSubBannerCell" width="100%" colSpan="3">
         <!-- Top Sub Banner Start -->
         <uc1:topsubbanner id="TopSubBanner1" runat="server"></uc1:topsubbanner>
         <!-- Top Sub Banner End -->
        </td>
       </tr>

This will prevent the blank TR tags from showing, and correct the IE rendering of the code.  Another fix that will allow toggling of the TopSubBanner with proper display is a little more involved.  This might be overkill on a single site, but for developers with the XE version, you might want to update the source files which are copied when a new store is created (be sure to keep backups).

First, give the TR tags an ID attribute:

   <tr id="TopSubBannerRow">

Then, open the file CWebPage.vb, and do a find for TopSubBannerCell.  The first entry (around line 327 in my version) is what sets the visibility of the table cell.  Inside the If...Then block, add the following code:

     dim TempRow as HtmlTableRow
     TempRow = CType(PageSubTable.FindControl("TopSubBannerRow"), HtmlTableRow)
     TempRow.Visible = False
     TempRow = Nothing

Compile the code and load your page.  The page should display properly, and if the TopSubBanner is set to not display, you should not have an empty set of TR tags.  All you need to do from here is give every TR tag which contains the TopSubBannerCell the same ID (FrontPage's Find command can be used to search all files for TopSubBannerCell, which makes ife easier).  When done, compile and you should be good to go.

I'm not sure who's supposed to check this (if anyone), but this never should have left the farm.

Sunday, August 21, 2005 8:32:33 AM (Eastern Standard Time, UTC-05:00)
 Friday, August 19, 2005
If you're setting up a new store through LaGarde's wizard in FrontPage, and you get a "Database does not exist error", check the user ID and password if you're positive the database exists.  "Database does not exist" is a generic error message-StoreFront doesn't tell you if your credentials are wrong, or if the server is stopped, etc.
Friday, August 19, 2005 9:38:41 PM (Eastern Standard Time, UTC-05:00)

This month's presentation will be held at BC3's Cranberry Campus, behind Costco in Cranberry Township, PA.  It's easy to find, so if you've never been here before, map it from your location and see how convenient we are!

Tool of the Month ("use one, don't be one")

Would anyone be surprised if we made the claim that your workplace probably runs on caffeine and Microsoft Excel?  Probably the most common task developers have is taking information from a datasource and getting it into Excel workbooks.  Rich Dudley will demonstrate one of his favorite tools, Carlos Aguilar's free ExcelXmlWriter.

We'll also briefly review how to use the blog features on the BADNUG website.

Skinning DotNetNuke

One of the major features of the DotNetNuke portal is its skinning capabilities, yet this capability is poorly documented in both books and the included documentation.  Following on our previous "Intro to DNN" meeting, Rich Dudley will walk through creating a skin, and share some pitfalls he's encountered in working with www.chocolatefountainnetwork.com and www.daysinnbutler.com.

SWAG

We have two copies of Daniel Egan's "Building Websites with VB.NET and DotNetNuke 3.0", and all the Visual Studio 2005/SQL Server 2005 Beta 2's you want.

More information: http://badnug.org/Home/tabid/36/ctl/Details/mid/371/ItemID/1/selecteddate/8%2F31%2F2005/Default.aspx

Friday, August 19, 2005 7:26:29 PM (Eastern Standard Time, UTC-05:00)