First landing page

My first landing page for Inner Light Tools is up: reiki software. It’s pretty rough, but I want the search engines to get something in there for those keywords. It’s not a very competitive phrase, so I hope I can get to the top ten as easily as I did for ‘alternative health practice management’. Then I’ll rank for two phrases that nobody searches for 🙂

Massage software is next.

Intake forms

I’m building a system whereby each practitioner can customize their intake form. I’ll provide a wide range of sections that can be added/removed and re-ordered. This is obviously a bit of a challenge. I still haven’t figured out how I’ll handle validation, I’ll probably have to write something custom.

Today was a big push in that direction. I build a nice UI with jQuery drag and drop to re-order the modules. I still have to build the adding modules part, and saving the new order to the DB. I’ve laid the groundwork there though, by changing the model relationships. Initially Users had :has_and_belongs_to_many relationships with FormSections. But that didn’t let me save the order in which the FormSections were saved. So I fleshed out the FormSectionsUsers model to be fully fledged with id and order columns, and some indices. Then I changed the relationshop to :has_many, :through.

One thing that’s so easy to miss in the Guide is that you need :has_many definitions for both the target of the association, and for the association model itself. Don’t forget the asterisked lines below (from the Association Guide):

[ruby] class Physician
***has_many :appointments***
has_many :patients, :through => :appointments
end

class Appointment
belongs_to :physician
belongs_to :patient
end

class Patient
***has_many :appointments***
has_many :physicians, :through => :appointments
end
[/ruby]

New Theme

Over the weekend, I re-created the theme for this blog. My goal was to jettison the old base theme that I’d used to create the previous theme, because it was never quite complete, and the underlying theme code was buggy. You may have seen some errors here from time to time.

I wanted to go super-modern when I did this, so I selected two candidates, AdaptiveTheme, and Zentropy. I was drawn to Adaptive because they prominently display HTML5 compatability, and I was interested in Zentropy because it incorporates HTML5 Boilerplate.

I love the idea of HTML5 Boilerplate, and I’m going to incorporate it into my alternative health management application, Inner Light Tools.

I ended up selecting AdaptiveTheme because it’s built for easy sub-themeing. I prefer building as a subtheme simply because my code and their code is separated, and I can update the base theme as needed for bug fixes.

Deploying the new theme turned out to be a pin in the ass, on Drupal 6, because it had built it using the D7 that I have installed locally. So I bit the bullet and upgraded this installation to Drupal 7 Friday night. It was pretty smooth for an upgrade that big. I’m still learning my way around D7, so some things are still a bit wonky. But it’s a massive improvement, so I’m glad it’s done now.

Bugger, WYSIWYG editing is still broken for me, it just posts empty content. I had to go back and disable it, then repost this

…On Long Passwords

I like to think I’m fairly security conscious. I have a different password for most of the sites I use. I track them all using Passpack.com. I use it to auto-generate complex passwords whenever I create a new login.

I also use CreditKeeper, which gives me a monthly look at my credit score from all three angencies. Yesterday, I decided to improve the security of my password there. I discovered the following requirements on their password field: length 6-10, only letters and numbers.

That’s unbelievably crappy. Kinda as bad as you can get. They recommend not using dictionary words, but I’ll bet you $100 they don’t check that when you submit.

So, I wrote them the following message:

The extra password that you’ve added to the login system is a fine security improvement. However, as the one site on the internet which contains THE MOST concentrated collection of my financial data, I find it galling that you limit my main password to 10 letters and numbers. That’s a pitiful level of security. I would really like to use a password like this: R

But no, your system is actively preventing me from using a secure password. Thanks.

As expected, I go a non-answer back from them, basically blowing me off.

Time to go looking for another tri-bureau credit report that
a) doesn’t suck
b) is marginally readable
c) doesn’t cost a colossal amount
d) doesn’t run on a VAX in the basement
e) understands how to handle a password

I fear the chance of that is about 0.01%, Just wading through the spam when I do the search is going to be an nightmare.

In the End

I’m done.

I’ve made good improvements in the look of the ‘day view’ calendar stuff, though it still needs work before I’ll show it to you. I learned a bit about ruby’s date handling and rails’ i18n in the process.

I also finished the mailchimp templates, which look decent now, though they could use a polish at some point.

Overall, I can call this codeathon a success. I’ve made a significant improvement in the functionality of the app. I’ve now got a few roads I can travel to really fill out the features that I’ve build this weekend. I like having starting places, it makes deciding what to do next easier.

One of the techniques I’ve used to fight through this weekend is to focus on the list I’ve prepared, and not get pulled off into coding cul-de-sacs. While all of the work in said cul-de-sac needs to be done, it doesn’t need to be done now.

The other thing I’ve had to do is give up on nuanced implementations – there are a few places where I wished to build modules that handled all the special cases and ambiguities that I know are there. But I had to keep telling myself that working code is what I’m after, and that it’s easier to build future code on a working base than to try and get the complex case right the first time. So I build the näive case and live to fight another day.

  • appointment model
  • appointment controller
  • appointment view for user, with basic CSS
  • expand user registration to handle business name
  • seed data for a few users/appointments/events
  • subdomain handling in dev, and on server
  • appointment view for anonymous patient
  • appointment list for next two days on Center page
  • super-simple mailchimp template
  • mailchimp setup for confirmation email

Patient login

I just realized that adding Patient login is going to be a very complex change, because now both Practitioners and Patients can be logged in, and I’ll need to heavily differentiate between their experiences.

So, I’m canceling those two items on my list and moving on to the mailchimp changes.

D’oh

I thought there was a bug in Clearance, because I didn’t see the password change in the DB. Of course it wasn’t changing because I was setting it to the same thing every time. Ug. I spent some quality time with the Clearence code in the debugger though.

I’m calling it a night though, my neck is killing me.

For tomorrow:

  • patient registration
  • logged in patient appointment scheduling
  • super-simple mailchimp template
  • mailchimp setup for confirmation email

We have Clearance, Clarence

So, I’ve spent the last few hours mucking with the Clearance based authentication system I’m using. I’m trying to get it to reset passwords correctly. I haven’t gotten that working yet, but I have cleaned up a bunch of stuff related to new accounts and logging in, so it’s been worth it.

I’ve basically subclassed all the Clearance classes, mostly so that I can define a layout for the pages, but there are a few cases where I’ve overridden the functionality.

The trickiest part is figuring out all the routes. Clearance installs a bunch of routes, and they’re not always obvious. Fortunately there’s:

rake routes

To list everything that’s defined, even if it’s deep down in a gem.

The Clearance guys were nice enough to link to the relevant video on their readme page.

Public Calendars

Before I took a break to make some drinking chocolate and watch Mega-Shark vs. Giant Octopus (Starring Debbie Gibson), I got public calendars working. If you’re logged in, you see the full event details on the calendar, if you’re not logged in, you just see ‘unavailable’.

I also set up subdomain handling, so that if you go to, say, reiki-center.innerlighttools.com/calendar/2011/02, you’ll see the calendar for that practitioner. I’ll be using the subdomain stuff all over the place in the future. It was actually trivial to do once I read this turorial.

  • appointment model
  • appointment controller
  • appointment view for user, with basic CSS
  • expand user registration to handle business name
  • seed data for a few users/appointments/events
  • subdomain handling in dev
  • appointment view for anonymous patient
  • appointment list for next two days on Center page
  • patient registration
  • logged in patient appointment scheduling
  • super-simple mailchimp template
  • mailchimp setup for confirmation email