CustomerFu - not a ticketing system
So the first question all my tech mates ask me when I tell them about CustomerFu is “So, its like a ticketing system?”
Sort of, but not really. CustomerFu is designed around the customer, not around a “ticket”. Customers are real, tickets are not. All complaints in the system are strongly tied to the customer that made them. There are no complicated ticket numbers to reference complaints with. You want to find a specific complaint? Then find the customer that made the complaint.
Why did we take this approach? Firstly, tickets are impersonal and hide the fact that this is a real customer you’re dealing with, with a real complaint. Secondly, outside tech and big business, the ticket terminology has far less traction. As a customer I don’t log a ticket with your company, I complain. I want my complaint sorted out and I don’t care how you track it. And don’t involve me with your internal terminology.
Rareshare - a social network with a difference
Our latest project to go live is a unique social network for Rareshare.org. Rareshare is a set of micro-communities, one for each of the rare disorders listed on the site.
Sufferers and those affected by the various disorders can find and share information on the disorders, and communicate with other similarly affected individuals.
The site is in beta, but if you know anyone that is affected by any of the listed disorders, or are a sufferer yourself, then please sign up. Â
Congratulations to David on this great idea. We wish the site every success!
CustomerFu - complaint handling for small business
A quick heads-up on a product we’re launching soon. CustomerFu (www.customerfu.com) is an online tool for companies to manage customer complaints.What happens in many companies - when they’re small, its easy enough to follow up complaints through a paper-based system, or spreadsheets. But if your complaints are being received by more than one person in your organisation, or you have more than one branch or office, things quickly get out of hand. Bigger companies would start up a call-centre, or outsource to one. But that’s an expensive exercise.So CustomerFu will provide a centralised tool for companies to manage all of their customer complaints, making sure that none of them go amiss, and that every complaint is dealt with properly. Without breaking the bank.We’re in the home straight with development, so more information soon ![]()
Cool stuff with Git
We are currently in heavy development on one of our applications. We wanted to bring the existing deployment up to speed but with some very specific limitations.
I wanted others in the team to be able to clone the branch if they needed to deploy, so I created a new remote branch called ’slicehost’
git push origin origin:refs/heads/slicehost
Next I created a local branch called “slicehost”
git branch slicehost
I did a “git checkout slicehost” and proceeded to make the changes I needed to make before deploying.
I modified the deploy.rb file for capistrano2 and deprec2 to contain
set :branch, 'slicehost'
With the changes locally commited to the slicehost branch I aksed git to
git push origin slicehost
which pushed the changes to the slicehost branch in our repo.
I ssh’ed into the server with the repo to make sure it worked. With the changes ready for deployment I ran (from my local machine again)
cap deploy
cap deprec:db:migrate
and
cap deprec:mongrel:restart
That was that. I could
git checkout master
and continue with the rest of the application development.
I really simple way to solve the problem.
I’m really enjoying git - it feels right ![]()
Interesting behaviour in Ruby’s division and modulo operators
My copy of The Ruby Programming Language has finally arrived and of course that I started reading it. One of my first findings about the language semantics has to do with mathematics, more specifically, division and modulo.
As a long time Java programmer, most of my expectations about math in programming languages come from this background, so some of the behaviors of mathematical functions in Ruby have really scared me. Let’s start with a simple example, a basic division, imagine that you have -7 and you want to divide it in 3, as we can’t divide -7 by 3 we have to reach an approximation.
During my math classes, I learned that to do this approximation I would have to use a multiplication, multiply 3 until I have a value as close as possible to -7. The closest one I can get is with -2, as -2 multiplied by 3 is -6 and I would have a remainder of -1 as -1 plus -6 is -7.
A lot of numbers, right?
Open irb on a command line and write:
-7/3
So, are you getting -2? No?
No, you are not. In Ruby, -7/3 is -3.
How the hell does this happens?
In Ruby, differently from C/C++ and Java, the result of the division between two integers where one of them is a negative number will yield a result as if it was a floating point division that rounded towards negative infinity. There is no explanation about why it is done this way (comment if you have any hints) but other languages like Python and Tcl behave in the same way.
Ideally, A divided by B with a result of C and a remainder of D is equivalent to ((C * B) + D), so this simple division would break the whole mathematical equivalence between multiplication and division, right?
Not so fast. The modulo (%) operator also behaves differently when dealing with a negative division. If you try to run (-7 % 3) you will receive 2 and ( (-3 * 3) + 2 ) is exactly -7. So, the operators keep their values equivalent, they just don’t behave the way I was expecting them to.
Another interesting thing is that if you want a modulo operator that works just like Java’s, you can call the remainder method as in:
-7.remainder(3)
This isn’t going to blow your mind or change your life forever, but it’s an interesting behavior that I didn’t have noticed yet.
PS: If you have any idea about why this happens, just drop a comment ![]()
Git post-commit notification to Campfire
Recently we switched from Subversion to Git, and the thing I missed the most was the post-commit notifications we had popping up in Campfire. So, I added this to the .git/hooks/post-commit file in the project I’m working on:
#!/usr/local/bin/rubyrequire 'rubygems' require 'tinder' commit_author = `git show --pretty=format:"%an" HEAD | sed q`.chomp commit_log = `git show --pretty=format:"%s" HEAD | sed q`.chomp commit_date = `git show --pretty=format:"%aD" HEAD | sed q`.chomp commit_changed = `git-diff-tree -r --name-status HEAD` campfire = Tinder::Campfire.new 'your_account' campfire.login 'your_username', 'your_password' room = campfire.find_room_by_name('your_room_name') room.paste %(Commit by #{commit_author}nDescription: #{commit_log}nnChanged Files:n#{commit_changed}) room.leave
You’ll need to install the tinder and hpricot gems too. And post-commit must be executable
chmod 744 .git/hooks/post-commit
Now this will send a notification to Campfire each time you complete a local commit.
[Thanks to this pastie for the right git commands]Â