Web Tier Development Patterns

I have been doing web design and development for a few years now. It's been interesting. I have seen a lot of different designs and been part of putting together a good many web applications for different companies. Each of which is done in at least a slightly different way, even if they're using the same technologies. Though I have primarily seen these things done in Java and a few open source technologies, I have an insight to share that seems to be pretty obvious to me, but not so much to others. This, from the perspective of a front end designer, after being part of several great teams.

It seems that the most successful web user interfaces are completely divorced from their back end counterparts. This is somewhat anti-intuitive from traditional web design. In Javaland you have JSPs that are directly included as part of the project. It seems to make sense that they would become integrated with the middle tier because it's so closely linked. It creates a false sense of "togetherness" that really doesn't exist. Static HTML (the way most JSPs are used) and Servlets couldn't be more different if they tried. It's something that has been apparent to me since the first day that I found out JSPs were compiled in to Servlets. I immediately asked "Why? That sounds like a lot of wasted CPU cycles." My comment still holds true today. Sometimes the marriage between JSP and Servlet is useful, where it's going to be a completely dynamic response. However, it's been my experience that using JSPs in a way that utilizes their dynamic nature (and not just for excess complexity purposes), is very rare. Most of the time, even if a few tag libraries are used, ninety percent of the page in question is just static html that has no need to pass through all the extra cycles that JSPs do.

So, am I proposing totally static HTML? Definitely not. There are just too many reasons that the server should do some view logic work. Browsers just aren't built powerfully enough to take care of everything that a modern webpage needs to.

Ideally, I would love to see a "front end project" consisting of a standard *AMP set up. Pick your poison for that P (PHP, Perl, Python.. or Ruby, etc), and a separate Java (or ASP) project for doing the heavy lifting. Compiled code is much more efficient with CPU than interpreted code, and makes a lot more sense to write powerful algorithms in. The interpreted code can easily connect to the compiled code to get the data that it needs on the server side. The static code that the client ends up with is capable of getting access to the back end as well using JavaScript with JSON (or whatever your preferred client side technology stack is) for getting the data from the client side.

I have a feeling this is just one of those separation of concerns design patterns that has not caught on yet. My guess is that at some point in the future we'll start seeing this sort of separation become more common. It adds a bit of complexity in connecting things together, but it relieves front end designers of trying to do a back end designers work. People like me that truly live on the web tier, and not the middle tier, would find great joy in seeing this sort of change in mentality.

*AMP = Fast, immediate delivery of data to the client.
Java/ASP = Powerful, heavy lifter for back end processes.

It only makes sense.


Google OS Review

So, I got a chance to take a sneak peek at the new Google OS. Or at least, what seems to be the new Google OS.

Not that I'm special in any way: http://discuss.gdgt.com/google/chrome-os/general/download-chrome-os-vmware-image/

However, I just want to throw a few quick thoughts out on the intarwebs.

1) I really like the concept. The computer is part of the network. Your sign in to your computer actually is your Google ID. I like that idea. Problem is? What happens if you're not actually connected? It'd be impossible to use your system. Not that most computer users these days can tell the difference between not having internet and not being able to do anything..

2) It's a good start. Which is exactly where I figure that they are. Starting. Inside of a couple years I am sure that they will have a lot of the bugs smoothed out. But as far as usage as a netbook system? It's just about perfect. Throw that with a 3g card in a netbook, and you've got an "internet based" computer. I never really understood what people saw in netbooks short of being used for that...

3) Not a geek in creation will be happy with it. I can hear the cries already: "I can't install my local server? Worthless!" "It's based on Linux and all you can do is browse the net? Are you kidding me?" Basically, the people who will miss the point of it entirely.

4) It wont be a competitor with Windows. Unless we're going back to dumb thin clients. Which is basically what the OS feels like. Even though it is a fully featured OS, it doesn't have that feel to it, since you are only able to be on the web. I think there is going to be a lot of resistance by the geeks before this ever truly becomes a reality.

That's all I have for now. I think it'll be some time before wide adoption. On anything other than netbooks anyways. I still think virtualization of software is more likely than everything in a browser.


Apple vs Microsoft - Different market-shares!

I'm really tired of hearing anti-Apple talk from people that don't understand their business model. Microsoft is going after a different demographic than Apple is. Linux is going after yet another. For the sake of this post, I'm going to assume Apple vs Microsoft as the only competitors. Sorry Linux. You're still too geeky.

