Thursday, July 21, 2011

Vaadin and ramblings

Well, it's time for some more random thoughts about my hobby development stuff. It's been awhile since I've really had any major projects -- there was nothing that I was extremely excited about, and I was having still a lot of fun playing Starcraft 2 in the evenings. But now the momentum of groups of us playing together has died down (it took a year!), so I've been thinking it's time to start on another project.

Now the important question is "is there any larger-scale project that I will actually take the time to finish up?" I love starting hobby projects. But part of being a hobby project is that I have to enjoy it, or I'll stop. I've got quite a few hobby development projects that I stopped, mainly because they stopped being fun. (and one project that I somehow lost 2 weeks of work on, (did I really go 2 weeks without checking into source control? I can't imagine I did...) which really killed my desire to work on it).

So I've messed around with a number of smaller things recently -- I got an android tablet and was playing with android development. That was fun, but nothing really sucked me in for a longer term project. I toyed with the idea of making a clone of Progress Quest for Android, but qiuckly realized that most of the time spent wouldn't be interesting android-specific stuff, but instead general tedious stuff. I'd still like to eventually make my unofficial Blaster Master prequel, but that's going to have to wait until I find an artist.

So, for now, I've started looking at working on some open source stuff to scratch a few particular itches. I won't go into detail, mainly because I'm tired of talking about projects that I likely will get bored and not finish, but I've realized that to do this current idea right, it needs to be a web app.

And I hate web programming. The web is just an awful platform, from a development perspective. You get a mish-mash of different languages and technologies, a thousand and one frameworks that all try to solve the same problems in mostly the same (unhelpful) ways. No matter what you do, you're almost always stuck messing with HTML (ugly), CSS (uglier), javascript (ranging from hideous to OK, depending on what js library you are using), some other language on the server, trying to manage ajax calls, trying to figure out reasonable designs for UI widgets that HTML doesn't really support, etc, etc, etc. No matter how far we've progressed, we're still trying to make these technologies do what they weren't designed to do. And it's still painful. I could continue ranting (eventually I'll write up my thoughts in another post about why I think the standard MVC pattern that 95% of the web frameworks use isn't really a good solution, but knocking the designs of people smarter than me will have to wait for a different day).

So I've been hunting around for some sort of library or framework to at least make a web app project fun to work on. And I finally found a framework that, while it still has a few rough spots (it's the web, how could it not?), does what I want. It's called Vaadin. And it's pretty cool. The idea is that you don't worry about client-side/server-side. The framework does that -- you just write your code, almost as if it was a desktop application, with a gui toolkit that is similar in general idea to other gui toolkits like Swing or SWT. And thanks to their cool design and a lot of GWT magic under the covers, the framework figures out all the HTML/javascript stuff and makes it just work. So you can spend your time writing the interesting stuff, and not spend the majority of your time trying to deal with javascript and html oddities.

I know there are a few other similar frameworks, like Eclipse's Rich Ajax Platform. I picked Vaadin for two reasons: first, the RAP ui was pretty ugly (visually) last time I looked at it a couple years ago -- everything looked like a desktop app, which is weird and uncomfortable when it's in the browser. (To be fair, I checked just now, and it's improved a lot) Second, and more importantly, Vaadin has GREAT documentation. While most frameworks have a 3 page tutorial then point you at the auto-generated javadoc/phpdoc/etc, Vaadin gives you a few-hundred page book with very detailed information about how everything works.

......

So I started typing this post a couple months ago, saved it, and then never published it. I pulled it back out today because after a couple months of fiddling around with Vaadin, I still completely agree with everything I wrote, and so I'm going to push the publish post button now.

Since writing this, I've made a little bit of progress on my "scratch-an-itch" webapp (not as much as I'd like) and also ended up using Vaadin for a work project where we needed a quick-and-easy but ui-rich tool. It was incredibly easy.

Atari QuadGames

Well, the first prototype adapter is finished, Quad-Joust is undergoing testing (ie making my kids come down to the basement and play it wit...