Domain-Specific Modelling Language for Navigation Applications on S60 Mobile Phones
Janne Merilinna
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
2
Outline
• Motivation for End-User Driven Development• Solution for End-User Driven Development• DSML for Navigation Applications on S60
• Implementation• DSML
• Illustration of the use of the language• Summary• Future work
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
3
End-User Driven Development- Motivation
• Open source?• Enables a possibility to modify application• Enables developing multiple variants
• Why not?• Modifying requires to study the existing source code
• Don't have time and/or interest • Variants not satisfying enough?
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
4
End-User Driven Development- Solution
• Background• Domain-Specific Modelling Languages (DSMLs) provide a
possibility for very rapid, iterative and incremental software development
• 5-10 times production gains compared to traditional software development means witnessed in industrial setups.
• Approach• Domain-Specific Modelling Languages• Code generators• Domain-specific frameworks• … and release these as open source and/or open modelsopen models
• Objectives• Languages that enable rapid development of
applications/prototypes• New business opportunities e.g. in mass customisation• Etc.
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
5
Navigation Applications for S60- Starting Point
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
6
Navigation Applications for S60- Relation to Other Languages and Frameworks
Symbian S60
PyS60
DSML for NavApp
DSML for S60
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
7
Navigation Applications for S60- NavApp Framework
Target
Framework
Generated code
Code generator
Metamodel
Model
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
8
Navigation Applications for S60- First Example 1/4
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
9
Navigation Applications for S60- First Example 2/4
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
10
Navigation Applications for S60- First Example 3/4
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
11
Navigation Applications for S60- First Example 4/4
class NavigationApplicationClass6_28897(NavAppInners.NavAppInners):
def start_running(self):
self.classVariables()
state=self.Start6_29026
self.call_stack.append(self.Start6_29026)
while(self.running):
state, add_to_stack=state()
if add_to_stack:
self.call_stack.append(state)
self.update_canvas()
def classVariables(self):
self.destination_location=""
self.start_location=""
pass
def NavAppStaticView6_29029(self):
self.Keys6_29224()
return(self.SelectCondition6_29576, False)
def CoordinateLocation6_29416(self):
self.start_location = self.get_cursor_position()
self.set_last_location()
self.Navigate6_31628()
def Keys6_29241(self):
keys=[]
keys.append([EKeyHash, self.Zoom6_29236])
self.set_keys(keys, False)
self.OptionsNode6_29304()
def Keys6_29224(self):
keys=[]
keys.append([EKeyStar, self.Zoom6_29231])
self.set_keys(keys, False)
self.Keys6_29241()
def Navigate6_29355(self):
self.navigate(None,None)
self.update_canvas()
def Navigate6_31628(self):
startNode = self.start_location
tags={}
tags["addressStreet"]=self.destination_location
stopNode = Node.Node(tags=tags)
callbacks=[]
callbacks.append("show_progress_in_text")
callbacks.append("show_progress_in_route")
self.navigate(startNode, stopNode, callbacks, "BFS")
self.StartLocator6_29400()
def OptionsNode6_29304(self):
mainmenu = [(u"Navigate", ((u"Navigate to destination", self.Query6_29342),(u"Stop navigating", self.Navigate6_29355)))]
self.set_main_menu(mainmenu)
def Query6_29342(self):
self.destination_location = appuifw.query(u"Choose destination", 'text', u"destination_location")
self.CoordinateLocation6_29416()
def StartLocator6_29400(self):
self.start_locator()
self.update_canvas()
def Zoom6_29236(self):
self.zooming(-1)
self.update_canvas()
def Zoom6_29231(self):
self.zooming(1)
self.update_canvas()
def Note6_29084(self):
appuifw.note(u"You are at the destination", 'info')
return(self.Wait6_32474, False)
def SelectCondition6_29576(self):
if (self.destination_location == self.get_current_street(self.get_cursor_position())):
return(self.Note6_29084, False)
return(self.Wait6_29597, False)
def Start6_29026(self):
return(self.NavAppStaticView6_29029, False)
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
12
Navigation Applications for S60- Second Example 1/2
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
13
Navigation Applications for S60- Second Example 2/2
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
14
End-User Driven Development and NavApp
• Currently, not that straightforward to use
• Notation is what it is…☺• Solution-space elements
should be abstracted -> easier to use
• However, it is a lot easiereasier and fasterfaster to develop applications vs. manually writing the source code
• Still, my mom probably wouldn't be interested in it
• (actually, she wouldn't be in any case)
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
15
What Next?
• 1.0 version of the framework and language• Support for multi-person positioning
• Multi-player positioning games• Social dimension
• Open source?• Open models??
VTT TECHNICAL RESEARCH CENTRE OF FINLAND
16
Questions