Showing posts from May, 2007

Not a DBA (Part 2) and Some Quick Hits

Since my last post, I picked up a copy of SQL Tuning by Dan Tow . This is exactly the resource I've been looking for. Dan Tow has developed a process of diagramming queries, and then using these diagrams to determine an optimized query plan. I'm only half finished with the book, and I'm amazed by the results I'm already seeing. This book has given me a new perspective (and confidence) to solve the problems I described. I'll post more on my progress in a future post. Ruby For a while now, I've wanted to learn Ruby (and Rails ). I'm impressed with how much you can do with this language in a few lines of code . If nothing else, it will provide a quick and easy way to mock up prototypes. Last week, I downloaded Hackety Hack , which is a lightweight Ruby IDE. I've completed the Hackety Hack tutorial and can't wait to create more complex examples. I've started to (finally) place my bookmarks into . I thought

Not a DBA

I don't consider myself an expert in database design or administration, but like many web programmers, my applications often rely on fast and efficient interaction with a database. I am fairly comfortable normalizing a schema and identifying fields to index, but I sometimes struggle creating efficient queries... especially when multiple table joins are needed. I'm looking for suggestions on how I can improve in this area. Dynamically Joining Tables Currently, I'm working with a database containing multiple sets of interconnected objects. Let's assume they are television shows, actors in the shows, and times the shows are on. The goal is to allow users to apply a set of filters to find the shows that interest them. Some simple use scenarios include: Find all shows where ActorA appears. Find all shows on between 10AM and 12 PM. Some harder scenarios include: Which show or actor appears most frequently. Which shows are on between 10AM and 12 PM, staring Ac

Eclipse RCP

My work had focused on web application development for so long, I had to pause when I was asked to develop a desktop application. I had little idea where to begin. I started searching for application frameworks that met the following criteria: I could write the application in Java The resulting application would be cross platform with a native look and feel. The framework was mature, easy to use, and widely adopted. I quickly narrowed the field down to 2 choices Eclipse RCP and NetBeans . Both met the criteria I was looking for. Either would have been a reasonable choice, and I chose Eclipse. First of all, I was comfortable developing in the Eclipse IDE. Second, Eclipse had a larger installed base and an avid community following, with over 1200 commercial plugins available. I was happy with my choice. Since I had been coding with JSF for some time, the leap to an event based system was not that large. The Forms plugin allowed me to easily create an attractive interfac

JavaServer Faces

I made the switch to JSF in late Spring, 2005. My team had just adopted the use of Spring and Hibernate - and loved using them. We had just started a new web development effort and knew we'd also need a flexible and easy to use UI framework. I was a big Struts fan, but often got frustrated with JSP and how much code seemed to be needed in my pages (foreach, if, etc). In addition to providing very modular web UI components, JSF provided many other features I liked and had gotten used to: a scoped managed bean facility and configurable page navigation were two biggies. I also liked how JSF abstracted the idea of a request into an Action, with a corresponding series of listeners that could be called to "set the stage". The one thing I really missed was the ability to dynamically arrange page fragments, like I had done using Tiles . There were some Tiles/JSF jars that others had written, but I could not get them to work correctly. Eventually I just wrote my own


It's Friday and I don't feel like writing anything I have to think about too much. I thought I'd start a list of some of the online resources I regularly use for news and inspiration. I hope to add to this list as I go. Props to these great innovators! Kayak Kayak is a travel search engine. Kayak makes excellent use of AJAX, adding results as they are discovered, and allowing users to tweak results (times, airlines, stops, etc) without a page refresh. I love how natural this application is to use. I also appreciate how willing they are to share the technology they're using and other cool stuff . CSS Zen Garden This site really cemented, for me, just how powerful and flexible CSS can be. I can spend hours browsing designs and learning new techniques. I do not have an extensive background in design and this site has really helped me refine my user interfaces. Amazon I'm always impressed with the great innovations Amazon has developed for users b

Web Services

