Hello Visitor! Login or Sign Up

The A.R. Development Blog

Teething troubles tonight...

March 18, 2008, 6:34 p.m.

Tonight I put a major update of AutomaticRomantic into production and despite my best intentions introduced a bunch of problems, mostly in the new RSS feeds and in the iCalendar support.

Inadequate testing in the hosting environment, mea-culpa.

I know some people have been getting some server failure error messages this evening when playing with these features and some reminder emails may have been delayed by as much as an hour.

If you're having problems with the site Please let me know and I'll do my utmost to fix.

I'll post more about the changes soon.


Changes to AutomaticRomantic.com

March 11, 2008, 8:56 a.m.

New features :

  • Get an RSS feed of your reminders
  • Get an RSS feed of top rated ideas, new ideas
  • Paging for reminders (for the people with a LOT of reminders)
  • Edit Ideas
  • Title for ideas
  • Non-members can now comment on ideas
  • New non-development blog to announce new content to site/discussions etc
  • New articles section

Other changes / improvements / bug fixes :

  • Fixed bugs in the iCal feed / download
  • Simplified registration of cell phone for text messages
  • All email messages from system now have HTML as well as plain text alternatives (prettier!)
  • Fixed bug where reminders in the past could not be changed
  • CSS for "sub-tabs" now looks more polished


How long before someone tries to hit /admin on a Django site?

Jan. 22, 2008, 6:27 p.m.

So you create a Django-based site. Then you let people know about the site and that it's backed by Django.

How long before someone tries to hit /admin?

Not long. Rascals.

I didn't use admin for pyxboard so my visitors are disappointed by the 404 page they get. But in the other test apps I've done with Django I haven't used Admin much either. For one thing I prefer pgAdmin and SQL but for another I discovered early on in my experiments with Django that the admin interface is a distraction. I ended up messing with the META inner-class to get my Admin looking how I wanted which was a waste of time since sooner or later I was going to be abandoning the admin helper app for my own custom admin pages anyway.

In fact, I'd go as far as to say that in the early days I was distracted by Admin in the same way that people were distracted by :scaffold in Rails. The admin was so nice that I was drawn to try to build my site around it instead of using it as a temporary helper to support the real site development activities. The facilities in Django that allow you to extend/modify the admin app are evidence that this is a strong urge for others too.

Now I feel that admin is useful in situations where you want to get the data entry done quickly and you can't trust the end user to use pgAdmin to enter it - Exactly what the Django guys designed it for!

All old news in the Django community I'm sure, but we all reach enlightenment in our own time.


SQLObject EnumCol == Django CharField(choices=..)

Jan. 21, 2008, 10:54 a.m.

When translating between SQLObject and Django's Models you might start looking for Django's equivalent of EnumCol. You might have for instance :


thingy_status = ["Pending Approval","Approved","Denied"]

class Thingy(SQLObject):

status = EnumCol(enumValues = thingy_status,default="Pending Approval")

The equivalent in Django (unless you want to store the enumeration values in a separate table, your call) is...


