Ontology Teaser
Sorry everyone for not blogging as much lately. It's just I've been having more fun with Ruby and Semantic Web stuff than anyone should legally be allowed to have. Today I made a conceptual breakthrough which is too exciting not to share right away. So, here is my teaser challenge: Can you figure out what the following code does and why I believe it is a significant development?
require 'rexml/document'
include REXML
class OWL
def initialize(url)
XPath.match(Document.new(Net::HTTP.get(URI.parse(url))), "//owl:Class").each do |e|
eval("#{e.attributes['rdf:ID']} = Class.new")
end
end
end
Right now I'm fleshing out the code and also making it a module instead of a Class. Having trouble figuring out what my fuss is about? Okay, think Rails' ActiveRecord API, but instead of dynamically interfacing to a database, this code dynamically interfaces to an ontology.
Why is this cool? I'll leave it up to your imagination, but hopefully the following screenshot might get your futurist juices flowing...
A much better explanation of the concepts behind this snippet is forthcoming tonight, I promise!
( Jun 14 2005, 10:57:26 PM EDT ) Permalink Comments [2]
Sending Old Computer Books to Nursing Home
I'm moving at the end of the month, so I've been gradually packing stuff in preparation. Today I finally tackled my big wall of books. You know, it really gets tiring lugging around obsolete books. They're heavy and take up valuable shelf space. So, for the first time in my life, I am disposing of a good number of older titles. I've fit them into a large suitcase that will fly up to Chicago with me next weekend. There they will live out the rest of their natural lives peacefully in the ThoughtWorks corporate library. It's funny how attached you can get to certain books though. There were a number of these that are completely useless to me now, but bear emotional attachment because they represent a particular stage of my career.
I selected 35 books for retirement. Here is a partial list, mostly for my future reference:
- designing web graphics.2 - lynda weinman
- Dynamic HTML - Shelley Powers
- O'R Palm Programming
- Graphic Java Mastering the JFC
- Software REUSE Techniques - Carma McClure
- Using Project 2000
- O'R Java Language Reference
- O'R Learning VBScript
- Practical Analysis & Design for Client/Server & GUI Systems - David A. Ruble
- Local Area Networks (and) Information Engineering - James Martin
- Introduction to C Programming - Collopy
- Designing XML Internet Applications - Leventhal
- O'R Programming Perl (second edition, kept the third)
- Practical Programming in TCL/TK
- O'R Java Fundamental Classes Reference + AWT Reference
- OO Client/Server Internet Environments - Amjad Umar
- Web Authoring Desk Reference
- CGI Internet Programming with C++ and C - Felton
- C by Discovery - Foster
I have such a hard time parting with books. As I compiled this list, I ended up pulling two books back into my permanent collection: 1) the classic 1999 O'Reilly title Enterprise Java Beans by Richard Monson-Haefel and 2) from 1997 Peter Coad's Object Models - Strategies, Patterns and Applications (autographed!).
( May 14 2005, 02:24:59 PM EDT ) Permalink Comments [0]Ruby Presentation Available
My presentation about Ruby and Ruby on Rails was well-received by the Atlanta Agile group on Tuesday night of this week. We had 30 people show up, which is A LOT given that the venue is pretty far outside city limits (Windward Pkwy in Alpharetta). The bulk of the group, I'm happy to say, stayed for at least 2 hours of my enthusiastic hopping around and interactive demo based loosely on the Todo list tutorial you can find at the RoR website.
The presentation is available online. I'll be giving an abbreviated version of it on Friday 5/20 at the ThoughtWorks home-office day, and I will be in Chicago for that entire weekend. Any Railers in Chicago want to hang out?
( May 12 2005, 11:45:48 PM EDT ) Permalink Comments [1]
Canvas Tag Brings Down Microsoft
Stefano is very excited about the introduction of the canvas tag in HTML and I don't blame him. I've been waiting for something like this to come around -- among other things it lets you do neat graphs and charts dynamically on the browser.
( Apr 28 2005, 04:37:50 PM EDT ) Permalink Comments [0]
Media Convergence Continues
I know this is kind of off-topic for my blog, but it struck me as an interesting sign of the type of convergence that is reshaping the media world very rapidly. If you think your broadband is expensive now, just wait a couple of years. Read on...
Turner Announces GameTap
"Turner's lifeblood is creating branded networks and we are excited about the opportunity to create an immersive environment for games following our success with other branded environments like CNN, TCM and Cartoon Network," said Andrew T. Heller, president of domestic distribution for TBS, Inc. "With GameTap, we are bringing to games what we brought to cable television: compelling, branded environments where beloved properties live on."
For GameTap, Turner has licensed nearly 1,000 games from 17 publishers. The service will launch with 300, and then roll out new titles and programming each week. Programming is created expressly for GameTap -- coming attractions and behind-the-scenes peeks that introduce the games and provide background information.
So in essence, they are creating the equivalent of a cable-channel that serves up video games, at a subscription price. As these offerings multiply, I can see our broadband connection turning into some sort of next generation cable tv service. Your basic broadband package may include internet access as we know it now, but premium content would command additional charges to your bill, just as you pay extra for HBO, Showtime, etc. on our cable bills now.
I'm not quite sure how I feel about this sort of thing.
( Apr 27 2005, 02:29:21 PM EDT ) Permalink Comments [0]
Adaptive Path Strikes Again
First Jesse James Garrett's coins the term AJAX, now their CEO Janice Fraser brilliantly captures the optimism that is cropping up everywhere. Check this out...
Read the entire essay"The Web as we know it is changing probably more than it has since the first graphic showed up? The idea of the webpage itself is nearing its useful end. With the way Ajax allows you to build nearly stateless applications that happen to be web accessible, everything changes."
What will happen when amateurization and folksonomies make their way into enterprise web applications? What happens when IT managers can tag Oracle?s product documentation with their own words? Where will our bookmarks go when the idea of the ?webpage? becomes obsolete?
Invention inspires invention. Ideas are collapsing into each other, recombining, and having powerful effects. The Internet has always been a medium for democratization, and by reconnecting with our idealism we?re once again uncovering its poetry, nobility, and transformative power.
If you?re not yet amazed, inspired, and a little anxious, you might want to consider it. Then get a good night?s sleep and perhaps take a rejuvenating vacation. We?re going to look back at Spring 2005 as a milestone. Watch closely, ladies and gentlemen. Things are about to change in a very big way.
( Apr 21 2005, 08:24:08 PM EDT ) Permalink Comments [1]
Gift from Flickr
As if I didn't love Flickr enough already, I just got the following email from them... RIGHT ON!!!
Hi Obi Juan Kenobi! You may have heard on the grapevine that we planned to reward our dear Flickr members who bought a Pro Account in the early days. Well, it's true! And since you're one of those lovely people, here's a little something to say YOU ROCK! 1. Double what you paid for! Your original 1 year pro account has been doubled to 2 years, and your new expiry date is Feb 22, 2007. 2. More capacity! Now you can upload 2 GB per month. 3. 2 free Pro Accounts to give away to your friends! This won't be activated for a day or two, but when it is, you'll see a note on your home page telling you what to do. Thank you so much for putting your money where your mouth is and supporting us, even while we're in beta. Your generosity and cold, hard cash helped us get where we are today. Kind regards, The Flickreenies.( Apr 18 2005, 10:57:16 PM EDT ) Permalink Comments [0]
Rails: Beyond the Hype
One of my favorite bloggers, Charles Lowell had this to say, among other things...:
That said, what sets rails apart is how well each of its strangely familiar pieces are written, the cohesive manner in which they are put together, and the rich and flexible interfaces of its core components. Sure, there are bugs, but at least it's open source, so you can always fix them yourself. All the "waste-of-your-time-should-be-easy" stuff really is easy, and to borrow a favorite theme of the Perl community, the hard stuff is still way possible. Rails is nothing new. It's just a whole lot of old stuff done in a way that seems to be approaching right.Definitely go read the entire review. Charles says the hype is both warranted and not and provides good reasons.
( Apr 17 2005, 12:33:10 AM EDT ) Permalink Comments [0]
Ruby on Rails Scalability? Anemic Domain Models?
While reading Cameron's rebuttal to Jon, I came across the following gem in the comments:
Just bear in mind, livejournal's case when you worry about the scalability of scripting languages and fastcgi
http://www.danga.com/words/2004_lisa/lisa04.pdf
Specifically, their perl+fastcgi+mysql solution scales to 50 million page views a day, 1000 per second at peak. The vast majority of enterprise projects will never hit anything like that level of usage. Ever.
All the tools they [ed: LJ] use are also available to RoR developers.
Posted by Michael Koziarski on April 13, 2005 at 02:40 AM EDT
The argument kind of fizzled out at that point. I don't think anyone is suggesting Rails for those applications anyway. Not yet. Michael's blog is well-worth a read. He's not hyping Rails, but he did post an interesting writeup about the bla-bla list vs. tada list affair which will interest Java programmers who are frustrated by the abundance of anemic domain models.
Your humble fowlbot, Obie
( Apr 14 2005, 06:38:27 PM EDT ) Permalink Comments [2]
Instant Messenger Considered Beneficial
Every once in awhile I'm reminded that not everyone knows the productivity benefits of letting people use IM at work. For example, my old employer MediaOcean in Atlanta, recently prohibited instant messenger use. (The paranoia runs deep, Jim.) Anyway, on my current project I've been working with some folks from continental Europe and the time difference can be a big impediment to productivity. This morning one of the guys over there signed up for Yahoo and we've been chatting it up for an hour. What a difference! I now know what's going on over there and have a much better picture of what they're doing. Would you believe my stress levels have dropped significantly as a result!? :)
Desperately needed tying up of loose ends...
obie: i'm glad we can IM now
chris: I've had it for 10 minutes, and we've already made 2 decisions
Followed by an hour of additional decisions and a bit of getting to know you discussion with a virtual team member that I might never meet in person...
When it comes to facilitating intra-team communication, nothing works better than IM. You can get quick answers to quick questions, leave messages for people that are away from their desks, tell someone something without interrupting their conversation with someone else, etc. The list goes on and on.
( Apr 14 2005, 09:41:24 AM EDT ) Permalink Comments [3]
Whipped By the Long Tail
The Long Tail is all about the fragmentation of markets into many niches. There is certainly excitement over the significance of long tails with regard to the software business. Millions of markets of dozens sound pretty cool, especially if you are a vendor that caters to a niche market. I think it is has always been particularly easy to discern a long tail when it comes to open-source projects; there are thousands and thousands of them, but only a small number ever reach widespread popularity. I'm not sure (yet) where to get accurate statistics, but I think if you plotted popularity and activity levels of a particular category, you'd find a typical power-law distribution as illustrated in the graphic above. Of course, my example category for this write-up is web application frameworks. The most popular one right now, judging by activity and popular interest, is without a doubt: Ruby on Rails. While it is difficult to say one technology is superior to a competing one (without getting biled anyway), popularity is a whole different story. While I can't conclusively prove that Hibernate is the absolute best persistence framework, its popularity is a multiple of its nearest competitors. This gives it a significant, perhaps undefeatable advantage in many ways.
Back to the topic: Whereas a long tail is generally considered a great thing in terms of consumer choice, I propose that it is very cruel indeed to open-source projects (and their authors) that strive to achieve popularity and critical mass. Success in the open-source world is complicated, but popularity is one of the most crucial factors involved in refining your software. Why? Because without popularity it is doubly hard to get talented contributors or a large number of users. Diverse talents among your contributors is not only good for the code, it is how you end up with excellent documentation also. Think about it for a second. Programmers don't generally like to write documentation. In fact, they're generally pretty bad at it. As I've been discussing lately, programmers are usually not very good at graphic design and usability either. Unfunded open-source projects therefore need to become popular enough to at least attract a couple of people that can help with documentation and making sure the project looks good to the outside world.
The barriers to launching an open-source project are pretty low. Any geek with some time on his hands and an idea can launch a new project. However, as the number of projects grows year by year, it becomes harder to gain visibility, to stand out from the crowd. That said, I think projects that target a small niche usually do fine, provided they have dedicated authors. Remaining small has its benefits. It makes it is easier to reach a stable completion point, suitable for production. Still, it is the rare project that makes it to production quality. Usually, the author(s) loses interest or runs into obstacles that stop progress. At that point, the project may fall into obscurity, sometimes even before it is even released, and not be used by anyone. The people that really get burned are the early adopters of these projects, who end up stuck with an incomplete and low-quality component in their system. Piss off enough early-adopters and you're toast.
As was pointed out to me today repeatedly, there are interesting Java-based web frameworks out there. RIFE is one of them, and worth checking out. The problem is that damn long tail. There are so many other offerings, that it is difficult to make a good decision on which to use. This is what I mean by being whipped by the long tail. The competition between projects dilutes the talent pool available as contributors, and the end users end up discouraged by the difficulty of evaluating all the alternatives available (and ultimately decide to just play it safe and go with Struts.) Worse yet, loud-mouthed early adopters (read: crazy people) decide to actually base their project on your framework and then bitch and moan when they find that the documentation is poor or can't get you to fix bugs quickly enough.
Notice the long tail doesn't really take into account technical criteria. It is pretty much entirely about popularity. If my assumptions above are accurate, then Struts is the destined to be on top of the Java heap for the foreseeable future, despite being one of the least productive options at our disposal, and certainly among the least unsophisticated. That's why it makes perfect sense to me that a major innovation and source of excitement could only come from a competiting framework completely outside of the Java web framework tail. To be fair, Rails should be plotted, not with Java web frameworks, but along with web frameworks based on other dynamic languages, such as Perl/PHP. Despite Rails being a very recent entry on that graph, Rails is looking like it will definitely knock off PHP and stay at the top.
Maybe the underlying reason that it is controversial to say Ruby (Rails) will ultimately displace Java as the preferred platform for web application development is because you would need to bring Rails over and plot it on the Java graph against Struts, Spring, etc. This is difficult to justify, period. There are major points of contention about how to actually make a valid comparison of frameworks on different platforms. Should Rails only be compared to other MVC frameworks? Or is it completely pointless to try to rank frameworks with such different technological underpinnings? Perhaps, but given the relationship between a project's popularity and its ongoing success, I already feel very comfortable evangelizing Rails and using it on my projects whenever possible.
( Apr 14 2005, 03:30:18 AM EDT ) Permalink Comments [1]
The Rise of the Designer / Programmer
The following link seems like a perfect example of the magic brewing in the Rails community. Just look at what happens when you get designers excited about programming.
ActiveRecord Cheat Sheet Even more good stuff...
The quality of all the documentation and instructional material being produced for Rails on a daily basis is certainly a big part of what all the fuss is about.
Amy Hoy, you rock my world! :)
( Apr 12 2005, 06:03:32 PM EDT ) Permalink Comments [0]
Did I Say Revolution? Yes I Did
Patrick, who I respect a lot for his contributions to opensymphony projects says there is no revolution and that there is nothing special about Ruby on Rails. Then he slings a bit of FUD by saying that Rails "depends on the MySQL ordering of columns". I'm not quite sure, but I assume he's talking about the default ordering of form fields shown on the views generated by the scaffolding scripts. There is a big difference between a dependency on something and default behavior, particularly what is generated by Rails scaffolding.
Blaze, a regular in #rubyonrails put it a lot more eloquently...
The scaffolding uses the ordering of columns for the order it displays stuff, but just like when you are building a house, the scaffolding is there just to get you started, and by the time the house is built there won't be any scaffolding left
The revolution, in my opinion, is the confluence of strong OO talent with PHP programmers, who generally have a higher degree of creative ability and are primarily associated with web design firms. Rails represents the storming of this group into a market that's been dominated by grey box people.
With the technical playing field leveled out, more creative folks will have an advantage because they can produce better-looking apps, faster.
( Apr 12 2005, 11:44:38 AM EDT ) Permalink Comments [1]
Unabashed Ruby on Rails Enthusiasm
I've been logging a lot of time lately in #rubyonrails and following the RoR mailing list for a few weeks. I've got three RoR projects in active development and one of them is part of the billable work I'm doing. This recent interest in Ruby is a marked shift for me, since I have spent the last seven years doing serious Java coding and application design, both J2ME and J2EE. I still advocate Java solutions, particularly on the server-side, but I've always been somewhat of an artist. Since my start in software, client-side architecture and application design have always been of particular interest to me. Information architecture and usability are my favorite passions in software, and over the last three years in particular, I've been lucky enough to get to do a lot of browser-based rich client stuff, learning quite a bit of Javascript and DHTML in the process. It is from that perspective, that I have been thinking a lot about the implications of Ruby on Rails becoming the preferred platform for web application development, particularly how it will impact the careers of web developer who lack design skills.
A lot of Java programmers I've met over the years look down their noses at our brethren in the web design arena, almost like they aren't really programmers or don't deserve to be considered in the same field. Even within a heterogeneous development shop, the UI designers and graphic artist generally make significantly less money than even the most junior programmers. Well those guys are not using real languages, are they! They're using crap like PHP, Perl, Cold Fusion, JavaScript, etc. I'm purposely exaggerating for emphasis, but I have met plenty of Java people with that snobby attitude. If you can even get them to work on a web application, they will say something along the lines of "I'll do my job and the graphics guys can do theirs".
The irony of the situation is that these Java folks, including myself here sometimes in case you wondered... we sometimes bask in that superiority complex, yet get away with committing some of the worst spaghetti code imaginable, especially when we are subjected to unreasonable time constraints. Catastrophic failure and bug reports aside, your typical business stakeholder, the guy that actually sponsors the project and pays the programmers has no way of directly judging the quality of Java code and that, my friends, is a freedom that is totally taken for granted.
On the other hand, the stakeholders and everyone else in the world can indeed judge the work of a designer. All you have to do is look at it. Human nature gives us the ability to discern good design elements, even though we might not have the talent to recreate it ourselves. But to be a good designer, you have to have talent and passion. You can't be a good designer without passion, but you can be considered a good, reliable programmer and have no passion for software whatsoever. That's my personal theory on why the talent and passion levels seem so much higher at design-oriented programming firms like 37signals. It's the reason I choose to work for ThoughtWorks: our company culture celebrates software design coupled with a passion for excellence. It is the main reason that I'm so excited about Ruby on Rails.
So that brings me to one of my main premises, namely that a lot of the guys that are getting involved in Rails are these very same design folks who know their way around Illustrator and Photoshop. They understand the principles of graphic design and pleasing visual layouts. Usability and user experience is second-nature. They understand the importance of appearances.
Aha! There's another thing that designers know innately, but a lot of us programmers don't grasp (or cannot admit). Appearances are all-important. You can have the best technical infrastructure in the world, the finest test-coverage, the best-factored code ' it won't matter one bit if your user interface looks like crap or lacks usability. The majority of users, and more importantly, the stakeholders paying for the project, who are probably non-technical, they will look at it and say 'this is crap'. However, take the worst of the worst server-side code and put a beautiful user interface on it and most of the time you get away with it. In fact, sometimes you don't even need server-side code. Design a good-enough looking prototype and you might even get your client to pour millions of dollars down your throat trying to get a production version.
My point is that the situation brewing does not bode well for average Java web developers, not at all. First of all, there are dozens of Java web application frameworks and they all SUCK. Some of them suck less than others (WebWork2) and some of them are just utter crap (Struts). Not that they're going to get any better either. The market is so fragmented that it practically guarantees none of them will reach excellence. Let's be honest with ourselves, the best thing we have nowadays in Java is Hibernate, and maybe IntelliJ. So the day that Gavin or JetBrains decide to write a rapid-application development framework like Rails, I might have to re-evaluate my stance, but for now you should expect Rails to reach critical mass by next year and completely overwhelm the Java web application market in both mindshare and talent pool by the end of the decade.
Why? Because of the design people I was blabbing about earlier. The design people have better tools than anyone else. These guys can understand elegance of design, both visually and expressed as patterns in code. Right now masses of these types of developers are pouring into the Rails community from the PHP (and similar) communities. They bring with them considerable design and usability skills that complement their programming sometimes elementary abilities. They are introducing kick-ass AJAX components and eye-candy that are being incorporated into the standard Rails toolset as we speak. The nubys that do not have OO programming experience are being helped by Ruby old-timers and the other significant group of developers streaming into the Rails community: senior Java developers looking for something better that what we have to deal with now. This is a historic confluence of talent that will continue to grow and synergize. So don't believe those cynical idiots who tell you the popularity of Rails is just a transient fad that will be gone tomorrow. Ruby is a mature platform, FastCGI is applicable to the enterprise and Rails is already arguably better than everything else out there before even hitting 1.0 version.
All we need now is a good Ruby IDE and the revolution can begin in earnest. ¡Que Viva la Rubylucion!
( Apr 12 2005, 03:42:18 AM EDT ) Permalink Comments [16]
Win Big with Ruby on Rails
I'll let you in on a little secret. I recently scored major points with my client by bringing in Ruby Rails, as the platform for a strictly non-production application. If you are wanting to incorporate Ruby into your toolset within a primarily Java or Microsoft development shop, read on...