So, I was hearing things last night like "The video card isn't good enough in the Mac for me to justify it," and "They're just too expensive compared to PCs," nevermind that Mac's are PCs, and "They're too locked down." Basically all of which are statements that are filled with FUD. I wont refute any of these arguments, because they're half truths. Go out and look for yourself if you want to find their answers. Don't believe what you hear.

Lets take the car industry. Most people understand the differences in car manufacturers. Nobody would make the mistake that BMW, Audi or Mercedes are in the same market share as Ford, Chevy or Saturn.

When you buy a BMW, you give up a lot. All your decision decisions are made for you, and it's not extremely customizable unless you're an extremely talented auto mechanic. Even then, I highly doubt there are many mechanics out there that would say they need work. They're manufactured from the ground up to be a solid unit. Everything is taken in to account, and the owners experience is just that much better because every last little detail is scrutinized. It may not have the exact engine you want, or maybe it doesn't have a specific piece of piping in there that you like. It will just feel better. Maybe if you had that Ford, you could throw that single piece in there that you want, and you would feel happier about your purchase and yourself because you made a contribution to it.. That's just not how it works with the higher end cars. The experience is what you pay for, not the specific little pieces. That isn't to say you can't pay attention to the specifics, you just can't weigh them on the same scale as their lower end competitors. Sure, a truck has a bigger engine and more power than a little BMW car. Can it go as fast? Does it look as good? Will you be as happy? Will it fall apart as much? Just because you think it costs too much, or you can't afford it... That's not a good enough reason to look down on it.

That's the difference between a Mac Box and a Windows Box. Experience. I have (and do) own both. I use them for their respective strengths.

I play games on my Windows box, and I do everything else on my Mac. I've repeatedly tried to go back to Windows for many of the things I do on the Mac, and simply put, it just doesn't feel as fun. What would take five keystrokes on a mac system, takes ten on a windows system. Windows is good for certain activities, Macs are good for another set of activities. Right tool for the right job.

Optimistically, I'll hope that some day people are going to stop spreading FUD. I'll look forward to that day.


Android vs iPhone - Realistically.

I've spent a lot of time with both the G1 and the iPhone at this point, and while I don't consider myself on expert at both phones inner workings, the user experience between the devices really has started to draw my attention (or perhaps, ire).

Google has squandered an opportunity. An opportunity to squash the iPhone squarely. Android is a better OS, hands down. It's SDK is open, it's community is open, the design decisions that have been made for it's UI are fairly consistent across the device (and the software that is released for it!), and it's got way more extensibility than the iPhone does. Not to mention, it's usable on any phone. Not only do they want you to replace certain pieces of the phones functionality, they encourage it. Nowhere will you find anything like that in the cellphone industry today. Even the beloved iPhone.

So, if I say the OS is so great, why do I think the iPhone has beaten Android instead?

Simple. The hardware for the G1 and every other Android device, well, sucks. I don't believe there isn't the right hardware out there, or that it was any one persons fault, but it simply has really shoddy hardware. This completely degrades the user experience of the device, even if the OS is just that much better from a technical standpoint. The iPhone delivers a truly full "experience," from end to end. There's no denying it. While you're sitting there waiting for your messaging system to come up, the iPhone is happily whirring away on its message already.

So even if the Android OS truly is the better choice, there still aren't any viable choices for using it. It's like having a five ton gorilla locked in a box. Waiting even a single second for the device to "unlock itself" so that you can use it is unacceptable. Waiting for the phone to catch up with itself to answer a call? Unforgivable. It's a phone. That's its purpose. There are still thousands of people voting with their money on this, and all that's happening is that it's being ingrained in people that Android provides a poor user experience.

Don't get me wrong, I certainly will never switch to AT&T to get the iPhone. In truth, I wouldn't want one. I'm stuck with Android because I love all of the integrated Google services. I am simply disappointed. Google (and HTC, and T-Mobile) really botched their charge in to the superphone market. It could have been great if they had insured that the proper hardware was implemented. Now, it's most likely to be religated to tech geeks and people that want features over finish.

Let's hope I'm wrong!


A greeting.

Hail and welcome.

This blog will be primarily devoted to my "in awe" moments about technology in society. Whether that falls in to the religious diatribe, righteous philosophy or business categories, I'll be posting them here. I try not to take a side most of the time, but sometimes there is a clear side that I fall on and I will speak to that.

Once again, welcome, and I hope you amuse yourself here!