Another bug report about this blog concerned various details of the RSS feed. I gave up on RSS readers soon after I started using them because of the overflow of information they generated. I find that twitter now provides a good flow of links to interesting stuff, that is auto cleansing. (And it appears RSS might be going out of fashion in general.)

Anyway, my excuse for never looking into the details of RSS. Based on a little study of the RSS 2.0 Specification I refined the feed definition of my blog application. It should be quite reusable in other WebDSL applications, although I couldn't figure out a way to make it completely automatic. Actually while writing that last sentence I got an idea for improving abstraction, which I'll discuss below.

While testing the improved RSS feed, I got back into RSS reading. The tricks seems to be in not subscribing to too many feeds, and in particular to avoid the high volume feeds generated by news organizations.

Read more

The difference between two data models in the evolution of an application can be expressed in terms of primitive edit operations such as addition or removal of elements. However, these low-level edit operations don't express the intent of the evolution and are therefore not suitable as starting point for database migration. In this paper, which has been accepted for the SLE 2011 conference, an algorithm for reconstructing complex evolutions from a primitive evolution trace is presented.

Sander Vermolen, Guido Wachsmuth, Eelco Visser. Reconstructing Complex Metamodel Evolution. In Uwe Aßmann, Anthony M. Sloane, editors, Software Language Engineering, Fourth International Conference, SLE 2011, Braga, Portugal, July, 2011, Revised Selected Papers. Springer, 2011.

Abstract Metamodel evolution requires model migration. To correctly migrate models, evolution needs to be made explicit. Manually describing evolution is error-prone and redundant. Metamodel matching offers a solution by automatically detecting evolution, yet detects primitive evolution steps only. In practice, primitive evolution steps are jointly applied to form a complex evolution step, which has the same effect on a metamodel as the sum of its parts, yet generally has a different effect in migration. Detection of complex evolution is therefore needed. In this paper we present an approach to reconstructing complex evolution between two metamodel versions, using a matching result as input. It supports operator dependencies and mixed, overlapping and incorrectly ordered complex operator components. It also supports interference between operators, where the effect of one operator, is partially, or completely hidden from the target metamodel by other operators.

We are adding support for definition of refactorings to Spoofax. An essential ingredient for refactorings is that the layout of the transformed program is minimally affected. In this paper, which has been accepted for the SLE 2011 conference, we present an algorithm that reconstruct the text of a program after refactoring, using the layout of the original program where possible.

Maartje de Jonge, Eelco Visser. An Algorithm for Layout Preservation in Refactoring Transformations. In Uwe Aßmann, Anthony M. Sloane, editors, Software Language Engineering, Fourth International Conference, SLE 2011, Braga, Portugal, July, 2011, Revised Selected Papers. Springer, 2012.

Abstract Transformations and semantic analysis for source-to-source transformations such as refactorings are most effectively implemented using an abstract representation of the source code. An intrinsic limitation of transformation techniques based on abstract syntax trees is the loss of layout, i.e. comments and whitespace. This is especially relevant in the context of refactorings, which produce source code for human consumption. In this paper, we present an algorithm for fully automatic source code reconstruction for source-to-source transformations. The algorithm preserves the layout and comments of the unaffected parts and reconstructs the indentation of the affected parts, using a set of clearly defined heuristic rules to handle comments.

I continue with the exercise of building a mobl application for this blog.

Read more

Today's exercise: build an application in mobl for this blog, which supports offline reading of blog posts. I'll record my progress here.

Read more