The Station (Official Blog)
Rich Internet Applications with Appcelerator
Author: Kevin Whinnery
Tags: appcelerator book
Manning Publications (publishers of the popular 'In Action' series of technical books) will be publishing an authoritative text on the Appcelerator RIA framework tentatively titled "Rich Internet Applications with Appcelerator". This book will be written by yours truly and will hopefully serve as a useful text on how to build great user interfaces the easy way with Appcelerator.
AjaxWorld 2008 - Day Three, Grails steals the show
Author: Kevin Whinnery
Tags: grails , spring , hibernate , rails
Last day at AjaxWorld 2008 in NYC - it's been an interesting conference, but I am ready to head home. Day three has been somewhat less useful than days one and two, but I enjoyed a presentation from a Grails developer (Jeff Brown of G2One) who introduced their framework. Grails is of course a Groovy take on Ruby On Rails, bringing the "code by convention" pattern to the JVM (Groovy apps can be run on any servlet container running on Java 5 - Jetty comes bundled with it).
He gave the standard "CRUD app in two minutes" dog and pony show, which of course wowed the crowd. Feeling somewhat superior as a relatively grizzled Rails developer, I yawned through that piece of the presentation. But what you can't sneer at is some of the hardcore Java goodness that lies at your fingertips:
- Hibernate under the covers for full-featured ORM that vastly outstripes the power of ActiveRecord in terms of mapping legacy schemas.
- Spring under the covers - he showed how services are injected into Grails controllers at runtime using Spring.
- Integrated Quartz job scheduler - Rails has a job scheduler too, but Quartz is a much more mature product.
- The concept of Services added in to the standard MVC milleu. Business logic in a Rails app tends to leak between controllers and models - but the Grails programming model expects you to have business logic encapsulated in service classes which are invoked from your controllers. Those services can call EJBs, POJOs, or just use Grails' nice wrapper on top of Hibernate (called GORM). This helps enforce cohesion by letting your models only maintain state and perform operations on themselves.
- All controller methods are transactional, which is a nice convenience.
- Grails also has the concept of a page flow, so you can maintain some state between pages without abusing the session or request. This isn't a very RESTful thing to try and do (if you need a page flow you should be implementing an RIA or using AJAX client-side to break up your pages or do incremental validation).
- Good support for internationalization, which is kind of an afterthought in Rails.
So there's a lot to like about Grails, so much so that I would consider it a candidate to possibly obsolete Rails, but the big feature that needs to mature for the Grails folks to truly smoke Rails is migrations. The Grails 'migration' plugins are still immature, which means you are stuck writing SQL to manage your application's schema. You can have Hibernate do it automatically, but there's no way I am letting the computer decide what to do with my production database unless I am REALLY sure what it is going to do.
It may sound petty, but migrations are a HUGE reason why I love Rails so much. I absolutely hate writing SQL to make changes to my application's database and insert reference data. Huge pain, exceedingly error prone (at my last job, missing a database script during the migration from the current prod app to the newest version was a constant worry). By allowing you to write that code in Ruby using your domain model, Rails gives you a very nice way to step back and forth and incrementally update your schema, and give a development team an idea when they synch up, that 'oh yeah, someone made database changes - I better be careful'.
But I could see myself falling for Grails - all the power of the Java platform and the good deployment options, minus the pain and suffering of the JEE programming model? Sign me up. Maybe I should start contributing to one of those migration projects.
More later, there should be a neat Flex talk later today. See you in Minnesota soon...
Upgrade to Firefox 3.0
Author: Kevin Whinnery
Tags: firefox
The good people at Mozilla just released the latest edition of their Firefox web browser. Firefox is (in my humble estimation) the best browser on the market, so I encourage any and all of our customers and readers to upgrade to Firefox 3.0 as soon as they are able.
SQLite Manager - sweeeet.
Author: Kevin Whinnery
Tags: sqlite , rails
At my old job I used to be a DbVisualizer user, and I liked the tool quite a bit because it allowed you to edit DB rows in a GUI. Problem is, I am waaay to cheap to throw down 150 bucks for DBV Personal Edition (the free version does not allow GUI editing for rows). Plus, DBV doesn't easily support SQLite, which is the default database for Rails applications and allows for zero configuration in new projects. So I pretty much gave up on being able to have a nice GUI that would allow me to manipulate database rows without having to write SQL or Ruby to do it.
But one day, as I was casting about in an IRB console to programmatically modify values on ActiveRecord objects, I typed in a Hail Mary Google search for 'SQLite manager', hoping to find some kind of tool that would save me from this tedious process. And sure enough, what should I find but a Google Code project called SQlite Manager. It's a Firefox (though not just firefox) plug-in that allows you to do some basic administration on a SQLite database. Very handy when in development of a Rails application. IRB is great for testing code, but it is a pain when you just want to inspect the values stored in the database.
If you're a Rails developer using SQLite for development, I'd strongly reccommend checking out SQLite Manager.
From The Desk Of Jason Stahl
Author: Jason Stahl
Tags: ruby , rails , intro
Who Am I?
As the CTO of LightRail Systems, LLC. (LRS), I thought it might be a good idea for me to finally publish something on the company blog. I have a few ideas that I want to write about eventually, but it seems reasonable that my first post should be to introduce myself and talk about my goals and plans for LRS.
My name is Jason Stahl. I am a 31 year old male from Minneapolis, MN. I currently reside in Saint Paul, MN. I am a geek, a software developer, a photographer, a movie fan, an ice hockey fan, an avid reader and soon a husband.
Professionally, I have been building enterprise software for almost a decade for Lawson Software. I started their as an Intern in what was then know as the Advanced Technology Group during the Summer of 1999. Today I hold the position of Software Architect in Technology Development. I have worked on several projects during this time. Many that have become released products and some that will never see the light of day. I have been a part of four major platform releases and many service packs for those platforms.
I have been closely involved in Lawson's customer support, working on some of the most difficult support situations that have faced Lawson. This has given me an opportunity to learn first hand from customers what works and what doesn't. I have helped enterprises that range in size from dozens to millions of employees. I have learned what makes business software successful and what can make it a disaster.
I will bring this experience to continually guide, design, develop and improve the products and services that LRS offers.
What Am I Up To?
The flagship application for LRS, ReCESS, is a Ruby on Rails application. Previous to my work for LRS I have had very little exposure to Ruby and zero exposure to Rails. When I signed on to be the CTO of LRS, it naturally became important for me to become proficient with Ruby and Rails as soon as possible. I have been reading books and blogs and I have spent a considerable amount of time and effort thinking about, designing and developing small Rails applications. All this has been to find out how to apply my knowledge to this platform and allow me to help take LRS and its products forward.
I have been learning about the Rails community's opinion and approach to configuration, user provisioning, authentication, authorization and service and domain model design and development. These are the basics that provide the platform of any business application. Some of what I have found is great, much of it is good and some of it falls well short of the standards of the real world.
As far as I have found, the community lacks a concise and legitimate resource backed by experience that explains the real problems that face software developers, explains what can be done to solve those problems and gives clear examples of what those solutions might looks like. To be fair, there is a lot of information in the community that does try to do just what I said is missing. But it is poorly organized, inconsistent in detail and sometimes just not a complete solution (they made it too simple to be useful).
I am not saying that all Rails applications need to solve these problems my way to be good, but if you don't know any way to solve these problems, much less what the problems are, you can not begin to approach finding your own solutions to these problems. Right now it is way to hard too find a source of information that can bring you from not knowing to your first release you can be proud of.
Where Is All This Going?
I have no delusions of grandeur nor do I think that I am a god of software development. I am a software developer with years of experience and a track record of providing above average solutions to the problems faced by the projects I have been a part of. As the CTO of LRS, I am expected to use that experience to solve these problems for our products and services. While I am at it, I would like to try to give back to the Rails community that has done so much work that allows us to do what we do. I want to try to provide the afore mentioned resource for inexperienced developers.
I have started putting together a package of solutions that LRS will be using for its Rails applications to address configuration, user provisioning, authentication, etc. Beyond that, I will be writing about and sharing our approach to these problems for other developers to learn from, think about and, if they are nice, help us improve our solutions.
When Will This Happen?
The next major release of ReCESS is scheduled for the end of July. We have a lot of work to do between now and then. My number one priority will be to deliver this release on time. I will be updating and refactoring ReCESS to take advantage of the package of solutions I have put together. As I do this, and as time permits, I will writing about our solutions here. Over the next few months you should see several articles from me that define a problem, talk about possible solutions to the problem including both the pros and cons of each solution and provide an example of how to implement one or more of the solutions.
Why Do It?
Two reasons. First, my goal is for LRS to produce the best software on the market in the market spaces we target. Without a clear plan for how to develop our software this can not happen. We need a plan. Second, every developer that works without peer review makes the same mistakes over and over, doesn't learn what they are not thinking about and doesn't grow. By putting my solutions down here, I hope to educate those that are looking for more information and learn from those that know more then me.