Programming for fun?

I’ve been working on the cookbook application for the wife and couple interesting things.

I use Dreamhost, and while they rock in alot of ways they won’t let me have any long running processes. I wanted to add full text search to my cookbook (because if you can’t find the recipe you want, what good is a cookbook) and I couldn’t use the likes of Sphinx or Ferret. But if I changed my DB to MySQL (which dreamhost does provide) I can use the built in fulltext search. It is a little hackish, and MySQL specific but it works and is plenty fast for my needs.

I had to do two things:
1) Add a FULLTEXT index to my migration

def self.up

execute 'ALTER TABLE recipes ENGINE = MyISAM'
execute 'CREATE FULLTEXT INDEX ft_idx_recipes ON recipes(title,ingredients,directions)'

def self.down

execute 'ALTER TABLE recipes DROP INDEX ft_idx_recipes'
execute 'ALTER TABLE recipes ENGINE = InnoDB'
drop_table :recipes


2) In my recipes controller in the search action I have the following line

@recipes = Recipe.find_by_sql(“SELECT * FROM recipes WHERE MATCH (title, ingredients, directions) AGAINST (‘#{query.gsub(/’/, ”‘’“)}‘);”)

The gsub bit is to sanitize the sql. Pretty simple really, and if I ever want to replace it all I need to do is modify the controller.

I found out today that the Bort guys added OpenID support to the project. Which would normally involve some obscure svn/patch hijinks to deal with, but thanks to git I can just grab their changes (I did fork my project from theirs to start with).

git branch openid # incase I screw things up
git checkout openid # use the new branch
git pull git:// master
# Fix any conflicts and merge back to master

Finally, did everyone know you can put alias in the .gitconfig file? Well, you never told me.

co = checkout
ci = commit
st = status