I'm a big fan of Web Services and Service Oriented Architectures (SOA). I've developed a handful of web services for my company to use internally and there are a few reasons I enjoy working with this technology. Ease What I think I like best, is how easy it is to create a web service. I use Eclipse and this IDE provides a web service wizard (I'm sure other tools have something similar). All you need to do is create the WSDL and most of the heavy lifting is done for you (opening and closing connections, serializing the object to the wire, etc). Hook the generated code into your business objects and it's ready to go. Since Web Services use HTTP, installing your WAR file on the web server is the final step. No other setup is needed. I did not find CORBA as easy to use. In CORBA, you need to communicate what ports you want to use, optionally set up a CORBA name service, etc. If there was a port conflict on one of the machines you were using, you needed to

Wiki for Development

I'm always excited to start a new development effort. There's always so much to learn about your new users, their domain, and the problems they're experiencing. At this stage, ideas to help solve these user problems are plentiful and the possibilities seem endless. The hard part is, what to do with all the ideas you can't fit into your first release? Often these get left on a white board, buried in an email, or forgotten in a Word document. My team had this exact problem a while back. We started using a wiki to track feature ideas. It was easy to update and enhance this list, eventually slotting these features into planned releases. The wiki became "The Place" to document design decisions, track progress, and even hold our user documentation (which we exported later and included with the release). It became a very valuable development resource. A Wiki is a great tool for teams to keep all your ideas and development artifacts in a central, easily a

Rich Internet Applications (RIA)

On my last web application project, we realized the JSP/JSF presentation layer we implemented was not cutting it anymore. Transitions between pages were too slow, users wanted more dynamic feedback and drag and drop functionality. The project was put on indefinite hold shortly after that but I wanted to talk about some of the technologies I researched to address these problems. AJAX Ajax seems like the mainstream choice. While AJAX could help address the transition time and feedback issues, I don’t believe it could help add drag and drop. What worries me about AJAX stems from my experience with CSS. Even though CSS is a web standard, some browsers still implement CSS differently. I’ve had to place hacks into my CSS to account for these inconsistencies. It is a pain. Like CSS, web browsers could implement AJAX (XMLHttpRequest) functionality slightly differently. For me, I’d rather stay away from AJAX if at all possible. Adobe Flex I first noticed the power of Flash in


I’m really intrigued about the possibilities provided to small or new business by Amazon’s Elastic Compute Cloud (EC2). Basically, the EC2 allows developers to create a pool of virtual machine images, that can be scaled up or down in minutes. The EC2 integrates with other Amazon web service offerings, like S3. The package seems like the ultimate service oriented architecture. I’ve always been impressed by Amazon’s web site and infrastructure. When you think about all the information (products, reviews, users, wish lists, recommendations, orders, etc.) on this web site, it’s amazing it works and scales as well as it does. I look at the EC2 as Amazon allowing the rest of use to leverage the expertise they’ve gained developing and designing large, scalable systems. Thanks! For companies, this technology allows a very cost effective way to test new business ideas with the safety of scalability should the idea take off. I’m having a hard time finding a down side to using th

Users, Usability, & Accessibility

In my last post , I asked how much more effective my prototype would have been if we had started with the “compelling story” and went from there? The problem from the start was failing to recognize who my user group consisted of. We assumed that since we were working on an application prototype, our users were a fictional (and generic) set of people who would eventually be our customers. The end result was a feature rich application that didn’t solve any single business problem. In reality, the people performing the demonstration were the real users. Developing features to help them tell their story (and win the company more business) should have been our only goal. Around the time I realized this, I also discovered two developments in user interface design - Usability and Accessibility. Usability I got turned on to Jared Spool through a presentation titled “Scent, Search, and the Pursuit of User Happiness”. I’ve been a big fan of his and the work being done at User Interf

Accidentally Agile

A few years ago, I was asked to help develop a product prototype. The company had developed some new technology and the goal of the prototype was to demonstrate how this technology could be leveraged in a commercial application. The leaders had a vague vision of what it was they wanted, and we started there. After the initial prototype was complete we started to say, “Boy that’s really nice, but it would be great if it did this!” We began applying Agile principles without even realizing what we were doing. We started defining new features and scheduled short development cycles to implement these features – testing as we went (I should note that we had some JUnit tests, but hardly enough to qualify for what would pass as test driven development). We repeated these short feature based iterations until we had a fully functioning prototype. It was great, we got a lot accomplished and it was fun. Lessons Learned (what I would have done differently) Lately, some users have e


I’m a software developer in the Buffalo, NY area. I’m starting this blog to discuss various software development issues I find interesting. I have not been able to locate a Java or Agile user group in my area, so I’m hoping this space may help fill that void. Some areas I hope to hit upon are: Amazon's EC2 Agile development (& Test Driven development) Adobe Flex (and the new JavaFX) Occasionally, I may post on non-technical topics (family vacation, sports, television, etc). I have no idea where this will take me and I’ll rely on feedback to help drive some new topics.