[[PageOutline(1-2, Table of Contents, floated)]] = The Image Concept = == The image as a persistent world == '''Description''' The image is your working environment. All your modifications are stored with its state. This video shows how you open your image how you can go back to the state before opening. '''Preview''' [[Image(Image-Introduction-2.png, 300)]][[Image(Image-Introduction-3.png, 300)]] '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Image-Introduction.m4v,webm=attachment:Image-Introduction.webm,poster=attachment:Image-Introduction-1.png,preload=none)]] [[Toggle(end)]][[attachment:Image-Introduction.m4v Download]] == Basic Elements of the Image == '''Description''' In this video we take a tour around the basic UI elements and menus of the image. '''Preview''' [[Image(Image-Navigating-2.png, 300)]] '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Image-Navigating.m4v,webm=attachment:Image-Navigating.webm,poster=attachment:Image-Navigating-1.png,preload=none)]] [[Toggle(end)]][[attachment:Image-Navigating.m4v Download]] == How to Recover Changes == '''Description''' Help! My Image crashed! I lost all my changes! What should I do? .. Don't panic. There's a solution: Recover your changes. '''Preview''' '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Image-RecoverFromCrash.m4v,webm=attachment:Image-RecoverFromCrash.webm,poster=attachment:Image-RecoverFromCrash-1.png,preload=none)]] [[Toggle(end)]][[attachment:Image-RecoverFromCrash.m4v Download]] == Halos to access morphs == '''Description''' Halos provide an instant access to graphical elements of the image. This video shows functions they provide. '''Preview''' [[Image(Image-Halos-2.png, 300)]] '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Image-Halos.m4v,webm=attachment:Image-Halos.webm,poster=attachment:Image-Halos-1.png,preload=none)]] [[Toggle(end)]][[attachment:Image-Halos.m4v Download]] == How to update your Image == '''Description''' --- '''Preview''' '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Image-Updating.m4v,webm=attachment:Image-Updating.webm,poster=attachment:Image-Updating-1.png,preload=none)]] [[Toggle(end)]][[attachment:Image-Updating.m4v Download]] == How to modify settings and change your browser == '''Description''' The image has a menu for editing all your preferences. Additionally you can change your standard browser by using a browser menu. '''Preview''' [[Image(Image-BrowserAndSetting-2.png, 300)]][[Image(Image-BrowserAndSetting-3.png, 300)]] '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Image-BrowserAndSetting.m4v,webm=attachment:Image-BrowserAndSetting.webm,poster=attachment:Image-BrowserAndSetting-1.png,preload=none)]] [[Toggle(end)]][[attachment:Image-BrowserAndSetting.m4v Download]] == Demo mode – large text for using a beamer or making screenshots == In "Demo Mode" all text is large enough to be legible while using a beamer, making a screencast or taking screenshots. You can access this preference by primary (left) click, then choose "appearance", then "system fonts", then "demo mode". '''Preview''' [[Image(demo-mode.jpg, 300)]] [[Toggle(begin)]] [[Video(mp4=attachment:demo-mode.m4v,webm=attachment:demo-mode.webm,poster=attachment:demo-mode.jpg,preload=none)]] [[Toggle(end)]][[attachment:demo-mode.m4v Download]] == Organise your work with projects == '''Description''' Projects are a nice way to organise different workplaces in one image. They can also be useful for prototyping. '''Preview''' [[Image(Image-Projects-2.png, 300)]] '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Image-Projects.m4v,webm=attachment:Image-Projects.webm,poster=attachment:Image-Projects-1.png,preload=none)]] [[Toggle(end)]][[attachment:Image-Projects.m4v Download]] = Things you can do with the browser = == Basic usage of the class browser == '''Description''' The class browser is the tool to access and edit source code in the image. It is your main working environment. '''Preview''' [[Image(Browser-ClassBrowser-2.png, 300)]] '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Browser-ClassBrowser.m4v,webm=attachment:Browser-ClassBrowser.webm,poster=attachment:Browser-ClassBrowser-1.png,preload=none)]] [[Toggle(end)]][[attachment:Browser-ClassBrowser.m4v Download]] == How to access and edit methods == '''Description''' --- '''Preview''' [[Image(Browser-MethodsInBrowser-2.png, 300)]] '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Browser-MethodsInBrowser.m4v,webm=attachment:Browser-MethodsInBrowser.webm,poster=attachment:Browser-MethodsInBrowser-1.png,preload=none)]] [[Toggle(end)]][[attachment:Browser-MethodsInBrowser.m4v Download]] == Advanced Browsing Techniques == '''Description''' In this screencast we show how you can browse the hierachy, inheritance, senders and implementors of methods. '''Preview''' [[Image(Browser-AdvancedBrowsing-2.png, 300)]] '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Browser-AdvancedBrowsing.m4v,webm=attachment:Browser-AdvancedBrowsing.webm,poster=attachment:Browser-AdvancedBrowsing-1.png,preload=none)]] [[Toggle(end)]][[attachment:Browser-AdvancedBrowsing.m4v Download]] == Modifying class variables and auto generate accessor methods == '''Description''' You can also modify the class definitions. Furthermore the browser provides a nice function for generating accessor methods for all your instance variables. '''Preview''' [[Image(Browser-ClassStateSetterGetters-2.png, 300)]] '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Browser-ClassStateSetterGetters.m4v,webm=attachment:Browser-ClassStateSetterGetters.webm,poster=attachment:Browser-ClassStateSetterGetters-1.png,preload=none)]] [[Toggle(end)]][[attachment:Browser-ClassStateSetterGetters.m4v Download]] = Exploring - Everything is observable = == Workspace and Transcript == '''Description''' You will be guided through writing and executing code the Workspace and how to use the Transcript to inspect properties of objects. '''Preview''' [[Image(Exploring-TranscriptWorkspace-2.png, 300)]] '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Exploring-TranscriptWorkspace.m4v,webm=attachment:Exploring-TranscriptWorkspace.webm,poster=attachment:Exploring-TranscriptWorkspace-1.2.png,preload=none)]] [[Toggle(end)]][[attachment:Exploring-TranscriptWorkspace.m4v Download]] == Object Explorer and Inspector == '''Description''' This video introduces the Object Explorer and Object Inspector, which are tools that you can use during debugging in order to comfortably inspect object properties. '''Preview''' [[Image(Exploring-ObjectExplorerInspector-2.png, 300)]] '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Exploring-ObjectExplorerInspector.m4v,webm=attachment:Exploring-ObjectExplorerInspector.webm,poster=attachment:Exploring-ObjectExplorerInspector-1.png,preload=none)]] [[Toggle(end)]][[attachment:Exploring-ObjectExplorerInspector.m4v Download]] = Debugging and dealing with image failures = == How to debug with the Squeak debugger == '''Description''' This video shows how to set breakpoints and demonstrates most of the debugger features. '''Preview''' [[Image(Debug-Debugger-2.png, 300)]] '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Debug-Debugger.m4v,webm=attachment:Debug-Debugger.webm,poster=attachment:Debug-Debugger-1.png,preload=none)]] [[Toggle(end)]][[attachment:Debug-Debugger.m4v Download]] == Help! i have executed an infinite loop... How to stop the image. == '''Description''' What to do if your image stopped responding because the UI process is hung up in something? '''Preview''' '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Debug-StopProcessing.m4v,webm=attachment:Debug-StopProcessing.webm,poster=attachment:Debug-StopProcessing-1.png,preload=none)]] [[Toggle(end)]][[attachment:Debug-StopProcessing.m4v Download]] = Versioning your work with Monticello = == Configuring Repositories and Packages == '''Description''' The Monticello Browser will be introduced. It's the main versioning system for Squeak, a little like Git / SVN for other languages. You will see how to set up your own repository and a new package. '''Preview''' [[Image(Monticello-Introduction-2.png, 300)]][[Image(Monticello-Introduction-3.png, 300)]] '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Monticello-Introduction.m4v,webm=attachment:Monticello-Introduction.webm,poster=attachment:Monticello-Introduction-1.png,preload=none)]] [[Toggle(end)]][[attachment:Monticello-Introduction.m4v Download]] == View Diffs and Changes == '''Description''' As continuation of the first Monticello video, you will be shown to upload an initial version, view diffs between versions and commit changes. '''Preview''' [[Image(Monticello-DiffingAndChanges-2.png, 300)]] '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:Monticello-DiffingAndChanges.m4v,webm=attachment:Monticello-DiffingAndChanges.webm,poster=attachment:Monticello-DiffingAndChanges-1.png,preload=none)]] [[Toggle(end)]][[attachment:Monticello-DiffingAndChanges.m4v Download]] == How to resolve conflicts == '''Description''' This video shows you how to resolve a conflict during a commit to a Monticello repo. '''Preview''' [[Image(Monticello-ResolvingConflicts-2.png, 300)]] '''Video''' [[attachment:Monticello-ResolvingConflicts.m4v Download]] == Working with Gemtools == '''Description''' This video shows you how to use the Gemtools to connect to a Gemstone/S VM and how to work with them. '''Video''' [[Toggle(begin)]] [[Video(ogg=attachment:Gemtools.ogg,preload=none)]] [[Toggle(end)]][[attachment:Gemtools.ogg Download]] = Tests are your safety net - SUnit in action = '''Description''' This video shows test driven development with SUnit. It shows how to use the test runner and covers the basic assertions and how to raise a custom error. The code used in this example can be found here: [[attachment:HowTo-SUnit.st Download Code]] (click icon, not link text). '''Video''' [[Toggle(begin)]] [[Video(mp4=attachment:SUnit.m4v, poster=attachment:SUnit.jpg,preload=none)]] [[Toggle(end)]][[attachment:SUnit.m4v Download]] '''Preview''' [[Image(SUnit.jpg, 300)]] === Brief summary === A test suite is created by subclassing !TestCase (e.g. !MyTestSuite). Any method named {{{testXYZ}}} in the test suite is considered a unit test. Fixtures are initialized in {{{#setUp}}} and cleared (if necessary) in {{{#tearDown}}}. For code that should be run once per test suite, use {{{MyTestSuite>>initialize}}}. For code that should be run before and after every unit test, use {{{MyTestSuite>>setUp}}} and {{{MyTestSuite>>tearDown}}}. Custom errors (e.g. {{{MyError}}}) can be created by subclassing Error. To raise an error, use {{{#signal:}}}. {{{ MyError signal: 'A description'. }}} SUnit's basic assertions are: || '''Expectation''' || '''Method of !TestCase'''|| '''Example'''|| || Expression should be true || {{{#assert:}}} || {{{self assert: 1+2 > 2}}}|| || Expression should be false || {{{#deny:}}} || {{{self deny: 1+2 < 2}}}|| || Expressions should be equal || {{{#assert:equals:}}} || {{{self assert: 1+2 equals: 3}}}|| || Block should raise an error || {{{#should:raise:}}} || {{{self should: [1/0] raise: ZeroDivide }}}|| || Block should not raise an error || {{{#shouldnt:raise:}}} || {{{self shouldnt: [1/1] raise: ZeroDivide}}}|| For further information read chapter 7 "SUnit" in [http://squeakbyexample.org/ Squeak by Example] = Contributors = * Eric Seckler * Robin Schreiber * Patrick Rein * Michael Perscheid * Tim Felgentreff * Willi Müller '''Contact us''': {robin.schreiber, eric.seckler, patrick.rein, willi.mueller}@student.hpi.uni-potsdam.de http://squeakbyexample.org/