Ruby on Rails on Linux

5 07 2009

Being a Windows developer by day, it’s been interesting installing RoR on my Linux workstation.  Granted, it didn’t take a long time (and I love a good technical challenge) but launching a terminal and using a combination of “apt-get” and “wget” to download and install packages was very different from my usual experience of downloading an executable and simply clicking on it to install.  I could see how this be a turnoff to a diehard Windows developer.

Fortunately, there were a ton of resources on how to install RoR on Linux (Jaunty) that made things go pretty straightforward.  Now its off to working through a sample application – we’ll see how that goes.

If anyone knows of any good RoR resources, drop me a line.





Adebayor Goals

5 07 2009

via Arsenal Action.

I personally think he’s nowhere close to fulfilling his potential, but I doubt he’ll do it at Arsenal.  If he really wants to leave, they should let him go.





Enough Already!

2 07 2009

The post below is outdated because I actually forgot to publish it.  Maybe it has something to do with writing it in the wee hours of Sunday morning.  Anyway, the US subsequently lost to Brazil (3-2) in the worst way possible (if you ask me).  More to come on that.

The USA’s defeat of Spain (2-0) in football is being heralded by some as the greatest win even for US football.  All over blogsphere there is commentary on “what next”,  the uphill battle and Alexi Lalas is getting interviewed left and right.

Enough already!!

I concur that this was a good (maybe big) win for the US, but even a blind squirrel finds a nut sometimes.  In the game of football, there is always a chance that the “other” team can win.  Look at how South Africa was able to hold Brazil till the 88th minute of their game.  Does anyone really think that if the US played Spain 7 times, they’d win 2 games?  Let’s put some perspective to this.

Respect is earned.  How about the US consistently win some more big games? Dominate CONCACAF?  Win some U17, U20 tournaments?  Advance to the quarter-finals of a couple of World Cups?  The US will get all the respect it needs at that point.  Trust me.

Now don’t go lay an egg against Brazil today.  That would be completely humiliating!

In the span of 45 minutes, the  “respect” the US got from beating the Pharaoh’s of Egypt – a team that is dealing interesting news – and Spain, had been lost.  No elite team concedes 3 goals in the 2nd half when up by 2 at that level.  It just doesn’t happen.  The events of the 2nd half were even more unlikely than the US defeat of Spain (if you can believe that).

Anyway, progress for the country’s football program but how about we let some consistent results eventually speak for themselves?





New Ventures

25 06 2009

I’m looking to try something different from the technology standpoint.  When I was involved in academia in late 1990’s, I had the opportunity to work on different platforms with a plethora of different tools.  Since I became a professional, I’ve been stuck to the Windows stack  with major focus – in last 5 years – or so on .NET.  At least two distinct thing have happened as a result of that:

  1. I’m not as conversant with other technologies and tools predominantly being used in the industry
  2. My low-level technical skills are not as sharp as they once were – probably a topic worthy of another post some other time

So for starters, I’ve setup a machine running Ubuntu and I’m looking for suggestions on a technology stack for web development on Linux.  Any suggestions (besides Mono) are welcome!  Hopefully, I’ll find the time to actually pull this off and possibly share my experiences.





Football Recap

25 06 2009

Couple of things of happened in the football world worthy of some quick commentary:
1. Arsenal signs Thomas Vermaelen: Sounds like a good signing, but you need to do more Arsene!
2. Nigeria plays goalless draw with Tunisia: I’m really concerned with the Super Eagles chances of making WC2010. I guess we’ll see.
3. USA upsets Spain: Who saw that coming? (Egypt, please!!!)





The Art of Not Blogging

18 06 2009

It’s been almost a year since I’ve blogged on anything.  How does someone with a blog go for such an extended period of time without blogging?

Is it a reflection of how (un)important the art of blogging is to that individual?  I read dozens of blogs weekly on a variety of different topics (from software architecture and design to productivity tips).  Trust me, I get the value of blogs to the general public.

Could it be that I’m so busy that I don’t have the time to blog?  I always marvel at how people blog in the middle of the day.  Don’t these folks have a day job like I do or are they all entrepreneurs of their own startups? (I started this point at 6am this morning and finished it at 9:40pm).

Maybe I really don’t have anything to share, no great stories to tell, no opinions on all the other opinions being expressed on all the blogs I read, nothing rad or original.  Yeah right.

Do I simply not have enough commitment to the art of blogging?

Bingo. Jackpot. That has got to be it.  I can’t explain why else I could go months without a single blog entry.

So how do I grow my passion for blogging or is something that people are just born with?  Maybe someone can provide me with some tips on that.  Share what practices they follow to keep their blog going.   Who knows, maybe I’ll learn something.  If you blog about it, I’ll definitely read it.

Then I’ll need to figure that Twitter thing out.





Resource Linking

28 09 2008

There has been a plethora of commentary on the need to include “links” in resource representations.  In fact, Subbu has recently posted this and this on the very subject.  It’s obvious that the “web” works because of links that point to other resources.

