Who is Paul Gorman?

August 11th, 2009

Photograph of 'How To Out-Sell, Out-Market, Out-Promote, Out-Advertise Everyone Else You Compete Against... Before They Ever Wake Up To What Happened'

I came across a book called “How To Out-Sell, Out-Market, Out-Promote, Out-Advertise Everyone Else You Compete Against… Before They Ever Wake Up To What Happened” by Paul Gorman (ISBN 0953266605, first published 1998). It has some fantastic ideas about marketing… but there doesn’t seem to be any information about the book or the author anywhere on the web, apart from the authors own website.

Can anyone vouch for Paul Gorman? Despite offering to privately consult for £3000/hr, and selling various marketing courses for similar sums on his website paulgorman.com, there seems to be almost no information about who this guy is anywhere on the web. I found the book on amazon but it is ‘currently unavailable’. 3 of the 4 people to have reviewed the book have written no other book reviews on amazon.

I suppose I’m trying to work out if this book is just a really well kept secret. Has anyone else read the book or heard of the author? Any comments welcome!

I frequently need to copy my production database in to my local development environment so I can work with the same data as on the live site. I’ve written 3 capistrano tasks that make this a lot easier: backup, import_backup and backup_and_import.

‘backup’ runs mysqldump on the production server using the production username and password supplied in your database.yaml file, before zipping the file and downloading it to a local directory called ‘backups’.

‘import_backup’ imports the latest backup file in the ‘backups’ folder into your local development database, using the ‘development’ username and password in database.yml.

‘backup_and_import’ performs the above 2 commands one after the other. If you want to try it out, copy the code below into your deploy.rb file, then try ‘cap backup_and_import’ from your root rails folder.

require 'yaml'

desc "Copy the remote production database to the local development database" 
task :backup, :roles => :db, :only => { :primary => true } do
  filename = "#{application}.dump.#{Time.now.to_i}.sql.bz2" 
  file = "/tmp/#{filename}" 
  on_rollback { delete file }
  db = YAML::load(ERB.new(IO.read(File.join(File.dirname(__FILE__), 'database.yml'))).result)['production']
  run "mysqldump -u #{db['username']} --password=#{db['password']} #{db['database']} | bzip2 -c > #{file}"  do |ch, stream, out|
    puts out
  end
  `mkdir -p #{File.dirname(__FILE__)}/../backups/`
  get file, "backups/#{filename}" 
  run "rm #{file}" 
end

desc "Copy the latest backup to the local development database" 
task :import_backup do
  filename = `ls -tr backups | tail -n 1`.chomp
  if filename.empty?
    logger.important "No backups found" 
  else
    ddb = YAML::load(ERB.new(IO.read(File.join(File.dirname(__FILE__), 'database.yml'))).result)['development']
    logger.debug "Loading backups/#{filename} into local development database" 
    `bzip2 -cd backups/#{filename} | mysql -u #{ddb['username']} --password=#{ddb['password']} #{ddb['database']}`
    logger.debug "command finished" 
  end
end

desc "Backup the remote production database and import it to the local development database" 
task :backup_and_import do
  backup
  import_backup
end

e-resistible Online Takeaways

December 4th, 2008

e-resistible was programmed by me from scratch in Ruby on Rails. You can order takeaway online as well as searching for specific food types on your area, such as chinese takeaway in london.

The site has about 150 restaurants so far but is growing by the day. It was recently featured in The Independent. This is probably the most successful website I’ve put together, but also the most challenging from a code point of view.

I hope to go into some more details of the challenges I faced and how they were overcome in future blogs.

Rails UTF-8 problem

July 9th, 2008

For some reason the UTF-8 content in my database wasn't correctly rendering in the HTML. Turns out that *removing* encoding: utf8 from database.yml fixed the problem. Strange!

Git submodule conflicts

June 5th, 2008

If you ever get this message:

$ git pull
fatal: cannot merge modes?
Merge with strategy recursive failed.

It's because there are conflicting submodules - you need to make sure your local submodules match those of the origin before pulling.

I created an OmniGraffle stencil of the excellent famfamfam icon set made available under the Creative Commons license by Mark James. The first 12 hours has already seen over 100 downloads from the OmniGraffle Stencil website Graffletopia. Check it out here.

Git on Windows

March 19th, 2008

If you want to use git with windows, here's what you need to do. This is assuming you'll be using the windows command prompt to enter commands.

  1. Go to http://code.google.com/p/msysgit/downloads/list and download the latest Windows build of Git (at the time of writing the latest one is Git-preview20080301.exe)
  2. Double click the install file - make sure the 'Run git from the windows command prompt' option is selected
  3. Finish the installation and open a command prompt
  4. To clone a remote repository, type git clone ssh://git_username@git_host/path/to/repos local_repos_dir
It's the last step that had me stumped for a while. There's no colon after the git_host and it seems to need ssh:// at the start.

Download MMS file

February 11th, 2008

If you need to download an MMS file to your local machine, try http://geocities.com/majormms/. You can then use ffmpeg to convert to a format of your choice, like flv.

Mac Terminal Shortcuts

February 6th, 2008

Here are some useful shortcuts for getting around the mac terminal. The first table applies to the Leopard terminal.

Key Description
⌘ + N Create a new shell window
⌘ + T Create a new shell tab
⌘ + ` Next Terminal window
⌘ + ~ Previous Terminal window
⌘ + } Next Terminal tab
⌘ + { Previous Terminal tab
⌘ + W Close window or tab

Most consoles should support these shortcuts:

Key Description
Ctrl-A Move the cursor to the beginning of the command line.
Ctrl-B Move the cursor back one character.
Ctrl-C Break out of the command without any change to the settings.
Ctrl-D Delete the character at the cursor.
Ctrl-E Move the cursor to the end of the command line.
Ctrl-F Move the cursor forward one character.
Ctrl-I Recall a complete command name; same as the Tab key operation.
Ctrl-K Delete all characters from the cursor to the end of the command line
Ctrl-L Redisplay the current command line, same as the Ctrl-R key.
Ctrl-N Recall the most recent command in the command history relative to the current pointer in the history list.
Ctrl-P Recall the oldest command in the command history, beginning with the most recent command.
Ctrl-R Redisplay the current command line; same as Ctrl-L key.
Ctrl-T Transpose the characters to the left of the cursor with the character located at the cursor.
Ctrl-U Delete all characters from the cursor to the beginning of the command line.
Ctrl-V Insert a code to indicate that the immediately following value is a command entry.
Ctrl-W Delete the word to the left of the cursor.
Ctrl-X Delete all characters from the cursor to the beginning of the command line.
Ctrl-Y Recall the most recent entry in the buffer (which contains the last ten items you deleted).
Esc-B Move the cursor back one word.
Esc-C Capitalize the word at the cursor.
Esc-D Delete from the cursor to the end of the word.
Esc-F Move the cursor forward one word.
Esc-L Change the word at the cursor to lowercase.
Esc-Q Insert a code to indicate that the immediately following value is a command entry.
Esc-U Capitalize letters from the cursor to the end of the word.
Esc-Y Recall the next deleted buffer. (Effective after using Ctrl-Y.)