Rails novice with a new project!

Hi!

I am embarking on my first ever rails project (yay!) and would like to solicit any advise or warnings while I'm in the planning stage. Here is the impetus for my project:

I am product supply manager at a small research company. I inherited a really clunky, buggy inventory management system. It is basically a hastily assembled front-end someone put together in visual studio with a SQL Express backend database. The front-end generates constant bugs and like the database behind it was simply not designed for our work flow. I've tweaked the system as much as I can in the back-end(I don't have source code for the front end), but I'm sick of dealing with it. I'm ready to start from scratch.

Reading through the zeitgeist (aka google) I've become attracted to Rails for implementing my project. I need a quick uptime and a kind learning curve, as I will be doing all the coding myself. I have done a little java, vbasic and c so I'm familiar with the basics of object- oriented programming and I've found the ruby tutorials I've been working through to be quite accessible. I have a pretty good idea just from learning the basics how I can set up the system I envision, but there are a couple details where I really have no idea of Rails' capability.

In particular, I would like both pc's and mobile devices to interact with my database on an almost-equal footing. Workers should be able to quickly identify and perform transactions on inventory items by scanning their barcodes and the database should be updated remotely in real time. Is it possible to interact with hardware components of a mobile device (like a camera or scanner) from the context of a web browser and use it in a meaningful way through Rails?

I'd also appreciate anyone who can point me toward helpful resources for developing business intelligence apps in Rails.

Apologies in advance if this is a stupid question, I'm very new to this :slight_smile:

Wow, this looks like a tall order right there. I know on the desktop, the bar-code readers I have seen are very simple to integrate, because they just "type" the letters of the bar-code very fast. So your interaction is simply to get the cursor into a text field (using JavaScript) and then let the user press the trigger on the scanner. A stream of text ensues, as the scanner pretends to be a keyboard over USB.

But what you're describing seems to be out of the realm of a mobile browser. For one, I don't know if the sandbox rules allow a Web page to access the camera. For another, you'd need to upload the resulting photo to the server and let some sort of image processing system read the code. Your only other alternative would be to have a custom app for each supported platform which could present a WebKit window to interact with your Rails app alongside a camera button and client-side barcode reader (think the eBay app on iPhone for example) in order to pull this together.

The rest of your question seems like something you can handle in a green-field Rails app. Export your data out of the fancy-pants Access format and into PostgreSQL or MySQL or something -- anything -- else. And while you're doing that translation, look carefully at any foreign keys or primary keys and coerce them into the Rails format so you don't have to use the key-mapping features first time out of the box.

Walter

quick list of some hopefully helpful things. I'm very noob myself at this point, but having covered the material below, after two months of study, I'm saying to myself, "hey looks doable. no biggie." if anyone here sees me pointing Josh M in the wrong direction, speak up.

a great crash course is http://mislav.uniqpath.com/poignant-guide/ for the aspects of ruby. I fiddled with this for a month and played around with ruby before going into rails. But, a good exercise so I could distinguish the fundamentals of what was actually going on in rails.

rails for zombies is a great tutorial crash course, coupled with agile web development and rspec o'reilly books, and of course, The Pick Axe.

heroku makes implementation very painless. true, your inventory control would be in the cloud, but authentication doesn't seem to be a big hassle.

gl, p

Josh M wrote in post #977046:

Is it possible to interact with hardware components of a mobile device (like a camera or scanner) from the context of a web browser and use it in a meaningful way through Rails?

Hi, the answer is yes partially. Or actually yes. The practicalities require some effort.

You can use cross-platform development environments for mobile. You get access to many HW features of most of the mobile plaforms, iOS, Android, BB, etc. Meaning you can access Camera, Accelerometer, local storage, etc from a browser object. I said yes partially because typically you'd create an installable application for the device which uses a browser object to display itself. So in practice you show HTML pages that use Javascript with some extra access to HW provided by the frameworks you use, for example Titanium Mobile from Appcelerator, Phonegap or Rhodes from Rhomobile for use Ruby fans.

None of the platforms provide the reader as far as I know. I think Titanium was planning to add support for that but don't know when. But you can maybe use the one I mention below and make a plugin that the app would use. That is possible.

Some info about such platforms here: http://bit.ly/ifhRA4 and here http://bit.ly/bzcuvK

An open source project of a reader for Android here:

Hope it helps.

Cheers.

Thanks so much for the helpful responses, you've given me a number of excellent resources to check out!

@ comopasta: Rhodes looks like a good option. In fact their website mentions barcode readers specifically. Also, we're currently using a couple purpose-built windows mobile based mobile barcode scanners and Rhodes claims support for Windows Mobile. In any event, I've got plenty of more basic work to take care of before I get to this portion of the project, so I'll have time to check out a few different development environments!

@pedro: Rails for zombies was great, it gave me a taste for it (also for brains), also I was just working through the (poignant) guide to ruby last night, and did find it helpful to a point. After a few chapters all the cartoony stuff got to be distracting! I looked up the Pick Axe though and I think I'll be running to the bookstore to pick that one up soon.

@Walter I've already decided I'm scrapping the existing table associations and starting fresh, so no worries about fixing broken keys! I think the developers made some weird decisions with how they related their tables and I have a simpler approach. I was thinking I'd migrate from the built in sqlite to MySQL when deployment time comes. Are there any comparative advantages/disadvantages of MySQL compared to PostgreSQL or any of the other options I should be aware of?

Please quote when replying.

Josh M wrote in post #977301: [...]

@pedro: Rails for zombies was great, it gave me a taste for it (also for brains), also I was just working through the (poignant) guide to ruby last night, and did find it helpful to a point. After a few chapters all the cartoony stuff got to be distracting!

Agreed. The Poignant Guide is a fun read, but I didn't find it terribly helpful for learning Ruby.

I looked up the Pick Axe though and I think I'll be running to the bookstore to pick that one up soon.

There's an old but still useful version for free on the Web.

@Walter I've already decided I'm scrapping the existing table associations and starting fresh, so no worries about fixing broken keys! I think the developers made some weird decisions with how they related their tables and I have a simpler approach.

You must use foreign key constraints in your database to prevent keys breaking. The Foreigner gem is the essential tool to make this work well with Rails.

I was thinking I'd migrate from the built in sqlite to MySQL when deployment time comes.

There are several bad assumptions in here. SQLite is not "built in", and it has somewhat different syntax from MySQL or Postgres. It's often very useful for getting a quick start, but you'll need to switch at some point.

Also, "deployment time" should be constant. You should be deploying incrementally from the very first, even if only to a staging server. Don't wait -- that will put you into integration hell.

And of course, do all development test-first. Cucumber, RSpec, and either Machinist or Factory Girl should be your constant companions.

Are there any comparative advantages/disadvantages of MySQL compared to PostgreSQL or any of the other options I should be aware of?

PostgreSQL is a much better DB than MySQL -- MySQL really has no advantages over it at all, except slightly easier setup. I wouldn't consider MySQL for most new projects.

(If you deploy to Heroku -- which you should if possible -- you get PostgreSQL.)

Best,