However, the web would not work if representations (HTML pages being the most popular representation) had links that went nowhere and basically 404s were returned.  For links to be meaningful (really) they need to “link” to actual resources that return legitimate representations.  These links should be part of a general process/application flow for that (or set of) resource(s) and have some semantics to them.

I find the primary challenge with having representations return links is that most developers I know are not building new systems, rather they are introducing resources into a system that was not originally resource-oriented.  Having representations with links would mean exposing existing services as resources (and exposing it correctly).  This requires time and effort, time and effort many dev teams don’t have.

Because of the above challenge, documenting the resources a system exposes seems paramount.  I don’t have a strong feeling as to “how” these resources hould be documented.  But documented they should be.





WCF or ASP.NET MVC

5 06 2008

For .NET developers the current framework for developing RESTful applications (without resorting to custom HttpHandler’s and what not) is Windows Communication Foundation (WCF). REST-support is a feature that was added on late in the game and partially due to much pressure from the developer community. However WCF is one of those frameworks that is “all things to all men”. It’s the framework that allows any type of distributed communication (SOAP, MSMQ, binary over TCP/IP) making it (IMO) pretty bloated. Because REST was afterthought, resources are exposed using interfaces and ServiceContracts which doesn’t always seem very natural. Additionally, there isn’t inherent support for HTML (or at least I’m not aware of it) and even if your services don’t serve HTML representations, it should still be a format that could easily served (without concatenating strings).

Interestingly, Microsoft has revealed and released bits that they are working on an alternative to ASP.NET namely ASP.NET MVC. While this newer framework trumps up the fact that it allows developers to develop web applications using the MVC design pattern, what I find more intriguing is that as a framework, it allows development of services in a RESTful manner using a web framework (which WCF is not) that can serve all web formats. There are a lot of posts that talk about how ASP.NET MVC can be used RESTfully.

So the question I have is this: Why would anyone use WCF for RESTful web services once ASP.NET MVC is publicly available?





Speaking Technically

5 06 2008

One of the interesting things about being a technical guy is that daily I find myself having to communicate technical information to non-technical individuals.  Terms that are common lingo for me, mean absolutely nothing to them.  For example, what does “an asynchronous operation” mean to a functional designer or how do I explain why REST is important to a product manager?

I find that being able to explain technical terms or phrases to non-technical individuals is generally an indication of how well I understand what I’m actually talking about.  The best technical presentations I have heard have always had speakers who were able to explain the most difficult concepts in simple terms.  Good architects should be able to explain technical concepts in layman terms.  This is something I really need to work on.

Anyone have tips on how they do this effectively?





RESTful Versioning

30 05 2008

I commented on RESTful versioning as a response to Peter William’s post on the same subject matter as I found it interesting. Because versioning is a fact of life and we can’t avoid it even though Subbu thinks we should, it’s imperative to always architect services with versioning in mind. Now that I’ve pondered over this a little bit, I think I get why getting this right is extremely important.

Part of architecting for versioning includes talking to potential (or existing) customers and figuring out what input/output of the service should look like. Never architect without involving the customer base. Having said this, it’s highly unlikely that the inputs/outputs will never change. Change is inevitable and this is why there must be a very good versioning solution.

Right now there seems to be two proposed ways of supporting versioning: via URIs and through the use of custom media types. When the client is the human web, URIs are really the only option. It’s with the programmable web that there may appear to be a decision to be made.

The Programmable Web

With the programmable web, choosing between the using Accept header and custom media types versus a URI becomes a little more interesting because of “hypermedia as the engine of application state” (HATEOAS). Consider the base representation of a resource with a URI of “http://order/123″ that contains links to other resources.

<order>

<orderId>123</orderId>

<orderLine>http://order/123/orderLine</orderLine>

</order>

Now imagine that the resources evolve independently of each other, such that there is a version 3 of “order” and a version 2 of “orderLine” yet the resources remain linked. From a programmable angle, if the the service uses a URI versioning scheme (http://v1/order/123), the service provider probably tries to ensure that the representations always contains the URIs for the right versions of its linked resources. It would probably be fair to assume that version 2 of order links with version 2 of orderLine but that is assuming that the resources actually evolve together which may not be case. Additionally, what if a consumer has evolved to version 3 of order but is still satisfied with version of 1 orderLine and cares for no other version? The service provider falls into the trap of trying to anticipate the versions of resources that a consumer wants. This almost impossible to pull off in a system that evolves – and most every system evolves.

With custom media types, the client is responsible for specifying the version of every single resource that they want. The service provider is not burdened with trying to figure out what version of application state a client will try to navigate. It defers that decision to client. It only needs to know how handle version requests. The client could ask version 3 of order by doing this:

Accept: application/vnd.mycompany.myapp-order-v3+xml

and for version 2 of orderLine, doing this:

Accept: application/vnd.mycompany.myapp-orderLine-v2+xml

A good versioning solution should allow the client to specify what version of a service/resource they want to reference at any given time.

Versioning in RESTful systems needs to be done outside of the URI if the system is to evolve and allow its clients to evolve with it. URI versioning doesn’t seem to be much of an option, am I mistaken?