Showing posts from August, 2007

Ruby Jabber

The Hibernate tweaks I made a few weeks ago made our application "fast enough" for now. So I'm back off of Rails and I've started work on a XMPP (Jabber) bot to monitor chat channels. For those unfamiliar, XMPP is an open protocol for instant messaging. I've just gotten started and, again with Ruby, my progress has been quick and easy. After installing the Openfire XMPP server and XMPP4R Ruby Gem, I was off and running. With help from someone who's done this before, I was able to communicate with the server very easily. I'll be sure to post progress and I get deeper into this. By the way, if anyone's been following my Rails progress, I'm sure I'll be back to finish this at some point. As I've written before , the database design is flawed and will not scale well. We've just bought a little more time before these issues bubble up again.

OLPC and Free Wireless

I was glad to hear mention of OLPC (One Laptop Per Child) in a podcast I listened to early this week. OLPC (a.k.a. the $100 laptop) is an organization whose goal is to provide inexpensive laptops to children for education. Integrated collaboration is one of the key features offered in these laptops. The belief that information and ideas are meant to be freely and openly shared is a core principal of open source software... and it's revolutionized the software industry. Allowing children to learn the value of this openness firsthand, will hopefully lead to a more open and collaborative environment in other fields (government for one) when these children enter the workforce as adults. To help foster these ideals away from school, children will need access to the Internet at home. Fast and cheap, widespread Internet penetration needs to improve. In the neighborhood I live there is one broadband provider and it's rather expensive - making it out of reach for many lower inco

Back Riding Rails

Thankfully, I'm done working with Hibernate for a while and I'm back on Rails. Since I posted on FRail :include , it seems there has been a lot of plugin development to add this functionality. While all of these plugins help to address the problem, I'm having a hard time finding one to address my specific scenario. I think I've explained my situation before, but here it is again in a nutshell. The company I work for aggregates a lot of data. The goal of my application is to allow users to sift out the information they don't need, discovering nuggets of truly useful knowledge. The approach we're taking is to have users to start from something they're interested in, and use that object to find other objects with similar attributes and characteristics. What I really need from Rails is a robust way to join a lot of tables together and specify search criteria. I've decided to roll my own solution for now. What I'm developing in Rails will take in o

TV Innovations

I love TV. Granted there's a lot of garbage content, but there's also a lot of great content. Since the VCR, it's been possible (although clumsy) to time-shift your TV programs - watching the programs you want, when you want. Things like TiVo and DVR provide a cleaner interface to this functionality while adding useful new features like "pause live TV". The problem with these technologies is that you need to know the programs you want to watch in advance . If you've just discovered a new series and want to watch previously aired shows, you''ll need to wait for the TV network to rebroadcast (or for the episode to be released on DVD or iTunes). Enter Move and Joost . These new products offer the promise of time-shifted, on-demand TV, offered over the Internet. Both these products allow the owners of the content (networks) to control distribution, so there's no YouTube-like copyright worries. Joost works more like a file sharing system (think


Migrating my application from Hibernate to Rails has taken longer than I expected. An important client has expressed performance concerns with their release, so I spent the last week looking for ways to tweak the current Hibernate implementation. It has been very frustrating. I don't like to cast blame or plead ignorance, but prior to this exercise, my experience with Hibernate has been limited. The module containing our Hibernate calls was authored by someone else and I've been mostly a client of this module. It wasn't until I looked at our query log in detail did I notice how poorly this module was written and how confusing Hibernate is. When seeing the large amount of queries in the log (often for data not needed in the current view), my first thought was, "we must have a problem in our models... something is causing Hibernate to eagerly fetch related data we have no immediate need for." I went through our models and, indeed, I did find some simple changes

Times of Change

Last night, Nova featured the life and contributions of Alberto Santos-Dumont , an early inventor of airplanes and dirigibles. In addition to Santos and the Wrights, the early 1900s brought forth other great inventions from Edison and Tesla, and marked the rise of the automobile... things that are cornerstones of our lives today. I've always looked back at this time period in wonder and amazement. In a short period of time, the world was turned upside down. The way people travel, communicate, and got their news was forever changed. I'm happy to be, 100 years later, living in a period similar of similar innovation. The proliferation of Internet has revolutionized the way people meet, shop, and communicate. Innovations like social media and RSS allow individuals to take a more active role in media they consume (not only what, but when). And it seems we're finally making strides identifying clean, renewable energy sources. It's my hope that the contributions we'

Technology Shakedown

David Berlind recently started a new podcast series entitled " Technology Shakedown ". In it, he exposes technology that isn't as good as it could be. He talks about products that work great 80% of the time, but provides major headaches the other 20% - when the average user can't figure out why the product is misbehaving and must spend time concocting convoluted workarounds. A much better description can be found here . Apple has rebuilt it's business capitalizing on the shortfalls of mediocre technology products. A superior experience is the reason people will shell out $150 for an iPod compared to $30 for a generic MP3 player. And it's the same reason Apple can charge a premium for a Mac compared to the average Windows computer. People love Apple because their products simply work the way they're supposed to - making their users lives more productive and enjoyable. Why more product managers don't comprehend this is beyond me. ***** The discove

FRail :include

I really like developing with Rails, but I've been frustrated the last few days by some things Rails should do quite easily, yet doesn't. I've already written here and here about some of my struggles with Rails :include clause. Here's one more... Let's say you have a has-and-belongs-to-many relationship. If you :include this relationship in a find query, Rails will automatically create the join clause including the lookup table! That's cool. Unfortunately, it looks as if only the :include clause provides this piece of functionality. Why isn't the same functionality provided via the :join clause or through a general purpose module? This doesn't make any sense to me! I'm working on a database application where I don't need to display a lot of data, but the data displayed is heavily filtered by it's connections to other information in the database. I need to join a lot of tables to perform the filtering operation and using :include


I wanted post a quick note about new technology I heard about today via podcast . The technology is freebase created by Metaweb . As you might guess from the name, freebase is a free database for the web containing all sorts of information contributed by users. In other words, it's a huge Wikipedia-style database that anyone can contribute or query to find interesting (and possibly little known) information and relationships between seemingly unrelated objects. For instance, assuming the information is in the database, I could query to find "all wooden roller coasters in the northeast longer than 5200 feet." That's pretty cool. Assuming I found some results, I could whittle down the set further, looking for which roller coasters have been ridden by Rock Stars or with lower height restrictions (so I could ride with my daughter). Because the data can be contributed by the average person, the breadth and depth of the information to search for will grow quickly (an