31st October 2008

Just to be clear about what I am looking for in a newsletter system, here are my major requirements:

  • Easy to use; difficult to make mistakes. Once set up, and end client should be able to use it, and it should be very clear what the client needs to do, and what the system is doing for the client.
  • No queues to get stuck. I don’t want to be unlocking files, killing background processes and not knowing how far the sending has gone. Press button to go, and if it fails, press it again to continue where it left off.
  • Templates. Each message can be created from an initial template. There are two types of template here: the wrapper template that the entered newsletter is insterted into, and the initial template that is given to the user as initial content for the newsletter. The latter can often be kept as an external file and loaded in each time, but that is too hard for end users.
  • Safe and secure registration and deregistration. Use of a capcha to reduce robot spam, and use of a double e-mail system to confirm e-mails are live.
  • Bounce handling. It is surprising how quickly e-mails expire, and I would like to be able to catch them and filter them out. This is expecially true of hotmail and ISP-supplied e-mail addresses, as people only seem to keep them for a few months before moving on. Muppets.
  • Link tracking. To be able to see when an e-mail is opened, is very handy to end clients. It’s not perfect, but it gives an idea of how successful a newsletter is.
  • Custom fields. Being able to define custom fields and assign them to specific newsletters, and use them in templates, is all very handy. Luckily most systems support custom fields.
  • An API. This is rare. Being able to subscribe a user as they register for a CMS – that’s handy.
  • E-mail history. Knowing which users have received which newsletters allows specific newsletters to be resent to a group, picking out just the new subscribers who have not yet recieved that newsletter. If the e-mail send is run daily on a cron job, until the next issue is sent, then new subscribers get an instant catch-up.
  • Newsletter online. This allows a subscriber to view the same newsletter online, in a web page. This particularly useful for web-mail users, where the HTML newsletter may not be displayed properly in their client.
  • Newsletter archive. An archive of older newsletters. Sometimes the archive and online versions should not be made public. The ability to turn on restricted access to registered subscribers, on a newsletter-by-newsletter basis, is important.

Next I will compare how well the systems I have looked at fit into this requirements list.

Follow me on Twitter

9th October 2008

Notes and links concerning the creation, conversion and streaming of video on a web page, in no particular order.

Specifications

Specs for supported Flash Video formats: http://osflash.org/flv

HOWTOs

Converting uncompressed AVI to high quality FLV using AviSynth This HOWTO refers to Flash 8.

Flash Players

Most players seem to come in a free version, and a licenced version with additional features.

JWPlayer – Open Source. I really like this one.

FLV Player – Free, good, but no full-screen mode.

FlowPlayer – How I missed this one, I’ll never know. Great range of display formats and features. This is the only player I know that is able to play an MP4/H.264 video and fall back to an FLV file if the Flash Player installed does not support the H.264 format. Flash 9.115 minimum is required to support H.264/MP4 containers, and not everyone has that version.

Other Tools and Converters

Avidemux for Windows provides conversion with a simple-to-use GUI interface. GUI always wins the day when experimenting with this stuff. You can go back to command-line options when converting in batch.

Another tool on the same site, ‘MakeInstantPlayer’ will encode a video into a self-contained Windows executable. That is very handy for presentations and distribution, where the end user is not expected to have their own players installed.

I use Avidemux to create MP4 videos now, using the AAC audio encoder, and the H.264 video encoder, the result plays in any of the above listed Flash players.

Follow me on Twitter

Tags: ,

5th October 2008

The Final Four

Down to last four; CakePHP, CodeIgnitor, Kohana and Zend. The test is to get each framework to print ‘Hello World’ on its own ‘/hello/’ page. For each test I will record the time taken to:

  1. Work out how to complete the task, which will indicate how simple it is to use, and how good the documentation is.
  2. How long the script takes to execute, to measure the performance. This will be averaged over 5 attempts

CodeIgniter

Test completed in 15 minutes. I only had to use two pages from the documentation, One to print, one to remove index.php from the url.

Execution took 0.031 seconds.

CakePHP

Took an 1 hour. Far too much made of the installation. File permissions to deal with, database configuration, why?! Did I say i wanted caching enabled and connect to a database? Then when I finally got to writing a controller, it didn’t let me do a raw echo. So I create a view, and find it comes with a default layout?! Takes me another 15 minutes to look through the manual to find how to switch it off. Too much crap to get through.

Execution took 1.388 seconds.

Kohana

It was difficult to accurately analyse this one because it’s so similar to CodeIgniter, and I think it’s assumed that people using it are familiar with CI too. The documentation isn’t at the level of CIs, but it’s still very clear. Took me slightly longer to find how to print ‘Hello World’ and a lot more pages, but it came with an example .htaccess file to speed up removing the index.php in the URL. 15 minutes.

Execution took 0.039 seconds.

Zend

Zend took 30 minutes to set up correctly. It’s very much start from scratch with Zend, nothing is there for you. You need to create the directory hierarchy, and all the files within it outside of the library itself. However the documentation was excellent, and I knew where I was going very quickly, it just involved a lot of ‘admin’ to get there.

Execution took 0.078 seconds.

The Result

I had planned to do some more tests for the final four, but it wouldn’t be justified as I’ve already made up my mind!

4th place – CakePHP

Cake is a good framework no doubt about it. One of it’s main perks that everyone raves about is its automatic code generation dubbed ‘automagic’. I could see this being an advantage for a rapidly expanding website, and for experienced PHP developers, but for me though it’s like learning to fly a plane with autopilot.

Another problem for me is the documentation. For argueably the most complex framework of the lot, it’s poor.

Finally the features, or classes, that it comes aren’t as extensive as the other three frameworks. There are many third party plugins to be found in ‘the bakery‘ but they should be integrating some of the more useful ones into the framework release so you don’t have to go looking for them.

3rd place – Zend

Zend is a damn nice library of code, and has some great components like lucene search. In terms of flexibility in the applications it can produce I’d probably put it in the number 1 slot. The documentation is also brilliant, especially the reference guide and the quick start tutorials. At this level, it’s ultimately down to preference.

2nd place – CodeIgniter

Sooo we have a winner, but why did it pip CodeIgniter? CodeIgniter is brilliantly simple, flexible, but best of all it’s the fastest framework on the market. The documentation is good, especially the screencasts. It also boasts the advantage of working with both PHP4 and PHP5.

1st place – Kohana

As this is just an evolution of CodeIgniter you can get started using both its own and the CI documentation. Why is it better than CodeIgniter? Two reasons:

  • It’s strict PHP5 and takes advantage of all its new features. This makes it more future-proof and robust for building object-oriented applications.
  • It’s ran by a community as oppose to an organisation.

And that’s it! Enough writing, more programming!

Read part 1