Friday, February 12, 2010

FLOSS-POS, IS4C and Bread & Roses

A new food coop has started up in town named Bread & Roses.  I went to a few of their fund raisers, and was aware of the effort.  In late December they opened their doors in Railroad Square.  They had a pretty sparse selection of goods for sale, but they have grown considerably in the little bit of time they  have opened.
On the TLUG group discussion someone mentioned that they were helping Bread & Roses come up with a Linux-based solution for their POS (that's point-of-sale) system.  I had it in my mind that I wanted to try to get Bread & Roses on the Linux path, and here was a direct offer to make it happen, so I agreed to show up at the next meeting.
It turned out the guy who posted it, Ray, was at an Ubuntu release party I had held a little bit ago.
At first I tried Lemon POS, but it was written in Python as a desktop application, and after poking around the code wasn't sure if I would be able to bend it to my whims, or at all for that matter.  My knowledge in PHP, Javascript and other web technologies.
After some more research I came across IS4C, a POS software written for Linux machines by a consortium of IT guys supporting food coops.  It is written in PHP, and the demos on its website looked very promising.  I installed the server and client on two separate virtual machines and started testing.  My initial impressions had me pretty excited.  Some more rigorous testing revealed some problems.
I displayed it for Justin and he identified a number of ways it did not cater to the Bread & Roses business model.  The great thing was that I had confidence that I could rewrite whatever I needed to do things the way we needed them to.
Aurora's grandfater, Stefan, donated a laptop and desktop to Bread & Roses.  After installing the server on the desktop and the client on the laptop I began making changes.
Looking around the IS4C website I noticed that there weren't any tools for distributed development.  No wiki, software repository, etc.  Essentially, none of me fixes, changes, or else where pushable back to the project head.
I hit up their forum telling them I'd like to work with them to get collaborative tools setup.  My post went unanswered for some time.  As I kept making changes and fixing problems I decided to just fork the code in a way that would allow others to jump in and collaborate with me if they so wished.
Learning git has been on my radar for a while, so I decided to use this as an opportunity to start learning. I put the project up on github and start pushing my changes to the github repo.  I named the project FLOSS-POS, and posted my fork on the thread I published a month earlier.
A few days later I started getting responses from people interested, and I have since got at least one person at the Wedge Coop making fixes that I have since been merging back into FLOSS-POS.
One of the most important changes, that Bread & Roses needed, is the ability to have separate member pricing, instead of just percentage-based discounting.  I have also changed the default browser for accessing the application from Galeon to Google Chrome.  Chrome should allow us to take advantage of HTML5 awesomeness soon, on a browser that is open source and cross platform.
In the long term I would like to do a ground-up rewrite of the code.  I am leaning towards using this as an opportunity to learn something else that's been on my radar, and rewrite it using python+django.
I've began doing some initial ERDs of the new database structure, which should be more robust and, allowing for greater flexibility and more detailed reporting.
I'm pretty pumped about this project and am hoping to get an active community of volunteers assisting on this program.  I think there is a lot of opportunity for the FLOSS community to inject itself rather effectively in the POS industry, which is presently dominated by expensive, closed source solution that prey on vendor lock-in to drive out competition.