160 likes | 288 Views
Domain-Specific Modelling Language for Navigation Applications on S60 Mobile Phones. Janne Merilinna. Outline. Motivation for End-User Driven Development Solution for End-User Driven Development DSML for Navigation Applications on S60 Implementation DSML
E N D
Domain-Specific Modelling Language for Navigation Applications on S60 Mobile Phones Janne Merilinna
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
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?
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 models Objectives Languages that enable rapid development of applications/prototypes New business opportunities e.g. in mass customisation Etc. End-User Driven Development- Solution
Navigation Applications for S60- Relation to Other Languages and Frameworks
Navigation Applications for S60- First Example 4/4 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) 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)
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 easier and faster 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)
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??