Posts

Ruby, XMPP, and Soap Web Services

I've spent a lot of time away from the office lately and haven't had much of a chance to post. Here's a quick update on what I've been thinking about. First off, the Ruby XMPP-bot I had started is complete. This was insanely easy to implement in Ruby. The only snag I ran into was in creating a new chat room with the bot. The 0.3.1 release of XMPP4R seems to hang when creating a new room. After some research , it was apparent that others experienced this problem and had already submitted a patch. Cool. My next job is to connect the bot to an application my company developed. Communication to this module has been done previously using CORBA. Unfortunately (or not), I have not been able to find an acceptable Ruby CORBA module ( Rinn looks like it's dead and R2CORBA does not appear mature enough). Recently many of our legacy CORBA API's have been replaced with Web Service API's and I'm going to take this approach with this module. While researchi...

QEDWiki

I've been hearing a lot of buzz about QEDWiki, which is being developed at IBM. QEDWiki is a basically a wiki that can host simple web components. At first glance, QEDWiki looks like a typical portal, displaying aggregated information from around the web in widgets. Think dashboards like PageFlakes or My Yahoo . I soon learned that QEDWiki is something completely different. My perception changed when I saw these widgets linked together, creating what IBM calls "situational applications". A "situational application" is a simple applications created on the fly using information provided through a web service. These applications can be created by business users, for business users - without the support of a development team - very much like the advanced Excel applications created and shared today by business teams. I see something like QEDWiki taking the place of these apps with Service Oriented Architectures (SOA) playing the role of the Excel "s...

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...

Hibernating

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 ...