RubyTML (or just RTML) is a Ruby framework for communicating with Ingenico's Incendo-based payment devices. To really understand what RTML is about, you first have to understand what TML is. TML is an XML-like language called the "Terminal Markup Language" (yeah, we're really creative with our naming conventions around here). Essentially, it allows developers to write terminal applications using a syntax that is essentially XML. This is a step forward for terminal developers, who are used to writing their applications in embedded C. The Incendo architecture that runs all of this provides a gateway between an application server, which houses the TML, and the terminal. The TML is translated to byte code and then sent to the terminal via SSL. The terminal then executes this byte code, and only reconnects when it's ready to download a new TML application. This is another step forward from embedded C, because there's no longer any need to manually compile and then download applications to the terminal. However, at the end of the day it's still TML, and someone has to write that TML code. That's where I come in. I was brought into Ingenico to write this TML, and I found the task nothing less than daunting. I came from a Java background, so of course the first thing I did was start looking at ways to write Java and have it generate TML. Unfortunately, that was like drilling a hole with a sledgehammer, and it didn't work out too well. I quickly realized that I was going to spend more time writing the supporting Java code than I would on the TML itself, and given fairly ambitious deadlines, that just wasn't going to be an option. So I turned to Ruby. I'd been experimenting with Ruby on Rails over the past month or two, and was amazed at how brain-dead-simple it made standard Web development. I began to think -- what is a TML application except for a bunch of glorified Web services? What if Rails could do to TML and XML what it has already done to HTML? The biggest difference between HTML and TML is that the former is purely (or, in a Web 2.0 world, _almost_ purely) View oriented. That is, HTML is designed for marking up and displaying content, not for transforming it. TML is a bit of a misnomer in that respect, because it is very much about the transforming of data. It takes care of receiving and processing the swipe of magnetic cards, amounts, and so on. In fact, the only thing it doesn't really handle is actually processing a payment, which is a job left for the remote server. So the short answer to just what _is_ RTML? It's a giant DSL (Domain Specific Language), basically, designed for generating TML with a vast reduction in keystrokes and lines-of-code. Check out the RTML web site at www.rubytml.com for more information -- from tutorials to my RTML blog.