Non Linear Presentation using SketchFlow

I’m giving a talk tonight on MetaSharp and I’ve decided to use SketchFlow instead of Powerpoint to present my talking points. The topic is complex and I want the audience to be more interactive and I want to be able to be flexible in how deep into a topic I can go without having to skip over slides. I’ve never done this before, or seen it before so I have no idea what to expect but I’m going to give it a try.

The people at the TCLangUG tend to be more interactive and fun than your typical straight presentation crowd anyway, so this should be a good forum for experimentation like this.

Anyway, I thought the map that SketchFlow makes of all the screens is pretty neat so I thought I’d put a snapshot of it here.

non-linear-presentation-map

The white screen is the starting point and the various colors and layers are screens going deep and depper into a particular topic. The blue lines are connections between concepts.

While running the SketchFlow player I can use back and forward browser like buttons to navigate as well as use this exact map to jump to topics. I also have a list of all connections available and even some interactive controls on the screen itself that allow me to jump directly to a subject. This should be interesting!

MetaSharp at the Twin Cities Languages User Group

This thursday I will be presenting MetaSharp to the TCLangUG. It should be pretty interesting and you should stop by if you can!

Here are the details:

METASHARP (FEB. 11TH, 2010)

MetaSharp is a developer tool designed to assist in the creation of programming languages. Using MetaSharp’s fully extensible, pipelined transformation engine you can easily create your own domain specific languages or general purpose programming languages.

SPEAKER

Justin Chase is a software developer from St. Paul MN and works for Microsoft on the Expressionteam. In addition to loving WPF and Xaml and Expression Studio he has special interests in domain specific languages and games.

 

5:45 pm at Magenic, in Golden Valley.

First Steps Towards a Parser Generator

I’ve been pretty quiet the last couple of months because I have been very busy at work and at home I have been slowly chipping away at a new Parser for MetaSharp.

It’s very late at night here so I’m not going to go into a lot of detail right now but suffice it to say that currently my Parser is completely hand written and right now I’m working on a Transform step that will let me generate Parsers from a grammar. The goal is to generate the Parser from the Grammar grammar!

I still have a long way to go but here is what I do have. The following Grammar:

grammar Simple < MetaSharp.Transformation.Parsing.Common.BasicParser:
    Alphabet = (A | B | C)+;
    A = "a";
    B = "b";
    C = "c";
end

Produces the following code:

//——————————————————————————
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.21006.1
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//——————————————————————————

public partial class Simple : MetaSharp.Transformation.Parsing.Common.BasicParser
{

    internal new static System.Collections.Generic.IEnumerable<string> Imports;

    static Simple()
    {
        Simple.Imports = new string[0];
    }

    public Simple(MetaSharp.Transformation.IContext context) :
        base(context)
    {
        MetaSharp.Transformation.IRuleService ruleService =
            this.Context.Locate<MetaSharp.Transformation.IRuleService>();
        this.Add(
            newMetaSharp.Transformation.Patterns.OrPattern(
                ruleService.GetRule(“Alphabet”, Simple.Imports),
                ruleService.GetRule(“A”, Simple.Imports),
                ruleService.GetRule(“B”, Simple.Imports),
                ruleService.GetRule(“C”, Simple.Imports)));
    }
}

[MetaSharp.Transformation.RuleExportAttribute(typeof(AlphabetRule))]
public class AlphabetRule : MetaSharp.Transformation.Rule
{

    protected override void Initialize()
    {
        this.Body = new MetaSharp.Transformation.Patterns.OneOrMorePattern(
            new MetaSharp.Transformation.Patterns.OrPattern(
                new MetaSharp.Transformation.Patterns.OrPattern(
                    this.Rules.GetRule(“A”, Simple.Imports),
                    this.Rules.GetRule(“B”, Simple.Imports)),
                    this.Rules.GetRule(“C”, Simple.Imports)));
        base.Initialize();
    }
}

[MetaSharp.Transformation.RuleExportAttribute(typeof(ARule))]
public class ARule : MetaSharp.Transformation.Rule
{

    protected override void Initialize()
    {
        this.Body = new MetaSharp.Transformation.Patterns.StringPattern(“a”);
        base.Initialize();
    }
}

[MetaSharp.Transformation.RuleExportAttribute(typeof(BRule))]
public class BRule : MetaSharp.Transformation.Rule
{

    protected override void Initialize()
    {
        this.Body = new MetaSharp.Transformation.Patterns.StringPattern(“b”);
        base.Initialize();
    }
}

[MetaSharp.Transformation.RuleExportAttribute(typeof(CRule))]
public class CRule : MetaSharp.Transformation.Rule
{

    protected override voidInitialize()
    {
        this.Body = new MetaSharp.Transformation.Patterns.StringPattern(“c”);
        base.Initialize();
    }
}

It’s a pretty trivial grammar for now but this should give you an idea of where this is going. The RuleExportAttribute inherits from the MEF ExportAttribute and the concrete IRuleService uses MEF to supply rules using these attributes.

It’s exciting!