Friday, December 12, 2014

"Clafer: unifying class and feature modeling" available on-line in Software & Systems Modeling journal

The paper (available from publisher's website) presents formal semantics of Clafer. It precisely explains how a single modeling construct (clafer) can play roles of features, feature groups, classes, attributes, references, associations, and association classes. The paper also explains inheritance, specialization, extension, and redefinition. The semantics is presented in a structure preserving way, that is, the shape of the model is preserved in its semantics, rather than being flattened into a multitude of FOL formulas.

Thursday, October 23, 2014

Clafer, ClaferIG, and ClaferWiki 0.3.7 Released

by Michał Antkiewicz

Clafer compiler, Alloy-based instance generator, and wiki 0.3.7 are released on Hackage (clafer, claferIG, claferwiki).

Major changes include:
  • added support for real numbers [clafer]
  • added not as a synonym to the quantifier no [clafer]
  • moved to the latest Alloy 4.2_2014-05-16 build by default. The .als files are Alloy 4.2 whereas the .als41 files are Alloy 4.1. [clafer, claferIG]
  • added integration with SublimeText 2/3 and VIM.
  • moved to the latest Gitit and Pandoc [claferwiki]
  • many technical improvements
For detailed changes see pull requests: Clafer, ClaferIG, ClaferWiki

Wednesday, October 22, 2014

Clafer syntax highlighter for VIM

by Michał Antkiewicz

Andrzej Wąsowski has contributed an integration of Clafer into VIM featuring
  • syntax highlighting for structural and behavioral Clafer, including marking simple errors
  • indentation based folding for collapsing parts of the model (experimental)
To install, follow the instructions in the README.

Thursday, October 16, 2014

Clafer Tools in Sublime Text 2/3

by Michał Antkiewicz

Clafer Tools get new and improved integration with Sublime Text 2/3, providing the following features:
  • Syntax highlighting of keywords, operators, comments, and integer and string literals
  • Compilation <CTRL>+b
  • Instance generation using
    • Alloy-based instance generator with simple scope inference <CTRL>+i, g, s
    • Alloy-based instance generator with full scope inference <CTRL>+i, g, f
    • Choco-based instance generator with simple scope inference <CTRL>+i, g, c
    • Z3 SMT-based instance generator with simple scope inference <CTRL>+i, g, m
The package Clafer Tools is now an official Sublime Text package available from the central package repository.  To install, follow the instructions in the README.

Thursday, September 25, 2014

Which new features would you like to see in Clafer?

by Michał Antkiewicz

We are thinking of implementing a few new features for Clafer. We opened a poll on the right, above the "Blog Archive". Please vote.

Here's a brief explanation of the features:

Monday, September 8, 2014

Tutorial on Domain Modeling using Clafer

by Michał Antkiewicz

On Aug 25, 2014, as part of the Domain-Specific Modeling Theory and Practice 2014 Summer School, Michał Antkiewicz presented a 6-hour hands-on tutorial on Domain Modeling using Clafer. This year, the school had a common domain: "Traffic Lights", and it was first modeled and analyzed using Clafer.

The tutorial is in the form of the Clafer Wiki 'Traffic Lights' Domain Model Example. It contains four parts:

  • Part 0: Introduction to Domain Engineering (slides)
  • Part I: Feature-Oriented Domain Analysis and Modeling
  • Part II: Domain Concept Modeling
  • Part III: Application Configuration

Saturday, August 2, 2014

Accessing Clafer Models Programmatically

by Michał Antkiewicz

I usually strongly discourage people who want to develop a parser for Clafer in their favorite programming language in order to be able to manipulate or translate the models into their desired formats. Clafer is deceptively simple; however, there's substantial processing performed by the Clafer compiler, which took years to develop. Any quickly developed parser/compiler is very likely to only work on the subset of the language or impose some restrictions, e.g., uniqueness of clafer names or specific usage conventions, as well as, it will quickly become obsolete as Clafer, the language, evolves.

Since we ourselves translate Clafer into many output formats and use many different programming languages in the various tools (Haskell, Java, JavaScript, Python), we developed ways of accessing the compiler's intermediate representation (IR), which represents fully-resolved information about Clafer models. This way, the compiler does all the hard work and the downstream tools can access the model conveniently.

Thursday, July 24, 2014

How to run Gitit from a Cabal sandbox?

by Michał Antkiewicz

Some Haskell projects, such as Gitit, dynamically load Haskell modules which implement plugins. ClaferWiki is one such a plugin for Gitit. To have Gitit load the ClaferWiki plugin, one must specify the following in the gitit.cnf file
plugins: Network.Gitit.Plugin.ClaferWiki
Gitit will then search for the module ClaferWiki in the user and global package registries. However, when the plugin is installed in a Cabal sandbox, it will not be found.

Tuesday, July 22, 2014

Clafer Tools Released

by Michał Antkiewicz
We are moving to a staged release model. First, Haskell-based tools, including the compiler, IG, and the wiki, followed by backends Choco3-based and Z3-based, finally followed by the web tools. This will allow us to make more frequent releases of the core components on which all others depend.

The binaries for Win, Linux, and Mac can be downloaded from Clafer Tools - Binary Distributions. There's also a "portable" distribution for Win which includes preconfigured Sublime Text 2.

For feature modeling, see Guidelines for Feature Modeling using Clafer.

Clafer Tools is a simultaneous release of the Clafer
  1. compiler
  2. wiki (go to the demo instance: Clafer Model Wiki)
  3. Alloy-based instance generator
  4. Choco3-based instance generator and multi-objective optimizer backend
  5. Choco3-based solver frontend
  6. Z3-based instance generator and multi-objective optimizer backend and frontend
  7. Clafer Integrated Development Environment (go to the demo instance: ClaferIDE)
  8. Clafer Configurator (go to the demo instance: ClaferConfigurator)
  9. Clafer Multi-Objective Optimization Visualizer and Exporer (go to the demo instance: ClaferMooVisualizer)
The release is mostly focused on
  • the Choco3-based and Z3-based backends,
  • significant update of the web-based tools user interface (using D3 framework + usability improvements)
  • compiler fixes.