What you're looking at above is a screenshot from what Hank (see link above) referred to as a simulator. It is meant to give members of the team a fun way of generating realistic sample data sets to feed into the production system that we're writing. You see, I feel like one of the biggest obstacles faced by product development shops is a scarcity of accurate sample data. By accurate I refer to:
- adherence to the business domain rules
- realistic amounts of sample data (realistic often meaning thousands of rows)
- realistic variance of sample data
I've noticed that developers are often content to add a few records to their development database instances or functional tests and feel comfortable that their code will be acceptable when put into production use against a wildly different data environment. So the challenge is how to actually generate sample data if you don't have a source of legacy (or actual) data to use during development and testing.
My current project is a web portal that is fed xml data from a number of third-parties. I know I won't be getting feeds of real data anytime soon and certainly not before our first releases are due. So rather than make myself or some poor business analyst sit there and plug in sample data, I took advantage of Ruby on Rails to rapidly build a web application that facilitates creation of sample data, as I described above. The way it does that is by accurately simulating one of the businesses that we have to integrate with, namely an industrial bakery.
Since the data sent to us is gathered during the operations of the bakery, I let my imagination run free a bit and decided to have some fun. If I was writing a web-based computer game simulation of an industrial bakery, what would it look like? Well, it would have to have rich graphics and it would need to have bounded random data generators which facilitated a click-driven approach to running the bakery. Nobody likes sitting there and making up numbers to type into boxes, nobody. My example screenshot above shows the screen where you, running your virtual bakery simulation receive deliveries of raw materials used to make bread. I used google images to find appropriate graphics and leveraged the fact that CSS and Rails make web app development so easy! Instead of listing rows in a plain HTML table, I actually overlay the data on top of a graphic of an actual packing slip.
Fun little usability tricks like these would probably be frowned upon by some managers, but maily if you spent a significant portion of your budget writing them or they proved a distraction from the main deliverables. However, thanks to Ruby on Rails, I was able to throw together my first version of this simulator in one evening. Another day's worth of work and the simulator was providing both the data push and query capabilities necessary to fully emulate the remote system used by our portal. We spend a few minutes playing around with the sample data generator and then push it over to a development box. Bingo! Realistic sample data to develop against, and a huge win from the client's perspective.
If you are looking for way to bring Ruby on Rails into your project, using it to write small non-mission-critical apps like sample data generators may be a perfect way to get it done.
( Apr 09 2005, 06:07:40 PM EDT ) Permalink Comments [0]