thingy_status = (

('Pending Approval', 'Pending Approval'),

('Approved', 'Approved'),

('Denied', 'Denied'),


class Thingy(models.Model):

status = models.CharField(choices=thingy_status,default="Pending Approval")

Didn't find a clear posting that helped me with that. Hope you find this one if you need to do this translation.


Adobe Reader 8 is very annoying.

Jan. 20, 2008, 4:30 p.m.

Generally I love Adobe products and I have messed around enough with the internals of PDF to think the format is a work of genius.

But Adobe Reader 8 has a serious problem.

It's the most aggressively updating application I have ever had the misfortune of installing. Open a PDF file and Adobe Reader 8 wants to update itself. Not now. Close that document and Adobe Reader 8 wants to update itself. Not now Reader, you're doing a great job, no obvious problems, no need to update, trust me, you're doing fine.

Adobe Reader 8 still REALLY wants to update itself. So, like dealing with the 3-year old, you eventually give in. OK, Reader, what the hell, update yourself.

30 seconds later you get a message "Windows will restart in less than 60 seconds".


Not now Reader! No! Don't touch that! Now really isn't convenient... ARRRGHH!!!

Why Adobe thinks it's OK to put the health of it's application before the needs of it's users I don't know but I can say that if there was any viable alternative Reader 8 would be shown the door and given a restraining order.

I Ha8 Adobe Reader 8. Next time it asks to update itself. No Reader, no freekin' way.


Developing your Django app on Windows, Deploying on a Linux Shared Host

Jan. 20, 2008, 4:59 a.m.

I host with WebFaction and I'm very happy with them but their hosting platform is RedHat Linux and I develop on a variety of machines including..gulp..Windows 2000 and Vista.

I know, I know. But since I'm developing with Python it's all good, everything just works and I even remember to put all my slashes the unix-way.

But there are some differences between my development setup and the host - the location and passwords for the database, where static content should appear and so on. I wanted to be able to copy the code directly from my development machine to the live server to update it without spending an hour fiddling with paths to reset things to where they belong on the host.

Turbogears has separate settings files for development and production which was very useful but I've been playing with Django and it doesn't seem to have the same mechanism. So I came up with a very cheap way to do it. There are probably better ways, please comment and educate me! But for now in settings.py....

import sys

DEV = (sys.platform == 'win32') #If I'm on windows, this is development!

if DEV:








Like I said, it's cheap but it's working for me right now. Everywhere I have some Windows/Unix path or resource difference I wrap it in a test for DEV and do the right thing. If it's a check outside of settings, I import the settings and check settings.DEV.

As I said, if there's a better way, please comment!


pyxboard : New and Improved.

Jan. 18, 2008, 12:06 p.m.

pyxboard.com is my latest experiement. I don't think I need to do that much more with pyxboard but it's been a great tool to learn some of Django, YUI grids, expand my CSS knowledge and so on.

Today I added a new feature, commenting for pyxboards using the only-slightly-mindbending Django FreeComment facility. I was thrown a little by the need to install the sites application before I could use FreeComment because pyxboard is very stripped down (no membership or admin interfaces required for this app) so sites wasn't included. Adding it was easy but it still came as a suprise.

Thanks to this django snippet I was able to implement Akismet SPAM protection too very simply - that relied on the excellent Akismet Python Module from Fuzzyman.

Finally, I took the liberty of improving the quality of the image rotations that pyxboard performs on some pictures. They tended to get a bit jagged. Now I'm using ImageMagick to polaroid-ize and rotate the images that make up the collage, resulting in a better overall appearance. I wanted to stick with the Python Imaging Library for all my image manipulation needs but ImageMagick was easy to use, works a treat, and has slightly better quality than PIL for some transformations.

I'm pretty happy with the way PyxBoard turned out and I think I'll let things settle for a bit but I enjoyed the journey to Django-land.

I guess I'm going back to working on AutomaticRomantic again.


python subprocess on Linux..

Jan. 18, 2008, 10:33 a.m.

PyxBoard uses ImageMagick as part of it's processing pipeline and I use the subprocess module to run it as if from the command line.

Except it isn't "as if from the command line" unless you use subprocess.call(...,shell=True)

Since I do some development on Windoze, I was missing the shell=True part - on my hosting provider it failed with a file not found error.

Just a note for the next time I do this..

(Thank you Doug for pyMOTW on subprocess)


BigDates.com charges $6 a year for this.

Jan. 16, 2008, 4:36 p.m.

BigDates.com charges $6 a year for their service (though to be fair you can get 3 months for free). What is their service?

  1. Automated date reminders via email and Text Messages for your phone.
  2. Enter information about people and their birthdays so BigDates can send you "personalized" gift ideas.
  3. Import Dates from Outlook
  4. Request important dates via email from friends and family and have them enter the dates.

I think that's a pretty nice line-up of features. I'm not sure I'd want to pay $6 a year to have gift ideas emailed to me but as of this moment BigDates.com has an Alexa ranking of 348,702 and I have seen it at around 41,000 so it seems that lots of people do.

With AutomaticRomantic's anniversary feature you can now get these kinds of yearly reminders (Birthdays, Anniversaries, Public Holidays) for free - to your cell phone / mobile phone too (also free). We won't send you any gift ideas but I'm sure you can think of some of your own and save yourself $6.

We're not really competitors of BigDates but I look at their basic reminder service and think - Email and Text reminders for annniversaries / birthdays? We do that!

Sure, AutomaticRomantic is supposed to be used for remembering your wife / girlfriend / husband / partner (though lets be honest, it's the men that need the most help!) but absolutely no reason you couldn't use it to remember great aunt Betty's birthday and get an automated reminder every year.


Writing effective copy is hard.

Jan. 16, 2008, 4:36 p.m.

The vast majority of visitors to any website are gone within a few seconds. They swoop in, they glance and...whoosh they are gone.

If you want to keep them around long enough to understand what your site is about you have a few seconds and a couple of inches of screen real estate to convince them to dig deeper.

So this image is very, very worrying....

Partial screenshot of AR front page

Users eyes tend to start in the top left and then move right and down. So they see the logo, it looks professionally designed so that's OK. They get an idea of the site from the color schemes and overall design - at least it doesn't look amateurish thanks to the excellent work of Andreas Viklund who created the template. But is it too corporate looking? After all, ugly sells.

But then they get to the copy.

Welcome to AutomaticRomantic

A free service that reminds you to lavish your partner with the attention and affection they deserve via..

I think the welcome part is good, the bolding of the "free" probably good too but after that we start to lose them.

First the copy doesn't appeal to the users selfish nature. Right there is my chance to grab their attention with a "what's in it for you" hook. I blow it by mentioning partners. Have to answer the "What's in it for me" question right up-front.

Second, what's with the word "lavish?" To me "lavish" is a word rich in tones of chocolately luxury and pampering, I could dive right into "lavish" and wallow about in it all day. But is it part of the average users vernacular? Probably not. So I lose them right there because I fail to connect with them using their own language. They can't connect with me, they feel there is no shared bond, I am "the other". To be successful you have to meet the needs of your users not your own needs. Don't use language your users don't use.

Finally, to drive away the few stalwarts who have made it to the next line we're at :

via Email, Text/SMS and iCalendar.

Oh god. Are there any geeks in the house? What does the average web surfer know about iCalendar? Those are technologies, not solutions to a problem, but as a programmer I'm trained to be focused on features not on benefits.


Lets go with a different approach :

Welcome to AutomaticRomantic

A free service helps you to be happier, live longer and improve your sex life.

Read More..

Bang! An up-front presentation of the benefits of more romance. Yes, those are some of the benefits! Here's what's in it for you buddy! Sensational? Maybe, but all claims are backed by scientific evidence.

Notice there is no talk about technologies - those are incidental to the problem that is being solved - namely the short, miserable and sex-free life you are currently living (ok, worst-case scenario there).

I'm willing to bet that this kind of copy will get a lot more click-throughs to the "about" page where the service is explained in more detail. Of course, the cycle repeats again there - got to grab their attention and hold it all over again. Not by being sensational but by explaining the features and how they correlate with the benefits. Front page : This is what you get. Next page : This is how you get it.

It's the same service, the same technologies but the presentation is radically different - focusing on the benefits rather than the features.

But I have to make a whole bunch of copy changes on the about page and think about this some more before I can put it into effect.


© 2006 - 2013 Automatic Romantic | Terms of Use | Privacy Policy | Developer Blog

Web Design Inspired by Andreas Viklund Some icons by Mark James