Monday, October 03, 2005

One of the best sources of content ideas are the statistics for your website.  If you run your own website, your host should have a statistics package that gives you summary information, or you can look in the raw log files.  What you want to find are the search engine referrals--the phrases people typed into the search engine that led them to your site.  You want to dig through these search phrases, and find ones that relate to your business.  By focusing a blog posting on these phrases, you'll draw people to that blog post when they search for these terms.  Make sure you link to specific products or categories on your site.

If you remember Chad and Bob talking about "search engine optimization", this is one part of doing that.  The idea is to put content on your site or blog that is interesting to potential customers, and that will be found in the search engines, hopefully turning searchers into customers.

Monday, October 03, 2005 9:23:58 PM (Eastern Standard Time, UTC-05:00)

In a previous post (http://aspadvice.com/blogs/rjdudley/archive/2005/05/21/2595.aspx), I showed one way to protect files from direct download by configuring IIS.  In a shared hosting environment, this usually isn't possible, so I'll show another way to protect these files.

First, a little review.  Out of the box, only certain file types are mapped to the ASP.NET ISAPI filter.  These include .aspx, .ascx, .ashx, etc.  If these pages are requested, IIS hands off processing to the ASP.NET filter.  Otherwise, IIS serves the file directly (or hands it off to another ISAPI, as necessary).  There are also a number of file types mapped to ASP.NET that are protected by the HttpForbiddenHandler.  This is an HTTP Handler that prevents direct download of files of the specified type.  If you examine the <httpHandler> section of your machine.config file, you'll see the list.

It would seem that simply adding a file extension to the <httpHandler> section and have the HttpForbiddenHandler prevent its download would be great, but unfortunately, you need to also configure IIS for any new extention you want handled, which is the problem in the first place.

However, there's a little trick we can use.  Let's say you have a file named "protected.pdf" which you wish to prevent direct download of.  You can rename this file to "protected.pdf.resources", and since the .resources extension is already forbidden, users will not be able to download this file directly even if they can guess the file name.  Try it and see.

When it comes time to allow users to download the file, you can use the System.Web.HttpResponse.WriteFile method to send the file to the user.  You may have to clear the response and add a content type to make this all work correctly, as shown:

strFileName = Server.MapPath("protected.pdf.resources")

strFileId = StrFileName.ToString.Replace(".resources", "")

With HttpContext.Current.Response

   .ClearContent()

   .ClearHeaders()

   .ContentType = "application/pdf"

   .AddHeader("Content-Disposition", "inline; filename=" & strFileId)

   .WriteFile(strFileName)

   .End()

End With

Monday, October 03, 2005 7:42:02 PM (Eastern Standard Time, UTC-05:00)
 Saturday, October 01, 2005
 #
 

In addition to all the information I have on my slides, I was making notes all through the breakfast and early session to work into my presentation as well.  I've numbered the slides here, but you'll have to count them on the printed copy:

Slides 9-10: Why blog?
As we heard in the breakfast session, consumers want/need educational material.  A blog is a great place to put some of this information.  You could create a section on your blog for "Care and Handling Tips", and have posts for the different types of flowers and arrangements.

Mike's study also found that the greatest barrier for younger consumers is that they don't know how or what to order.  These consumers probably do know how to read a blog, so adding content to your blog that is very basic could help draw younger customers to your shop.  I can almost guarantee a series of posts about corsages and boutonnieres as prom season approaches would be a great draw, and you could probably sell some different styles merely by highlighting them.

Slide 12: Blogs as a marketing tool
"Customer evangelism" is a fancy new term for "word of mouth".  This is where your loyal (or PO'd) customers talk about you, good or bad.  Be careful what you say or do, as it may be easily broadcast to thousands.  Personal blogs will tip the balance of business to consumer interactions back toward the consumer again.

Slide 13: What to blog about
Do you have e-mail newsletters like Chad, Marty and Tina?  Put copies on your blog!  You can keep the newsletter special by delaying posting for a couple of days.  As I mentioned in a previous slide, there is a growing reluctance for consumers to give out their e-mail address.  Blogs are anonymous, so there will be a certain percentage of consumers who would rather read a blog.  But, if they see great value in your newsletter, they might sign up.  Blogs and e-mail marketing are complementary technologies, and it would be good to do both.

Slide 14: Where to get content
SAF gave us great "Hip givers guides" at breakfast.  You have a number of great ideas in there.  Mike's presentation has some interesting statistics--some you'll want to share, and some you'll want to use to plan content.

Saturday, October 01, 2005 11:27:35 AM (Eastern Standard Time, UTC-05:00)

I've posted my presentation at http://www.rjdudley.com/ArticlesPresentations/Presentations/tabid/109/Default.aspx.  To navigate the menus, go to www.rjdudley.com, and then Articles & Presentations >> Presentations.

The file is PDF format, so you'll need Acrobat Reader to open it.  Almost everyone has Acrobat Reader, but if you don't, you can get it for free at http://www.adobe.com/products/acrobat/readstep2.html.  If you need the slides in a different format, let me know (you can catch me at rich-at-bloomery-dot-com).

Saturday, October 01, 2005 11:10:52 AM (Eastern Standard Time, UTC-05:00)
 Friday, September 30, 2005

Thanks to everyone who attended our session today.  The room looked packed, and I know Chad, Brian, Bob and myself enjoyed sharing what we've done and answering your questions. We had several conference calls and e-mails to make sure we covered a wide variety of topics, and I know we hope everyone got a lot out of the session.

One question I think I failed to have a concrete answer for is "What is a blog", leaving some people feeling I didn't answer it at all.  I'll try and clear it up a little here.

As I mentioned in my presentation, a blog is really several technologies working together--data storage, presentation, and administration.  Data storage is usually a file format called RSS, presentation is usually handled by templates created in XSLT, and administration is the back end where you enter and maintain your blog posts.  Data storage and presentation are what make blogs so difficult to define concretely.

In a web browser, a blog (such as the one you're reading) looks like a web page with a number of short articles on it.  In an aggregator (a program that downloads RSS files so you can read and manage the posts off-line), the blog entries look just like e-mails.  Same exact data, just a different presentation.

This is where things get really cool.  Remember Chad's wedding gallery?  You can find it at http://www.kremp.com/album.asp.  Visit his site, open any gallery, and then open any album.  Look down in the lower right-hand corner of the album.  You'll see a little orange button with a white "RSS" label.  With Chad's gallery software, you can use a blog aggregator to subscribe to any of their albums.  When you first subscribe, you'll download all the photos in the album, each like an individual e-mail.  As they add additional photos, your aggregator will automatically download each one as a separate message. 

Does this mean their photo gallery is a blog?  In a way, yes.  It uses the same data storage (RSS), and templates to manage the presentation.  In a web browser, it looks like a web page; in an aggregator, each photo will be a separate message.  One of the main differences is the administration part.  Chad's gallery is geared toward the uploading of photos, and short comments.  The blogging app I use on this site is geared toward entering a lot of text data, but with some ability to upload photos as well.

The software I use at FloristBlogs.com has both a blog and a photo gallery built in together.  Why not--they're practically the same thing!

I hope this helps clarify a little what a blog is.  Unfortunately, there isn't a concrete definition, and that's just because blogs are so flexible that they can be many things.

Friday, September 30, 2005 10:51:39 PM (Eastern Standard Time, UTC-05:00)
 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)