Saturday, August 29, 2009

The rise of DSLs and Language Oriented Programming?

A few days ago, JetBrains pushed a new EAP release of their new issue tracking product “Charisma”. Apart from the fact that it has a nice and easy to use interface, what got my attention is the fact that it is powered by “MPS” (Meta Programming System). MPS has reached its first Milestone (v1.0) one month ago, July 23rd 2009.

MPS is what Martin Fowler called a Language Workbench. It is free and open source and offer an interesting new approach for creating DSL and languages extensions on top of Java (also referred as External and Internal DSL respectively). You can read the article that JetBrains posted on DZONE where they outline why they’ve created MPS.

Apart from JetBrains, others are also preparing new products. Intentional Software, recently made a public demo of their Language Workbench which runs on top of .net. Microsoft with “Oslo”, presented during the last PDC (2008), is also making progress and the latest CTP of Olso was released in May 2009. Among the interesting projects that you can find in the “M” Language Gallery is MetaSharp and its sister project NBusiness

After going thru the MPS Tutorial, you get a better idea on what you can do with a Language Workbench. However you’ll also realize that JetBrains’ statement “ According to our experience, it takes about 2 weeks in order to become productive with it.” is probably valid. The main challenge being that we are not used to editing the Abstract Syntax Tree (AST) and too used to text representation.

Even though it might take some time to get familiar with it, now that MPS is 1.0, it is time to play with it. JetBrains already said that Charisma was the first product developed using MPS but that more products will follow. I think we will now see why the Fabrique project ended.

In the Cloud, Force.com is also leveraging Meta Programming and it is clear that for Business Applications and CRM related Applications the productivity boost is very attractive. Others PaaS, such as LongJump, BungeeConnect or Zoho Creator have been following SalesForce.com leadership.

Even though DSL have been around for quite some time, not many decide to build a full DSL. Developers however are using them to improve productivity. LINQ is a good example of an extension to the C# language that is now widely used. Ruby metaprogramming leveraged by the RoR framework is another example. So with those new Language Workbenches that JetBrains and Intentional Software are releasing it would not be surprising if we witness the rise of DSLs and Language oriented Programming very soon.

Thursday, February 12, 2009

Continous Integration with FlexUnit and TeamCity

I was trying to get one of our Flex projects to run on our Continuous Integration Server: TeamCity. Flex projects can be easily built by TeamCity using ant as the Build Runner and the "FlexAntTasks" but once it comes to executing the Unit tests, there's no direct support for it. Googling around I found someone with the exact same problem.
The guys at Catalysts posted a link to Peter Martin's Ant Test Runner and source code for a patched version of FlexUnit that can report to TeamCity.

Next challenge: Try to get Silverlight Unit Tests to work with TeamCity.

Saturday, January 31, 2009

SaaS Customer specific modifications - Lessons learned

After various years of maintaining SaaS applications, I've learned various things, one is that you sometimes have to add feature(s) just for one customer. Some will say that you should avoid those at all costs as it breaks the economy of scale but small SaaS ISVs sometimes do not have a choice if they want to stay in business.
37 signals explained that you should be careful to not let your customers drive, they mention that many people have been asking for Gantt charts in Basecamp and that the answer has and will always be no because it's not aligned with their view of how project management should be handled and how their software should be used. I could not agree more...

Now, if you do have to add a small feature for one customer, you might be tempted to add that feature in a "quick and dirty" way. Maybe hard code it based on the tenantID or add the setting to the database but do not create a UI for managing it, to try to save on development costs. I'm sure you'll have pressure coming from the sales person that want that feature right away and at the same time a tight budget.
So when that happen and you start to think about hard coding, think twice. First, because that feature will be buried into the code and the QA team will have to remember that this feature is enabled for that Tenant only, not to mention that in your QA environment you'll have to create that special Tenant to be able to test the feature. Second it's easy for a developer to break that feature without noticing and if you're not so lucky, your Unit Tests and QA team could let the problem slip up to the customer.
Adding the setting to the database and managing it just like any other feature but without a UI can be seen as valid and less problematic but still your QA team will complain and might end up forgetting about that feature (intentionally?)
After some time, I've seen how many of those custom features ended up becoming real features used by multiple customers (I'd say maybe 30%), so always take into account that maybe that feature will be enabled for multiple tenants/customers and also take into account that maybe that feature will disappear either because the customer that asked for it left or simply because he is no longer using it. I'll even recommend running a poll if possible to try to determine if that feature could be valuable for another customer either as-is or with some slight modifications.

Interestingly, the customers asking for special features are usually the same and somehow when your company granted them one, they suddenly think it's always going to be that way and tend to ask for more and more up to the point where the number of custom features you've added for them outgrow their value and you have no other choice than to let them go knock the door of a competitor.

Some customers may have developers handy and may start asking you to open up your API more and more. Be careful about that too as at some point you might end up building a platform which is usually not your area of expertise.

