Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Game Programming 08 - Tool Development

948 views

Published on

Chapter 8 of the lecture Game Programming taught at HAW Hamburg.

Introduction to UI and UX design, file I/O and undo & redo stacks.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Game Programming 08 - Tool Development

  1. 1. Game Programming Tool Development Nick Prühs
  2. 2. Objectives • To understand the importance of good UI and UX design • To get an overview of common text-based file formats • To learn how to implement an undo/redo stack 2 / 104
  3. 3. Motivation • First, you should make the tools! • Save development time • Can be shipped to players • Can even be your main business field (Adobe, Nevigo) 3 / 104 StarCraft II World Editor
  4. 4. Motivation • Highly workflow-dependent • Level Editor • Blueprint Editor • Common Functionality • New • Load & Save • Selection & Inspector • Brush • Perspectives & Zoom • Copy & Paste & Cut • Undo & Redo • Settings • Test Run 4 / 104
  5. 5. Requirements • Responsiveness • Avoid blocking UI! 5 / 104This should never happen!
  6. 6. Requirements • Robust error handling • Handle exceptions! 6 / 104 This must never happen. Never, never, never, never, never!
  7. 7. Requirements • Extensibility • Adaptive window size • Backward compatibility • WYSIWYG • Localization • Security Context 7 / 104
  8. 8. Development Process 1. Design 1. Define Functional Requirements 2. Analyze Target Group 3. Develop Overall Application Architecture 2. Implement 1. Create Prototypes 2. Develop Application 3. Test 1. Write Unit Tests 2. Perform Usability Tests 8 / 104
  9. 9. UI Design Guidelines • Less UI is better UI. • The more functionality that is exposed at any one time, the more difficult it is for a user to find the functionality that they need. • Consistent UI is good UI. • Providing a consistent UI enables a user to become more proficient with an application in a much shorter time. 9 / 104
  10. 10. UX Design Guidelines • Support the minimum Windows effective resolution of 800x600 pixels. • Use determinate progress bars for operations that require a bounded amount of time. • Even if that amount of time cannot be accurately predicted. • Tab order should flow from left to right, top to bottom. 10 / 104
  11. 11. UX Design Guidelines • Assign shortcut keys to the most commonly used commands. • It's rude to interrupt. • When an application displays a dialog box, it forces the user to stop whatever it is that they are doing and pay attention to something else. If it is possible, remove the need for a dialog box completely by avoiding error cases and other disruptive user experiences. • And many, many, many, many more… (see References) 11 / 104
  12. 12. Model-View-Controller • Architectural pattern that separates data from its visual representation • Model: Data, such as names, phone numbers, or health points. • View: Visual representation of that data, such as console output, UI textfields or health bars. • Controller: Layer that separates model from view, serving as interface for any interaction with the data. 12 / 104
  13. 13. Model-View-Controller 13 / 104
  14. 14. Model-View-Controller • Allows exchanging views or modifying the model without breaking existing functionality. • For instance, write console client first and GUI client after. • Greatly improves your application architecture through separation of concerns. • Anybody always knows where to look in your code. 14 / 104
  15. 15. Model-View-View Model • Architectural pattern that separates data from its visual representation • Model: Data, such as names, phone numbers, or health points. • View: Visual representation of that data, such as console output, UI textfields or health bars. • View Model: Responsible for exposing data from the model in such a way that those objects are easily managed and consumed 15 / 104
  16. 16. Model-View-View Model 16 / 104
  17. 17. Model-View-View Model • Attempts to gain both the advantages of separation of functional development provided by MVC as well as leveraging the advantages of data bindings • binds data as close to the pure application model as possible • uses inherent data checking features to validate any incoming data 17 / 104
  18. 18. Where Is The Controller? • Substituted by bindings • Synchronize the view model and view • Key enablers of the pattern • Controller sometimes included anyway • Ongoing area of discussion regarding the standardization of the MVVM pattern 18 / 104
  19. 19. Drawbacks of MVVM • Overkill for simple UI operations • Can result in considerable memory consumption in very large applications • Where to put event handlers for e.g. button clicks? 19 / 104
  20. 20. Data Bind for Unity DEMO 20 / 104
  21. 21. File Access Rights • When opening a file, you have to request the required access right from the underlying operating system • Read access • Write access • You can request either exclusive or non-exclusive access rights, possibly preventing future access to the file until you release it again 21 / 104
  22. 22. Gotcha! You should always release any files after you’re finished! The user will thank you for that. 22 / 104
  23. 23. File In Use 23 / 104
  24. 24. Compositing Streams • The design of the System.IO classes provides simplified stream composing • Base streams can be attached to one or more pass- through streams that provide the functionality you want • Reader or writer is attached to the end of the chain 24 / 104
  25. 25. Compositing Streams C# 25 / 104 // Collect information on the file to create. FileInfo fileInfo = new FileInfo("newFile.gz"); // Create new file. using (FileStream fileStream = fileInfo.Create()) { // Create compression stream. using (GZipStream compressionStream = new GZipStream(fileStream, CompressionMode.Compress)) { // Create new text writer. using (TextWriter textWriter = new StreamWriter(compressionStream)) { // Write text. textWriter.WriteLine("Hello World!"); } } }
  26. 26. XML Fundamentals • Short for Extensible Markup Language • Logical structuring of data • Domain-specific languages • Content-oriented markup (in contrast to HTML) • Self-descriptive structure • Tags • XML Schema • Structural variations (e.g. variable child node count) 26 / 104
  27. 27. XML Benefits • Human-readable • Automated document validation • Used in machine-machine communication (e.g. web services) 27 / 104
  28. 28. XML Processing 28 / 104
  29. 29. XML Document Example XML (Collada) 29 / 104 <node id="here"> <translate sid="trans">1.0 2.0 3.0</translate> <rotate sid="rot">1.0 2.0 3.0 4.0</rotate> <matrix sid="mat"> 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 </matrix> </node>
  30. 30. DOM vs. SAX Parsing • Simple API for XML (SAX ) • Sequential access • Required memory is proportional to maximum depth of the input document • Document validation requires keeping track of id attributes, open elements, etc. • Document Object Model (DOM) • Operates on the document as a whole • Required memory is proportional to the entire document length 30 / 104
  31. 31. XSLT Fundamentals • Short for Extensible Stylesheet Language Transformation • Transforms XML documents into other formats such as other XML documents, HTML or plain text • Turing-complete 31 / 104
  32. 32. XSLT Motivation 32 / 104
  33. 33. XSLT Processing 1. Read stylesheet file. 2. Build source tree from input XML document. 3. For each node in the source tree: 1. Process source tree node. 2. Find best-matching template in the stylesheet. 3. Evaluate the template contents. 4. Create node(s) in the result tree. 33 / 104
  34. 34. XSLT Example XSLT 34 / 104 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"> <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
  35. 35. XSLT Example XSLT 35 / 104 <xsl:template match="/books"> <html> <head> <title>Transforming books.xml with XSLT</title> </head> <body> <h1>Books</h1> <table> <tr> <th>Title</th> <th>Price</th> </tr> <xsl:apply-templates select="book"> <xsl:sort select="title" /> </xsl:apply-templates> </table> </body> </html> </xsl:template>
  36. 36. XSLT Example XSLT 36 / 104 <xsl:template match="book"> <tr> <td> <xsl:value-of select="title"/> </td> <td> <xsl:value-of select="price"/> </td> </tr> </xsl:template>
  37. 37. XSLT Example Rendered HTML 37 / 104
  38. 38. XML Schema • Description of a type of XML document • Expressed in terms of constraints on the structure and content of documents of that type • Correct vs. valid documents • Elements and attributes that must/may be included • Their permitted structure • How character data is to be interpreted, e.g. as number, date, URL, Boolean, etc. 38 / 104
  39. 39. A little criminal energy… • Sending a continuous stream of XML data to a Web server (= denial of service attack) • Server continues to process the data until the computer runs low on resources 39 / 104
  40. 40. INI File Format • Text file format • Structured in sections and properties • Used since MS DOS and 16-bit Windows platforms • Alternative formats like XML, JSON and YAML can nest arbitrarily but are more heavyweight • Human-readable • Simple to parse 40 / 104
  41. 41. INI File Example INI 41 / 104 [HostileWorlds.HWSM_Commander] Scale=1.0 StructureMax=125 ShieldsMax=125 Armor=0 MovementSpeed=160 AttackDamage=4 SplashDamageRadius=0 Cooldown=1.5 Range=500
  42. 42. INI Property • Name and value • Delimited by = 42 / 104
  43. 43. INI Section • Keys can (but don’t need to) be grouped into sections • Section names appear in own lines in square brackets • Keys after the section declaration are associated with that section. • No explicit end of section • Sections end at the next section declaration, or the end of the file • Sections may not be nested 43 / 104
  44. 44. INI Comment • Indicated by semicolon at the beginning of the line • Ignored by processors 44 / 104
  45. 45. Duplicate Properties in INI Files • Handling depends on the implementation • May cause an abort • May be ignored • May override first occurrence • May be used to implement multi-valued properties 45 / 104
  46. 46. JSON File Format • Java Script Object Notation • Human-readable • Name-value pairs 46 / 104
  47. 47. JSON Example JSON 47 / 104 { "Image": { "Width": 800, "Height": 600, "Title": "View from 15th Floor", "Thumbnail": { "Url": "http://www.example.com/image/481989943", "Height": 125, "Width": "100" }, "IDs": [116, 943, 234, 38793] } }
  48. 48. JSON Primitive Types • String (Unicode, quotation marks) • Number (integer, floating point) • Boolean • Null 48 / 104
  49. 49. JSON Structured Types • Array • Ordered • Square brackets • Elements are separated by commas • Object • Unordered • Curly brackets • Name/Value pairs • Name is a string • Value is a string, number, boolean, null, object, or array • Single colon separates the name from the value 49 / 104
  50. 50. YAML File Format • YAML Ain’t Markup Language • Human-readable • Unicode • Superset of JSON • Every JSON file is also a valid YAML file. 50 / 104
  51. 51. YAML Example YAML 51 / 104 --- Time: 2001-11-23 15:01:42 -5 User: ed Warning: This is an error message for the log file --- Time: 2001-11-23 15:02:31 -5 User: ed Warning: A slightly different error message. --- Date: 2001-11-23 15:03:17 -5 User: ed Fatal: Unknown variable "bar" Stack: - file: TopClass.py line: 23 - file: MoreClass.py line: 58
  52. 52. YAML Document Structure • Uses indentation for scope • Begins each entry on its own line • Sequences indicate entries with dashes • Mappings mark key-value pairs with colons • Structures use three dashes for separation • Comments begin with a hash 52 / 104
  53. 53. Comparison of File Formats XML INI JSON YAML Binary Human- readable yes yes yes yes no Data-to- markup ratio low high high high high Arbitrary Nesting yes no yes yes yes 53 / 104
  54. 54. Serialization & Reflection DEMO 54 / 12
  55. 55. Undo Sample Application • Data • List of To-do items • Operations • Add new To-do item • Undo • Redo 55 / 104
  56. 56. TodoItem Class C# 56 / 104 public class TodoItem { public string ItemName { get; set; } public TodoItem(string itemName) { this.ItemName = itemName; } }
  57. 57. MainWindow Markup XAML 57 / 104 <Window x:Class="UndoDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <StackPanel> <ListBox ItemsSource="{Binding Items}"> <ListBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding ItemName}"/> </DataTemplate> </ListBox.ItemTemplate> </ListBox> <DockPanel> <Button DockPanel.Dock="Right" Width="100" Click="OnRedo">Redo</Button> <Button DockPanel.Dock="Right" Width="100" Click="OnUndo">Undo</Button> <Button DockPanel.Dock="Right" Width="100" Click="OnAdd">Add</Button> <TextBox DockPanel.Dock="Left" Name="TextBox"></TextBox> </DockPanel> </StackPanel> </Window>
  58. 58. MainWindow Class C# 58 / 104 private ObservableCollection<TodoItem> items = new ObservableCollection<TodoItem>(); public ObservableCollection<TodoItem> Items { get { return this.items; } } public MainWindow() { InitializeComponent(); DataContext = this; } private void OnAdd(object sender, RoutedEventArgs e) { string itemName = this.TextBox.Text; this.items.Add(new TodoItem(itemName)); }
  59. 59. Design Patterns • General reusable solution to a commonly occurring problem within a given context • Formalized best practices that the programmer must implement themselves in the application • Not a finished design that can be transformed directly into source code • Gained popularity in computer science after the book Design Patterns: Elements of Reusable Object- Oriented Software was published in 1994 by the so- called "Gang of Four" (Gamma et al.) 59 / 104
  60. 60. Advantages of Design Patterns • Speed up the development process by providing tested, proven development paradigms • Improve code readability for coders and architects who are familiar with the patterns 60 / 104
  61. 61. Design Pattern Types • Creational (object creation) • Structural (relationships between objects) • Behavioral (communication between objects) • Concurrency (multi-threaded programming) 61 / 104
  62. 62. Object-Oriented Design 101 • Aggregation • Combine simple objects or data types into more complex ones • Usually expressed by means of references from one object to another • Inheritance • Adding detail to a general data type to create a more specific data type 62 / 104
  63. 63. Object-Oriented Design 101 • Delegation • Handing a task over to another part of the program • Polymorphism • Ad hoc polymorphism (function overloading) • Parametric polymorphism (generic programming) • Subtyping (subclassing) 63 / 104
  64. 64. Object-Oriented Design 101 • Cohesion • Degree to which the elements of a module belong together • How much functionalities embedded in a class have in common • Coupling • Degree to which each program module relies on the other modules 64 / 104
  65. 65. Object-Oriented Design 101 • Cohesion • Degree to which the elements of a module belong together • How much functionalities embedded in a class have in common • Coupling • Degree to which each program module relies on the other modules 65 / 104
  66. 66. Behavioral Design Patterns Communication Between Objects: • Iterator • Observer • Command • Memento • Strategy 66 / 104
  67. 67. Memento Pattern Provides the ability to restore an object to its previous state. 67 / 104 Examples: • Undo
  68. 68. Memento Pattern Provides the ability to restore an object to its previous state. 68 / 104
  69. 69. Memento Class C# 69 / 104 public class Memento { public ObservableCollection<TodoItem> Items { get; set; } }
  70. 70. MainWindow Class C# 70 / 104 private Stack<Memento> undoStack = new Stack<Memento>(); private Stack<Memento> redoStack = new Stack<Memento>(); private void SaveMemento() { Memento memento = new Memento { Items = new ObservableCollection<TodoItem>(this.items) }; this.undoStack.Push(memento); } private void RestoreFromMemento(Memento memento) { this.items.Clear(); foreach (var item in memento.Items) { this.items.Add(item); } }
  71. 71. MainWindow Class C# 71 / 104 public MainWindow() { InitializeComponent(); DataContext = this; // Add initial (empty) state to undo stack. this.SaveMemento(); } private void OnAdd(object sender, RoutedEventArgs e) { // Add new item. var itemName = this.TextBox.Text; this.items.Add(new TodoItem(itemName)); // Save memento and clear Redo stack. this.SaveMemento(); this.redoStack.Clear(); }
  72. 72. MainWindow Class C# 72 / 104 private void OnUndo(object sender, RoutedEventArgs e) { if (undoStack.Count < 2) { return; } // Move memento from Undo to Redo stack. Memento memento = undoStack.Pop(); redoStack.Push(memento); // Restore previous state. memento = undoStack.Peek(); this.RestoreFromMemento(memento); }
  73. 73. MainWindow Class C# 73 / 104 private void OnRedo(object sender, RoutedEventArgs e) { if (redoStack.Count < 1) { return; } // Move memento from Redo to Undo stack. Memento memento = redoStack.Pop(); undoStack.Push(memento); // Restore previous state. this.RestoreFromMemento(memento); }
  74. 74. Command Pattern Encapsulates all the information needed to call a method at a later time in an object. 74 / 104 Examples: • Networking • Replays • AI • Undo
  75. 75. Command Pattern Encapsulates all the information needed to call a method at a later time in an object. 75 / 104
  76. 76. Command Pattern Encapsulates all the information needed to call a method at a later time in an object. 76 / 104
  77. 77. ICommand Interface C# 77 / 104 public interface ICommand { void DoCommand(); void UndoCommand(); }
  78. 78. AddItemCommand Class C# 78 / 104 public class AddItemCommand : ICommand { private ObservableCollection<TodoItem> items; private string newItemName; public AddItemCommand(ObservableCollection<TodoItem> items, string newItemName) { this.items = items; this.newItemName = newItemName; } public void DoCommand() { TodoItem todoItem = new TodoItem(this.newItemName); this.items.Add(todoItem); } public void UndoCommand() { TodoItem todoItem = this.items.First(item => item.ItemName.Equals(this.newItemName)); this.items.Remove(todoItem); } }
  79. 79. MainWindow Class C# 79 / 104 private Stack<ICommand> undoStack = new Stack<ICommand>(); private Stack<ICommand> redoStack = new Stack<ICommand>(); private void OnAdd(object sender, RoutedEventArgs e) { // Add new item. var itemName = this.TextBox.Text; AddItemCommand command = new AddItemCommand(this.items, itemName); command.DoCommand(); // Save command and clear Redo stack. this.undoStack.Push(command); this.redoStack.Clear(); }
  80. 80. MainWindow Class C# 80 / 104 private void OnUndo(object sender, RoutedEventArgs e) { if (undoStack.Count < 1) { return; } // Move command from Undo to Redo stack. ICommand command = undoStack.Pop(); redoStack.Push(command); // Undo command. command.UndoCommand(); }
  81. 81. MainWindow Class C# 81 / 104 private void OnRedo(object sender, RoutedEventArgs e) { if (redoStack.Count < 1) { return; } // Move command from Redo to Undo stack. ICommand command = redoStack.Pop(); undoStack.Push(command); // Redo command. command.DoCommand(); }
  82. 82. Tool Chains • Output of one tool is used as input for another • Photoshop -> Sprite Packer, Texture Compression • Build Server -> Git, MSbuild, Unity, NUnit • Visual Studio -> Post-build events • Excel -> VBA • Localization • Unity Editor Scripts 82 / 104
  83. 83. Tool Chains • Technical Requirements • Command-line parameters • Non-blocking operation (i.e. must not require user input for proceeding) • Robust error (code) handling • User Requirements • Good understanding of file systems and working directories • Sometimes: Access to system environment variables • Sometimes: Understanding of different OS 83 / 104
  84. 84. Windows Commands 84 / 104 Command Description Attrib Displays, sets, or removes attributes assigned to files or directories. Cd Displays the name of or changes the current directory. Cls Clears the Command Prompt window. Copy Copies one or more files from one location to another. Del Deletes one or more files. Dir Displays a list of a directory's files and subdirectories. Echo Displays messages or turns on or off the command echoing feature. Md Creates a directory or subdirectory. Move Moves one or more files from one directory to another directory. Rd Deletes a directory. Xcopy Copies files and directories, including subdirectories.
  85. 85. Attrib Command Displays, sets, or removes attributes assigned to files or directories. Syntax: attrib [{+|-}r] [{+|-}h] [<Drive>:][<Path>][<FileName>] [/s [/d]] 85 / 104
  86. 86. Cd Command Displays the name of or changes the current directory. Syntax: cd [<Drive>:][<Path>] cd [..] 86 / 104
  87. 87. Cls Command Clears the Command Prompt window. Syntax: cls 87 / 104
  88. 88. Copy Command Copies one or more files from one location to another. Syntax: copy [/y] <Source> [+<Source> [+ ...]] [<Destination>] 88 / 104
  89. 89. Del Command Deletes one or more files. Syntax: del [/s] <Names> 89 / 104
  90. 90. Dir Command Displays a list of a directory's files and subdirectories. Syntax: dir [<Drive>:][<Path>][<FileName>] [/p] [/a[[:]<Attributes>]] [/s] 90 / 104
  91. 91. Echo Command Displays messages or turns on or off the command echoing feature. Syntax: echo [<Message>] echo [on | off] 91 / 104
  92. 92. Md Command Creates a directory or subdirectory. Syntax: md [<Drive>:]<Path> 92 / 104
  93. 93. Move Command Moves one or more files from one directory to another directory. Syntax: move [<Source>] [<Target>] 93 / 104
  94. 94. Rd Command Deletes a directory. Syntax: rd [<Drive>:]<Path> [/s] 94 / 104
  95. 95. Xcopy Command Copies files and directories, including subdirectories. Syntax: Xcopy <Source> <Destination> [/q] [/s] [/h] 95 / 104
  96. 96. Command Prompt Wildcards Used to represent one or more characters when you are searching for files, folders, printers, computers, or people. 96 / 104 Wildcard character Description Asterisk (*) Substitute for zero or more characters. Question mark (?) Substitute for a single character in a name.
  97. 97. Windows Batch Files • Unformatted text file that contains one or more commands and has a .bat file name extension. • Allows you to simplify routine or repetitive tasks. • When you type the file name at the command prompt, Cmd.exe runs the commands sequentially as they appear in the file. 97 / 104
  98. 98. Batch File Parameters • Cmd.exe provides the batch parameter expansion variables %0 through %9. • %0 is replaced by the batch file name. • %1 through %9 are replaced by the corresponding arguments that you type at the command line. 98 / 104
  99. 99. Command Redirection Operators 99 / 104 Redirection operator Description > Writes the command output to a file or a device, such as a printer, instead of the Command Prompt window. < Reads the command input from a file, instead of reading input from the keyboard. >> Appends the command output to the end of a file without deleting the information that is already in the file. | Reads the output from one command and writes it to the input of another command. Also known as a pipe.
  100. 100. Batch File Commands 100 / 104 Command Description If Performs conditional processing in batch programs. Goto Within a batch program, redirects to a line identified by a label. Rem Enables you to include comments (remarks) in a batch file or in your configuration files.
  101. 101. If Command Performs conditional processing in batch programs. Syntax: if [not] errorlevel number command [else expression] if [not] string1==string2 command [else expression] if [not] exist FileName command [else expression] 101 / 104
  102. 102. Goto Command Within a batch program, redirects to a line identified by a label. Syntax: goto label :label 102 / 104
  103. 103. Rem Command Enables you to include comments (remarks) in a batch file or in your configuration files. Syntax: rem [comment] 103 / 104
  104. 104. References • MSDN. Overview of the User Interface Development Process. http://msdn.microsoft.com/en- us/library/windows/desktop/ff728828%28v=vs.85%29.aspx, May 2015. • MSDN. Implementing a User Interface. http://msdn.microsoft.com/en-us/library/windows/desktop/ff728823%28v=vs.85%29.aspx, May 2015. • MSDN. Top Guidelines Violations. http://msdn.microsoft.com/en-us/library/windows/desktop/dn742479.aspx, May 2015. • Wikipedia. Model View ViewModel. http://en.wikipedia.org/wiki/Model_View_ViewModel, June 23, 2014. • MSDN. File and Stream I/O. http://msdn.microsoft.com/en-us/library/k3352a4t%28v=vs.110%29.aspx, May 2015. • MSDN. XML Documents and Data. http://msdn.microsoft.com/en-us/library/2bcctyt8%28v=vs.110%29.aspx, May 2015. • Luttenberger. Internet Applications – Web Services Primer. Department for Computer Science, CAU Kiel, 2008. • Barnes, Finch. COLLADA – Digital Asset Schema Release 1.5.0 Specification. Sony Computer Entertainment Inc., April 2008. • Fallside, Walmsley. XML Schema Part 0: Primer Second Edition. http://www.w3.org/TR/xmlschema-0/, October 28, 2004. • Wikipedia.org. INI File. http://en.wikipedia.org/wiki/INI_file, October 16, 2013. • Crockford. The application/json Media Type for JavaScript Object Notation (JSON). IETF, July 2006. • Ben-Kiki, Evans. YAML Ain’t Markup Language (YAML™) Version 1.2. 3rd Edition. http://www.yaml.org/spec/1.2/spec.html, 2009. • Paul. Multilevel Undo and Redo Implementation in C#. http://www.codeproject.com/Articles/33384/Multilevel-Undo-and-Redo- Implementation-in-C-Part, February 17, 2009. • Microsoft. Command-Line Reference. http://technet.microsoft.com/en-us/library/cc754340.aspx, August 15, 2012. • Microsoft. Using batch files. http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/batch.mspx, May 2015. • Microsoft. Using wildcard characters. http://technet.microsoft.com/en-us/library/bb490639.aspx, May 2015. 104 / 104
  105. 105. Thank you for your attention! Contact Mail dev@npruehs.de Blog http://www.npruehs.de Twitter @npruehs Github https://github.com/npruehs 105 / 104
  106. 106. 10 Minute Review Session • Why should you make tools as early as possible? • Name a few important requirements for all tools! • Which types of file access rights do you know? • What are the main benefits of using XML? • What are the three main XML processing steps? • What is the difference between DOM and SAX parsing? • What is XSLT and how does it work? • What is XML Schema? • What is the major drawback of the INI file format? • What is JSON? • What is the main motivation behind YAML?
  107. 107. 10 Minute Review Session • What are the main advantages of design patterns? • Which types of design patterns do you know? • What’s the difference between inheritance and aggregation? • Which types of polymorphism do you know? • What’s the difference between cohesion and coupling? • Which design patterns can be used for implementing an undo- redo stack? • Which wildcards are available at the windows command prompt? • How do you access parameters in batch files? • Which redirection operator writes the command output to a file or a device instead of the Command Prompt window?

×