Shaun Mccran

My digital playground

20
N
O
V
2009

Exploring the variations in email UN subscription methods

If you are anything like me, everyday you are smothered in a stack of emails from various companies all delivering html formatted, image heavy flyers persuading you to buy whatever dead horse they are flogging. I know it is my own fault, after all I signed up to them in the first place, I've only got myself to blame. As I find myself checking (and deleting) these email on an Android mobile device now it has become hassle-some. So I set out to unsubscribe from the majority of them, which is where the inspiration for this article came from.

In a short period of time I have unsubscribed from around a dozen different email newsletters, and because of this the differences in the methods used to accomplish this have become glaringly obvious. I was very surprised at the variations in the methods used, some are very user friendly, and others are very much not. I won't name the companies involved.

Case one:

By far the easiest user interaction, this is a simple link from an email that provides you with a screen confirming your UN subscription. No prompt is required from the user, you are simply unsubscribed. All the data is passed seamlessly behind the scenes.

Case two:

Almost the same as above except that you are taken to a screen where you have to commit an action. You are presented with a screen displaying your email address, and prompted to click a button to confirm the UN subscribe action. This may be a handy safety net to step errors from the casual clicker.

Case three:

Clicking on the link from an email takes you to a generic page with a form on it. They have not transferred any form of token from the email so you are prompted to enter the email address you want to UN subscribe. Entering your email address takes you to a screen confirming your action. This additional step is unnecessary, and doesn't add any value at all.

Case four:

In this scenario we are passed to a page where we have to login. The subscription details are attached to an account application, and as such your credentials need to be verified. Based on passing an encrypted token from the email a user could easily be logged in automatically. Actually requiring a username and password adds an additional level of complexity. Once I logged in I then had to navigate to the subscription settings and choose to unsubscribe with a form similar to the ones mentioned above.

Case five:

In the most convoluted example I have come across so far I actually had to create an account. I arrived at the UN subscribe page and found that to subscribe did not require an account, but to change my subscription options did! This was a very strange scenario, requiring a user to create an account to stop emails. Once you have created an account the subscription options were managed through a form like the ones mention above.

Conclusions

I think the thing to keep in mind with functionality like this is the balance between usability and the business objectives. An obvious point to note is that businesses do not want their users to UN subscribe to their emails. This is their user base and they do not want to lose it. Still it is worth considering just how you interact with your customers, even when providing functionality you do not want them to use.

After all you can always just 'Mark as Spam'.

18
N
O
V
2009

Image expired error message using CFChart

A bug came up in an application that uses the CFchart tag to create flash charts.

view plain print about
1<cfchart format="flash">Values</cfchart>

On the initial load the charts display just fine, but if you refresh the page, or go back to it later to view the data the images error. They display like this:

Expired content

There seem to be two potential reasons for this. The first is that the cache for the chart in ColdFusion has expired. It seems that by default the per request cache is for 5 seconds only, so if your template takes longer than this to run then you may end out with expired content before you serve it up.

To fix this try this, excerpt from the CFchart blog: 1. Stop the CF server. 2. Open \lib\webcharts3d.xml 3. You can increase the timeout for keeping the graphs in the cache by editing the minTimeout and maxTimeout attributes:

view plain print about
1<?xml version="1.0" encoding="UTF-8"?>
2<server image="PNG" cache="Memory" minTimeout="5000" maxTimeout="30000"....

Change this to whatever values you want.(Values of minTimeout and maxTimeout are in milliseconds.)

Full article here: http://cfchart.blogspot.com/2005/06/image-expired-trouble.html

The second potential reason for this, and the more likely in this case is that the code is running on a clustered server. The error is cause where the CFchart tag generates a temporary file (swf, png, jpg) and serves that up to the user. When the user makes another request there is no guarantee that the request will hit the same server, so it will not find the temporary file, and throws the 'content expired' error message.

You could ensure that the content is served up correctly by tying the user to the server using session management, or more ideally set the temporary file to be written to a central server in a kind of CDN (Content Distributed Network) way.

I'm off to try both and see which one works!

13
N
O
V
2009

What tools do you use to push your code base around?

I've been developing in more and more random locations recently, and finally got fed up enough with manually moving and synchronising my own (local) development code that I've switched to an online SVN repository.

I used to use Beyond Compare for file syncing different code bases, instead of revisioning. It is good, but it isn't particularly quick, and you have to be thorough as it is still very easy to miss a file.

I had an online repository provider recommended to me, http://beanstalkapp.com/.

I've been using them a few weeks now, and they seem really good. They are always 'up', and the connection holds a good speed. There is even a free account if you just fancy trying it out.

The problem I had then is that my code was nicely versioned, and synchronised, but it was not on my live server. Pushing files up to live still required me to know what files had been changed, which is not ideal.

As I use Eclipse I thought I'd search for an Eclipse based FTP client, I've had no luck though, I just can't find an Eclipse based FTP synchronisation tool!

Luckily I had previously used Beyond Compare, searching around in their documentation it turns out that it can also handle local-to-ftp file/folder comparisons.

So for now I've settled on these applications, they both seem to allow me to release stable complete code versions. It would be interesting to see what toolset other developers have arrived at. I've had some exposure to GIT and ANT, but this seems a more comfortable process.

13
N
O
V
2009

Altering bullet point styling using css

I've been writing an error handler that uses JQuery to output a list of errors on a validation event. The error display uses a html list display, and the default display style is a bullet list. This is a simple css script to change the bullet style to something else. In this case nothing!

view plain print about
1<style>
2 ul.list-cleaned {
3 margin: 0;
4 padding: 0;
5 }
6 ul.list-cleaned li {
7 margin: 0;
8 padding: 2px 0 2px 16px;
9 list-style: none;}
10</style>
11
12<ul class="list-cleaned">
13    <li>First list item</li>
14    <li>Second list item</li>
15    <li>Third list item</li>
16</ul>

Output:

  • First list item
  • Second list item
  • Third list item

I think it looks a bit cleaner than bullet points.

_UNKNOWNTRANSLATION_ /