At the end of the day, what you need to remember is that you should add features the right way or let the customer go. The ROI is not always clear and more than once you'll end up spending on a customer that will leave anyway...

Friday, January 16, 2009

2009 RIA Technology Trends

Since we are starting a new year, many of you like me, may start thinking about what technology will empower 2009's Rich Internet Applications. Various bloggers posted charts and there are even sites dedicated to doing those stats. I am not going to put charts here along with the usual disclaimer explaining that indicators are and will remain indicators. Instead I’ll provide links and info on how to have your own opinion and discuss it here.

Let’s first go thru a list of indicators that can be used.

  • Book sales: this indicator is used by O’Reilly and you can see their stats on O'REILLY Radar.
  • Number of pages containing the word: you can easily get access to that information from Google trends or using Yahoo API and the TIOBE Index will provide a consolidated from all search engines.
  • Number of job posting: A couple of sites can give you access to that information: Indeed or SimplyHired
  • Number of Hits on specific sites: you can see what LangPop.com did to give you ideas.

Once you have indicators you can start using them with some keywords. For example you can try to compare Flex, Silverlight and Ajax. Or compare Ruby on Rails, Python Django and ASP.net MVC. The fact is that RIA applications have a client side and server side technology so you should really end up with 2 lists even though not all combinations are possible.

Whether an indicator is valuable or not is up to you but I guess that if you’re looking for a job, the job postings indicator will probably tell you on which technology to concentrate on even though it might not be the most popular.

Here are my forecast for 2009:

  • I think that for the UI XHTML/CSS/JavaScript will remains on top, followed by Flex and Silverlight (Omitting JavaFX, XUL, Curl as they are small).
  • For the backend Java and .net seems to come first, with Java going down and .net going up. Second place would be PHP and third place Python Django, Ruby on Rails, ColdFusion with Ruby and Python rising.
Feel free to post your own as undoubtedly my forecasts are biased :D

Monday, January 12, 2009

Scio Consulting Partners with Apprenda for Rapid SaaS Product Enablement

It is now official, Scio Consulting has partnered with Apprenda to offer SaaS enablement services using Apprenda’s cloud OS “SaaSGrid”. You can read more about the partnership on the company blog and you can read more about SaaSGrid here.
Among other things, that platform is built with SOA in mind and will allow us to not only build ASP.net Ajax applications but Silverlight and Flex RIA leveraging WCF services. And all that without having to worry about billing, multi-tenancy, subscription management and so on, as those are bundled with SaaSGrid.
So well, expect to see, reviews, tutorials and code samples soon…

Friday, January 9, 2009

Quartz.net Final Release

A few years ago, I had to create a scheduler to run .net jobs on a server. I went that route because using the OS scheduler had some limitations and also because no scheduler was available at that time.
I am pleased to see that Quartz.net, a port of the Java app Quartz has now reached v1.0 and can be used in production environment.

I hope to be testing that application soon, and I'll make sure to post a small review.
Congratulation to the Quartz.net team !

Monday, January 5, 2009

MVC with Silverlight - Frameworks review

For those that want to build large applications or are using TDD for all their projects, the MVC pattern is often used to make the presentation code more testable.
Almost every development platform have frameworks to assist developers when building MVC applications. With Flex, Cairngorm is the most popular I think but what about Silverlight?
If you don't like frameworks, you can just do MVC without using any but if you'd like to leverage a framework, I've found 3 frameworks:
  • Caliburn
    Pros:

    • Support Commands, Actions
    • Includes a simple Dependency Injection Container
    • Easy to use, use of XAML
    • Small documentation available
    • Extensible, you can use another DI Container if you want.
    Cons:
    • Alpha quality and not yet feature complete.
    Comments:

    I think it's a good framework, that's the one I've selected for a small ShowCase in Silverlight and so far I'm happy with it even if it's an alpha build.
  • MVC#
    Pros:

    • Support for tasks (aka use cases)
    • Same code for WinForm,Silverlight and ASP.net can be used to create 3 applications.
    Cons:

    • No direct support for XAML and declarative coding.
    • Not built for Silverlight only.
    Comments:

    Even if called MVC#, it uses the MVP (Model View Presenter) variation. The fact that it's built to support Winform, Silverlight and ASP.net make it harder to use and you need to write more code compared with the other frameworks. I think it has been built for LOB applications and not really for RIA.
  • Silverlight.FX
    Pros:

    • Part of Silverlight.FX
    • Supports declarative coding
    • Lightweight
    Cons:

    • Limited features
    • Limited documentation
    Comments:

    For those that already have a reference to silverlight.FX in their application and don't need a fancy framework it will work well. You can even extend it if you want. Needless to say that it has been created by Nikhil and just like the Silverlight.FX code in general you can learn things by reading the source code even if you don't use the framework.