-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathindex.html
More file actions
691 lines (559 loc) · 52.6 KB
/
Copy pathindex.html
File metadata and controls
691 lines (559 loc) · 52.6 KB
1
<!DOCTYPE html><html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> <title>Learning Object-Oriented Programming, Design with TDD in Pharo</title> <!-- Bootstrap --> <link href="Web/css/bootstrap.min.css" rel="stylesheet"> <link href="Web/css/mooc.css" rel="stylesheet"> <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> </head> <body> <nav class="navbar navbar-default navbar-fixed-top"> <div class="container-fluid"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#weeks" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span></button><a class="navbar-brand" href="http://www.pharo.org"> <img alt="Pharo" src="Web/pictures/pharo-logo-small.png"></a> </div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="weeks"><ul class="nav navbar-nav"> <li><a href="#download">Download</a></li> <li><a href="#week1">Week 1</a></li> <li><a href="#week2">Week 2</a></li> <li><a href="#week3">Week 3</a></li> <li><a href="#week4">Week 4</a></li> <li><a href="#week5">Week 5</a></li> <li><a href="#week6">Week 6</a></li> <li><a href="#week7">Week 7</a></li> <li><a href="#resources">Resources</a></li> <li><a href="#about">About</a></li></ul> </div> <!-- navbar-collapse --> </div> <!-- container-fluid --> </nav> <div class="container"> <h1>Object-Oriented Programming, Design with TDD in Pharo</h1> <section> <h2>About this course</h2> <p>This lecture will teach you the way program with live objects. We use Test Driven Development and show Object-Oriented Design using multiple examples. <p> Object-oriented programming is more than just writing algorithms. It is identifying objects, defining the behavior of such objects and how they collaborate together. Object-oriented design experts think in terms of responsibilities and collaborations that an object has. In addition finding a good design is a challenging task that depends on the context and often there is no such thing that the perfect correct solution. There are tradeoffs. Therefore good design is often the result of an iterative process. In this course we will follow the expression: "Designing starts when the program compiles" it means that we will first get a first version and think about it and since we will have written tests we will be able to change the design and improve it. This way you will learn by doing. <p>In this lecture we will focus on object-oriented programming concepts:<ul> <li> Objects / Classes </li> <li> Messages / Methods</li> <li> self/this and its semantics</li> <li> Inheritance</li> <li> super and its semantics</li> <li> Tests are your life ensurance</li></ul> …and on object-oriented design concepts: <ul> <li> Class responsibility collaboration</li> <li> Delegation</li> <li> Message sends are choice (what would be the equivalent to not)</li> <li> Message sends are plans for reuse</li> <li> Polymorphism</li> <li>The "Don't ask, tell" Principle</li> <li> Some design patterns</li></ul><p>We decided to use Pharo. Pharo is not mainstream but it is used in many Universities in the world to teach object-oriented programming because it is one of the best language to grasp the complex design forces that makes good design. Pharo syntax is small and Pharo model is pure and elegant. What you will learn can be applied to any object-oriented programming language.<a href="#about-details" data-toggle="collapse">more…</a></p> <div class="collapse" id="about-details"> Pharo is a pure object-oriented programming language in the tradition of Smalltalk. It offers a unique developing experience in constant interaction with live objects. Pharo is elegant, fun to use and very powerful. It is very easy to learn and enables to understand advanced concept in a natural way. When programming in Pharo, you are immersed in a world of live objects. You have immediate feedback at any moment of your development on objects representing web applications, code itself, graphics, network…</p><p>Throughout this lectures you will:</p><ul> <li>learn how to program in Pharo,</li> <li>be immersed in a live environment and live a new programming experience,</li> <li>develop a web application to apply the different aspects of Pharo presented in the course.</li></ul><p>This lectures also focuses a different vision of the fundamental principles of object-oriented programming mainly polymorphism and late binding.</p><p>Each week is composed of several sequences containing several lectures and their slides and associated videos. In addition videos proposing application exercises and programming demonstrations are available.</p></div> <!-- details --><h3> Resources </h3>In this lecture we use the following resources<ul> <li> Join the Discord mooc channel of the Pharo community (Invitation at <a href="http://discord.gg/Sj2rhxn">http://discord.gg/Sj2rhxn</a>) </li> <li>Pharo Mooc <a href="http://mooc.pharo.org">http://mooc.pharo.org</a> and the <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/">Mooc Videos</a>. You can also use the <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/WebPortal/co/content.html">Mooc Portal (packaged videos with subtitles)</a>.</li> <li>Pharo By Example (50) <a href="http://books.pharo.org">http://books.pharo.org</a> </li> <li>A book: <a href="https://github.com/SquareBracketAssociates/LearningOOPWithPharo">Learning Object-Oriented Programming and Design with TDD in Pharo</a> (<a href="https://bintray.com/squarebracketassociates/wip/download_file?file_path=learningoop-wip.pdf">PDF</a>)</li> <li> <a href="http://files.pharo.org/media/pharoCheatSheet.pdf"> Pharo Cheat Sheet</a> </li></ul><h3> Exercises </h3>In this lecture you will have to do the following exercises to get started. There are not associated with a given week so proceed as you want. You can find other exercises in the <a href="https://github.com/SquareBracketAssociates/LearningOOPWithPharo">Learning Object-Oriented Programming and Design with TDD in Pharo</a> book. <a href="#miniprojects"> Miniprojects are described here.</a><ul> <!--<li> <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/Exercises/Exercise-Syntax.pdf">Syntax</a> </li>--> <li> Do the ProfStef tutorial by executing ProfStef go in a playground</li> <li> <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/Exercises/Exercise-Counter.pdf">Counter</a> </li> <li> <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/Exercises/Exercise-Katas.pdf">Katas</a> </li> <li> <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/Exercises/Exercise-DSL.pdf">DSL</a> </li> <li> (optional) <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/Exercises/Exercise-ElectronicWallet.pdf">ElectronicWallet</a> </li> <li> (optional) <a href="http://files.pharo.org/books/learning-oop/">Snake and Ladder</a> </li></ul></section><section id="week1"><h2>Week 1: Welcome on Board and Syntax Discovery</h2><ol> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/01-Welcome/W1S00-Intro-Objectives.pdf">W1S00-Intro-Objectives</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/01-Welcome/W1S01-WhatIsPharo.pdf">W1S01-What is Pharo?</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/01-Welcome/W1S02-PharoVision.pdf">W1S02-Pharo Vision</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/01-Welcome/W1S03-FirstLookAtClassObjectMethods.pdf">W1S03-FirstLookAtClassObjectMethods</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/01-Welcome/W1S04-PharoModelInaNushell.pdf">W1S04-PharoModelInaNushell</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/01-Welcome/W1S04-TestIntroduction.pdf">W1S04-TestIntroduction</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/01-Welcome/W1S05-PharoSyntaxInANutshell.pdf">W1S05-PharoSyntaxInANutshell</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/01-Welcome/W1S06-Blocks.pdf">W1S06-Blocks</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/01-Welcome/W1S07-Basic-Blocks-Loops.pdf">W1S07-Basic-Blocks-Loops</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/01-Welcome/W1S07-BasicBooleansAndCondition.pdf">W1S07-BasicBooleansAndCondition</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/01-Welcome/W1S08-Loops.pdf">W1S08-Loops</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/01-Welcome/W1S10-ClassAndMethodDefinition.pdf">W1S10-ClassAndMethodDefinition</a></li> <li> [Live Exercise] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W1/C019-W1S-Videos-SelectionExpression-2-FR-V2-HD_720p_4Mbs.m4v"> Selecting and executing expressions</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W1/">here</a> ) </li> <li> [Live Exercise] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W1/C019-W1S-Videos-ColoringExpression-FR-CM-v3-HD_720p_4Mbs.m4v">Syntax Highlighting gives Feedback</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W1/">here</a> )</li> <li> [Live Exercise] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W1/C019-W1S-Videos-Shortcuts-FR-IR-HD_720p_4Mbs.m4v">Learn Keyboard Shortcuts</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W1/">here</a> )</li> <li> [Live Exercise] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W1/C019-Videos-ProfStef-V2-HD_720p_4Mbs.m4v">Learn Pharo with Prof Stef</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W1/">here</a>)</li> <li> [Exercise] Expressions and Messages</li> <li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W1/C019-W1S-Videos-Redo-Counter-Traditional-FR-v4.mp4">Coding a Counter</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W1/">here</a>)</li></ol><p> You can access </p> <ol> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/01-Welcome/">Week session slides</a></li> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/">Pharo Mooc videos</a>. Pay attention they may be not in the same order - Check the Resources slide in the lectures to get the corresponding Pharo Mooc session.</li></ol></section><section id="week2"> <h2>Week 2: Pharo Syntax and Inspector</h2><ol> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/02-Syntax/W2S01-Messages.pdf">W2S01-Messages</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/02-Syntax/W2S02-Messages-ForTheJavaProgrammers.pdf">W2S02-Messages-ForTheJavaProgrammers</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/02-Syntax/W2S03-Basic-Variables.pdf">W2S03-Basic-Variables</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/02-Syntax/W2S03-Messages-Precedence.pdf">W2S03-Messages-Precedence</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/02-Syntax/W2S04-Messages-Sequence.pdf">W2S04-Messages-Sequence</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/02-Syntax/W2S05-ParenthesisVsSquareBrackets.pdf">W2S05-ParenthesisVsSquareBrackets</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/02-Syntax/W2S06-Yourself.pdf">W2S06-Yourself</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/02-Syntax/W2S07-CharacterStringSymbol.pdf">W2S07-CharacterStringSymbol</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/02-Syntax/W2S08-Basic-ArraySetOrderedCollection.pdf">W2S08-Basic-ArraySetOrderedCollection</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/02-Syntax/W2S09-UnderstandingMistakes.pdf">W2S09-UnderstandingMistakes</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/02-Syntax/W2S10-Iterators.pdf">W2S10-Iterators</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/02-Syntax/W2S11-Streams.pdf">W2S11-Streams</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/02-Syntax/W2S12-RuntimeArchitecture.pdf">W2S12-RuntimeArchitecture</a></li> <li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W2/C019-Videos-GTInspector1-Introduction-V2-HD_720p_4Mbs.m4v">GTInspector 1: Inspect and Interact with Objects</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W2/">here</a>)</li> <li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W3/C019-Videos-Spotter1-BrowsingAClassWithSpotter-V2-HD_720p_4Mbs.m4v">Spotter 1: Find and Browse a Class</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W3/">here</a>)</li> <li>[Challenge] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Exercises/Challenge0-EN.pdf">Challenge 0</a> </li></ol><p> You can access </p> <ol> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/02-Syntax/">Week session slides</a></li> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/">Pharo Mooc videos</a>. Pay attention they may be not in the same order - Check the Resources slide in the lectures to get the corresponding Pharo Mooc session.</li></ol></section><section id="week3"> <h2>Week 3: Objects, Classes, Methods</h2><ol> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/03-ObjectClassMethod/W3S00-TeapotAsAPretext.pdf">W3S00-TeapotAsAPretext</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/03-ObjectClassMethod/W3S01-WhatisAnObject.pdf">W3S01-WhatisAnObject</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/03-ObjectClassMethod/W3S02-WhatisAClass.pdf">W3S02-WhatisAClass</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/03-ObjectClassMethod/W3S03-MethodVsMessages.pdf">W3S03-MethodVsMessages</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/03-ObjectClassMethod/W3S04-OOParadigm.pdf">W3S04-OOParadigm</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/03-ObjectClassMethod/W3S05-SUnit.pdf">W3S05-SUnit</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/03-ObjectClassMethod/W3S06-Discovering.pdf">W3S06-Discovering</a></li> <li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/03-ObjectClassMethod/W3S7-EssenceOfDispatchExo.pdf">W3S7-EssenceOfDispatchExo</a></li> <li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W2/C019-Videos-Nautilus1-BrowsingPackage-V2-HD_720p_4Mbs.m4v">Nautilus: First Meet with the Code Browser</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W2/">here</a>)</li> <li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W2/C019-Videos-Nautilus2-TagsFilterAndGroups-V2-HD_720p_4Mbs.m4v"> Nautilus: Packages, Tags and Groups</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W2/">here</a>)</li> <li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W3/C019-Videos-Nautilus4-SendersImplementors-HD_720p_4Mbs.m4v">Nautilus: How to Become a Super Pharo Developer: Understanding Sender and Implementors</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W3/">here</a>)</li> <li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W2/C019-W1S-Videos-Finder-FR-V3-HD_720p_4Mbs.m4v">Finding Methods with Finder</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W2/">here</a>)</li> <li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W2/C019-W1-Videos-Redo-CodingCounterInDebugger-FR-V2-HD_720p_4Mbs.m4v">Coding a Counter in the Debugger</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W2/">here</a>)</li> <li>[Exercise] Coding a DSL</li> <!-- <li>[Challenge] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Exercises/Challenge0-Solution-EN.pdf">Solution Challenge 0</a> </li>--> <li>[Challenge] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Exercises/Challenge1-EN.pdf">Challenge 1</a> </li></ol><p> You can access </p> <ol> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/03-ObjectClassMethod/">Week session slides</a></li> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/">Pharo Mooc videos</a>. Pay attention they may be not in the same order - Check the Resources slide in the lectures to get the corresponding Pharo Mooc session.</li></ol></section><section id="week4"><h2>Week 4: Essence Of OOP</h2><ol><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/04-EssenceOfOOP/W4S01-EssenceOfDispatchNot.pdf">W4S01-EssenceOfDispatchNot</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/04-EssenceOfOOP/W4S02-EssenceOfDispatch.pdf">W4S02-EssenceOfDispatch</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/04-EssenceOfOOP/W4S03-BasicClassMethods.pdf">W4S03-BasicClassMethods</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/04-EssenceOfOOP/W4S05-LearningFromMistake.pdf">W4S05-LearningFromMistake</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/04-EssenceOfOOP/W4S06-WhyTesting.pdf">W4S06-WhyTesting</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/04-EssenceOfOOP/W4S07-Debugging.pdf">W4S07-Debugging</a></li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W2/C019-Videos-Nautilus5-Queries-HD_720p_4Mbs.m4v">Nautilus: Navigating Fast Inside Classes</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W2/">here</a>)</li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W3/C019-Videos-Spotter2-Categories-V2-HD_720p_4Mbs.m4v">Spotter 2: Filter Results by Category</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W3/">here</a>)</li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W4/C019-Videos-HowToLoadCode1-Simple-HD_720p_4Mbs.m4v">How to load code from repository</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W4/">here</a>)</li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W4/C019-Videos-HowToLoadCode2-FromCatalog-HD_720p_4Mbs.m4v">How to load projects</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W4/">here</a>)</li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W4/C019-Videos-Nautilus6-Refactorings-HD_720p_4Mbs.m4v">Nautilus: An overview of Refactorings</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W4/">here</a>)</li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W4/C019-Videos-Nautilus7-QualityRules-HD_720p_4Mbs.m4v">Nautilus: Using the Quality Assistant and Code Critic</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W4/">here</a>)</li><!-- <li>[Challenge] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Exercises/Challenge1-Solution-EN.pdf">Solution Challenge 1</a> </li>--><li>[Challenge] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Exercises/Challenge2-EN.pdf">Challenge 2</a> </li></ol><p> You can access </p> <ol> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/04-EssenceOfOOP/">Week session slides</a></li> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/">Pharo Mooc videos</a>. Pay attention they may be not in the same order - Check the Resources slide in the lectures to get the corresponding Pharo Mooc session.</li></ol></section> <section id="week5"><h2>Week 5: Inheritance</h2><ol><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/05-Inheritance/W5S01-InheritanceAndLookup-1-Inheritance.pdf">W5S01-InheritanceAndLookup-1-Inheritance</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/05-Inheritance/W5S02-InheritanceAndLookup-2-Lookup.pdf">W5S02-InheritanceAndLookup-2-Lookup</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/05-Inheritance/W5S03-InheritanceAndLookup-3-Super-V2.pdf">W5S03-InheritanceAndLookup-3-Super-V2</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/05-Inheritance/W5S04-Design-ImplementingIfTrue.pdf">W5S04-Design-ImplementingIfTrue</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/05-Inheritance/W5S05-MoreOnVariables.pdf">W5S05-MoreOnVariables</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/05-Inheritance/W5S06-Design-InstanceInitialization.pdf">W5S06-Design-InstanceInitialization</a></li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W2/C019-Videos-Nautilus3-BrowsingFullInheritanceAcrossPackages-V2-HD_720p_4Mbs.m4v">Nautilus: Inheritance view</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W2/">here</a>)</li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W5/C019-Videos-Spotter3-ScopingAndReducingSearch-V2-HD_720p_4Mbs.m4v "> Spotter: Scoping and Reducing Search</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W5/">here</a>)</li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W5/C019-Videos-Spotter6-Files-V2-HD_720p_4Mbs.m4v">Spotter: Search, Navigate and Preview Files</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W5/">here</a>)</li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W5/C019-W2S-VideosDebugger1-UsingTheDebugger-V2-HD_720p_4Mbs.m4v">Learning the Debugger</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W5/">here</a>)</li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W5/C019-W2S-VideosDebugger2-FindingABugWithDebugger-V2-HD_720p_4Mbs.m4v">How to find a bug?</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W5/">here</a>)</li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W5/C019-Videos-GTInspector2-Files-V2-HD_720p_4Mbs.m4v">GTInspector: Inspect Files and Directories</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W5/">here</a>)</li><!-- <li>[Challenge] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Exercises/Challenge2-Solution-EN.pdf">Solution Challenge 2</a> </li>--><li>[Challenge] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Exercises/Challenge3-EN.pdf">Challenge 3</a> </li></ol><p> You can access </p> <ol> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/05-Inheritance/">Week session slides</a></li> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/">Pharo Mooc videos</a>. Pay attention they may be not in the same order - Check the Resources slide in the lectures to get the corresponding Pharo Mooc session.</li></ol></section><section id="week6"><h2>Week 6: Plans For Reuse</h2><ol><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/06-PlansForReuse/W6S02-SelfSendsDiceHandle.pdf">W6S02-SelfSendsDiceHandle</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/06-PlansForReuse/W6S03-ClassMethodsAtWork.pdf">W6S03-ClassMethodsAtWork</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/06-PlansForReuse/W6S04-SelfSendsArePlanForReuse.pdf">W6S04-SelfSendsArePlanForReuse</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/06-PlansForReuse/W6S05-HookAndTemplate.pdf">W6S05-HookAndTemplate</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/06-PlansForReuse/W6S06-Design-UseVsInheritance.pdf">W6S06-Design-UseVsInheritance</a></li><!-- A voir si on utilise PharoApp ou le launcher<li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W6/C019-Videos-ImageChanges1-v2-HD_720p_4Mbs.m4v">Understanding Images and Changes Files</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W6/">here</a>)</li>--><!--<li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W6/C019-Videos-ImageChanges2-PharoLauncher-HD_720p_4Mbs.m4v">Using the Pharo Launcher to manage your Pharo images</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W6/">here</a>)</li>--><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W6/C019-Videos-LookAtVersions-v2-HD_720p_4Mbs.m4v">Diffing and Merging in Pharo</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W6/">here</a>)</li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W6/C019-Videos-GTInspector4-HowAddingPanes-V2-HD_720p_4Mbs.m4v">GTInspector: Build Custom Tab Views for your Objects</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W6/">here</a>)</li><!-- <li>[Challenge] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Exercises/Challenge3-Solution-EN.pdf">Solution Challenge 3</a> </li>--><li>[Challenge] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Exercises/Challenge4-EN.pdf">Challenge 4</a> </li></ol><p> You can access </p> <ol> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/06-PlansForReuse/">Week session slides</a></li> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/">Pharo Mooc videos</a>. Pay attention they may be not in the same order - Check the Resources slide in the lectures to get the corresponding Pharo Mooc session.</li></ol></section><section id="week7"><h2>Week 7: Deeper into Lookup</h2><ol><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/07-DeeperIntoLookup/W7S02-InheritanceAndLookup-5-LookupMetaclasses.pdf">W7S02-InheritanceAndLookup-5-LookupMetaclasses</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/07-DeeperIntoLookup/W7S03-UnderstandingClassMethods.pdf">W7S03-UnderstandingClassMethods</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/07-DeeperIntoLookup/W7S04-AdvancedPointOnClasses.pdf">W7S04-AdvancedPointOnClasses</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/07-DeeperIntoLookup/W7S05-Design-LearningFromRealExample.pdf">W7S05-Design-LearningFromRealExample</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/07-DeeperIntoLookup/W7S06-AvoidIsNill.pdf">W7S06-AvoidIsNill</a></li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W7/C019-Videos-Spotter4-TipsandTricks-PreviewInSpotter-V2-HD_720p_4Mbs.m4v">Spotter: The Preview pane</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W7/">here</a>)</li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W7/C019-Videos-Spotter5-TipsandTricks-SearchingPlaygroundCode-V2-HD_720p_4Mbs.m4v">Spotter: Search in Playground History</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W7/">here</a>)</li><li>[Live Exercise] <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W7/C019-Videos-GTInspector3-DivingInTheSystem-V2-HD_720p_4Mbs.m4v">GTInspector 3: Understand Pharo Internals by Inspection</a> (check the subtitles <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/W7/">here</a>)</li><!-- <li>[Challenge] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Exercises/Challenge4-Solution-EN.pdf">Solution Challenge 4</a> </li>--><li>[Challenge] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Exercises/Challenge5-EN.pdf">Challenge 5</a> </li></ol><p> You can access </p> <ol> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/07-DeeperIntoLookup/">Week session slides</a></li> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/">Pharo Mooc videos</a>. Pay attention they may be not in the same order - Check the Resources slide in the lectures to get the corresponding Pharo Mooc session.</li></ol></section><section id="week8"><h2>Week 8: More on Dispatch</h2><ol><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/08-MoreOnDispatch/W8S01-Design-DoubleDispatch-Dice.pdf">W8S01-Design-DoubleDispatch-Dice</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/08-MoreOnDispatch/W8S02-Design-DoubleDispatch.pdf">W8S02-Design-DoubleDispatch</a></li><li>[Lecture] <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/08-MoreOnDispatch/W8S03-Design-DualInterfaces.pdf">W8S03-Design-DualInterfaces</a></li><!-- <li>[Challenge] <a href ="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Exercises/Challenge5-Solution-EN.pdf">Solution Challenge 5</a> </li>--></ol><p> You can access </p> <ol> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/OOPMooc/08-MoreOnDispatch/">Week session slides</a></li> <li> the <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Videos/">Pharo Mooc videos</a>. Pay attention they may be not in the same order - Check the Resources slide in the lectures to get the corresponding Pharo Mooc session.</li></ol></section> <section id="miniprojects"><h2> Mini projects </h2>You will have mini projects (called semester projects) by team of 2 to 4 students.<ul> <li>Miniprojects will have to be published on SmalltalkHub or github.com. </li> <li>Miniprojects will have to be covered by tests. Class/package comments will have to explain the design. </li> <li>You are asked to produce a log of actions each week and version it.</li> <li>Finally a small videos of 3 min will have to be produced and presented to the community. </li> <li>You can propose a topic.</li></ul><ul> <li> <pr><b>Tweet analysis</b> <ul> <li> Description: The goal of this project is to develop a little application web or desktop that supports the analysis of tweets such as a frequency, vocabulary analysis. Search, statistics and visualisation are possible.</li> <li>First tasks: check the API proposed by Tweeter, look at the example provided in Roassal (that you can find in the Moose <a href="http://www.moosetechnology.org"> http://www.moosetechnology.org</a> distribution) and in the agile visualisation book, sketches some analyses such as the distributions and trends about a topics. <li>Possible contacts: Offray Valdimir Luna Car is a data journalist hacking in Pharo. You can contact him on the Pharo mailing-list or Discord. Alexandre Bergel the author of Roassal can be contacted too. </li> <li> Link and resources: Have a look at the Zinc chapter in Entreprise Pharo, Agile visualisation and the Spec UI framework book available at <a href="http://books.pharo.org">http://books.pharo.org</a>. Some indian students did a similar projects and they show it on youtube.</li> </ul> </li> <li> <pr><b>RPG: FireEmblem/Disgaea using Bloc</b> <ul> <li>Description: The goal of this project is to develop a turn-based RPG where a team of characters can attack a team of opponents on a 2D map in a Disgaea/Fire Emblem way.</li> <li>First Tasks: Check the Bloc booklet below, check the CTGrid package, check some graphics from the opengame art database (<a href="https://opengameart.org/content/roguelikerpg-pack-1700-tiles">https://opengameart.org/content/roguelikerpg-pack-1700-tiles</a>), design a team and characters properties such as (Attack, Lifepoint, Magic points, Move distance), define objects responsible for the battle resolution.</li> <li>Possible contacts: Stéphane Ducasse and Clément Béra. </li> <li>Links and resources: Read the Bloc MemoryGame booklet <a href="http://books.pharo.org">http://books.pharo.org</a>. Characters can be imported from: <a href=" http://gaurav.munjal.us/Universal-LPC-Spritesheet-Character-Generator/"> http://gaurav.munjal.us/Universal-LPC-Spritesheet-Character-Generator/</a>. You can have a look at the Container/CTGrid datastructure available at: <a href="http://smalltalkhub.com/#!/~StephaneDucasse/Containers"> http://smalltalkhub.com/#!/~StephaneDucasse/Containers</a> or 2DArray. </li> </ul> </li> <li> <pr><b>Sprites Importer and manager </b> <ul> <li>Description: The goal of this project is to (1) be able to import sprites from for example the opengameart community, (2) be able to load/edit/save levels and worlds. Map elements can be imported from: <a href=" https://opengameart.org/content/zelda-like-tilesets-and-sprites"> https://opengameart.org/content/zelda-like-tilesets-and-sprites</a><a href="https://opengameart.org/content/roguelikerpg-pack-1700-tiles">https://opengameart.org/content/roguelikerpg-pack-1700-tiles</a>. </li> <li>First Tasks: Check the sprite challenge in the Pharo mooc. Define an importer that can import sprites of different projects. Verify that you can load different projects. You should be able to display the graphical elements and provide a mapping so that you can refer to them in maps. Have a look at the CTGrid package. The edition of maps can be made by associating a character with a graphics and to edit maps in ascii. This is nice to save maps. You should be able to load/edit/save maps. Using STON (the textual serialiser) you should be able to save worlds and their associated graphics. We should be able to attach a new set of graphics to a given map (like trees in different seasons). Now you can also have a graphical editor that can let the user define its map by dragging and dropping graphical elements from a palette. For this you should have a look at the Bloc booklet. (<a href="https://opengameart.org/content/roguelikerpg-pack-1700-tiles">https://opengameart.org/content/roguelikerpg-pack-1700-tiles</a>). C </li> <li>Possible contacts: Stéphane Ducasse and Clément Béra. </li> <li>Links and resources: To display the map you can use Bloc (Read the Bloc MemoryGame booklet <a href="http://books.pharo.org">http://books.pharo.org</a>) or plain Morphic. To manage the map, you can have a look at the Container/CTGrid datastructure available at: <a href="http://smalltalkhub.com/#!/~StephaneDucasse/Containers"> http://smalltalkhub.com/#!/~StephaneDucasse/Containers</a> or 2DArray.</li> </ul> </li> <li> <pr><b>Improving tiny chat</b> <ul> <li>Description: Tinychat is an exercise in the Pharo mooc. Lot of improvements are listed in the chapter<a href="http://mooc.pharo.org">http://mooc.pharo.org</a>.</li> <li>First Tasks: Read the tinychat exercise. Implement some of the extensions proposed and come up with your own. We could also have a web version using Seaside (see http://book.seaside.st).</li> <li>Possible contacts: Olivier Auverlot (olivier.auverlot@gmailcom) and Stéphane Ducasse.</li> <li>Links and resources: Read the Teapot Chapter in the Entreprise Pharo book available at <a href="http://books.pharo.org">http://books.pharo.org</a></li> </ul> </li> <li> <pr><b>Discord analysis</b> <ul><li>Description: The goal of this project is to develop a little application (web or desktop) that supports the analysis of discord discussion. Contact with a researcher on the topic is possible. The code of a first tool based on Pharo 70 is available at: <a href="https://github.com/estebanlm/record">https://github.com/estebanlm/record</a></li> <li>First Tasks: Read the code of the application. Read some of the example of Roassal in the book agile visualisation, familiarise yourself with Spec. You can propose word clouds, display evolution of discussions, characterise discussions (number of participants, length of the discussions, vocabulary used in a discussion....). <li>Possible contacts: Esteban Lorenzano and Stéphane Ducasse</li> <li> Link and resources: Have a look at the Zinc chapter in Entreprise Pharo, Agile visualisation and the Spec UI framework book available at <a href="http://books.pharo.org">http://books.pharo.org</a>. </li> </ul> </li> <li> <pr><b>Game Collector App</b></pr> <ul><li>Description: The goal of this project is to develop a little application (web or desktop) that supports the management of games (PS3, PS4, PS2, Wii). Describing games, managing different collections such as the games lent, that we are looking for, ... In addition it would be good to expose the collection on the web. Saving the collection can be done using the STON serialiser. Now other means such as using Voyage to talk to MongoDB is a possibility (Check the Voyage booklet <a href="http://books.pharo.org">https://books.pharo.org</a>). </li> <li> Link and resources: Have a look at the Spec UI framework book available at <a href="http://books.pharo.org">http://books.pharo.org</a> for a desktop version. For a web solution <a href="http://book.seaside.st">http://book.seaside.st</a> offers a free book on the seaside web frameworks - with REST integration.</li> </ul> </li> <li> <pr><b>Books Collector App</b></pr> <ul> <li>Description: The goal of this project is to develop a little application (web or desktop) that supports the management of books. Describing books, managing different collections such as the games lent, that we are looking for, ... In addition it would be good to expose the collection on the web. Saving the collection can be done using the STON serialiser. Now other means such as using Voyage to talk to MongoDB is a possibility (Check the Voyage booklet <a href="http://books.pharo.org">https://books.pharo.org</a>). </li> <li> Link and resources: Have a look at the Spec UI framework book available at <a href="http://books.pharo.org">http://books.pharo.org</a> for a desktop version. For a web solution <a href="http://book.seaside.st">http://book.seaside.st</a> offers a free book on the seaside web frameworks - with REST integration.</li> </ul> </li> <li> <pr><b>Sokoban using Bloc</b></pr> <ul><li>Description: The goal of this project is to develop a sokoban game. The application should be able to load levels, collect points... Nicely decoupling the UI from the game model should be considered. </li> <li>Possible contacts: Stéphane Ducasse and Aliaksei Syrel </li> <li> Link and resources: Read the Bloc MemoryGame booklet <a href="http://books.pharo.org">http://books.pharo.org</a>. <a href="https://juliendelplanque.be">https://juliendelplanque.be</a> proposes a Pharo model for a miner and it may be useful to have a look at it. You can also have a look at the Container/CTGrid datastructure available at: <a href="http://smalltalkhub.com/#!/~StephaneDucasse/Containers"> http://smalltalkhub.com/#!/~StephaneDucasse/Containers</a> or 2DArray.</li> </ul> </li> <li> <pr><b>Contact and Prospect Manager App</b></pr> <ul> <li>Description: The goal of this project is to develop a little application (web or desktop) that supports the management of contacts and prospects. Describing contacts, import vcards, managing different collections. In addition it would be good to expose the collection on the web. Saving the collection can be done using the STON serialiser. Now other means such as using Voyage to talk to MongoDB is a possibility (Check the Voyage booklet). There is a start of the contact manager in the Pharo <a href="http://rmod-pharo-mooc.lille.inria.fr/MOOC/Exercises/">mooc exercises</a>. This project should be extended to support prospects i.e. when you want to sale something you should describe better your contacts, their context, their role in a company, add some alarms to recontact them but also keep a log of the contact sessions. Such data can be shared between different sales persons. Now a sales may not want to share all its contacts and prospect with other sales.</li> <li>First Tasks: Implement the simple exercise. Read the beginning chapter of the Seaside book. </li> <li>Possible contacts: Stéphane Ducasse</li> <li> Link and resources: Have a look at the Spec UI framework book available at <a href="http://books.pharo.org">http://books.pharo.org</a> for a desktop version. For a web solution <a href="http://book.seaside.st">http://book.seaside.st</a> offers a free book on the seaside web frameworks - with REST integration. A web version looks adapted to share prospect and contact between people.</li> </ul> </li> <li> <pr><b>Minesweeper using Bloc</b> <ul><li>Description: The goal of this project is to develop a Minersweeper game. The application should be able to load levels, collect points... In addition, the placements of the bomb should not be random. The user should not be in a situation where he cannot deduce if there is a bomb or not. <a href="https://juliendelplanque.be">https://juliendelplanque.be</a> proposes a Pharo model for a mine sweeper and it may be useful to have a look at it. </li> <li>Possible contacts: Stéphane Ducasse and Aliaksei Syrel </li> <li> Link and resources: Read the Bloc MemoryGame booklet available at <a href="http://books.pharo.org">http://books.pharo.org</a>. </li> </ul> </li> <li> <pr><b>Miner using Bloc</b> <ul><li>Description: The goal of this project is to develop a Miner game. The application should be able to load levels, collect points....<a href="https://juliendelplanque.be">https://juliendelplanque.be</a> proposes a Pharo model for a minesweeper and it may be useful to have a look at it.</li> <li>Possible contacts: Stéphane Ducasse and Aliaksei Syrel </li> <li> Link and resources: Read the Bloc MemoryGame booklet available at <a href="http://books.pharo.org">http://books.pharo.org</a>.</li> </ul> </li> <li> <pr><b>Miniworld to learn path finding algorithms</b> <ul><li>Description: The goal of this project is to be able to study different AI algorithms related to path findings (depth-first, *Star, breath-first). We would like to have a 2D map such as the one in 2D game (sokoban, old zelda). On such a map each tile can have properties (cost to cross it, elements). Then we can build different algorithms starting from a place and looking for an exit taking into account obstacles (river, trees) or paths. The people using this miniworld should be able to inspect the algorithm and the world graph to understand the way the algorithm is working. <li>Possible contacts: Stéphane Ducasse and Aliaksei Syrel </li> <li> Link and resources: The graphics can be rendered using plain Morphic or Bloc. Read the MemoryGame booklet <a href="http://books.pharo.org">http://books.pharo.org</a>. </li> </ul> </li> <li> <pr><b>Improving Wizard Battle Arena</b> <ul><li>Description: The goal of this project is to enhance the Wiazard Battle Arena game developed by C. Béra. <a href="https://github.com/clementbera/wizard-battle-arena">https://github.com/clementbera/wizard-battle-arena</a> The game should be able to load levels, collect points, have bonuses. An extended version could be to have a distributed version where we can play on multiple computer. <li>Possible contacts: Clément Béra and Stéphane Ducasse</li> <li> Link and resources: Contact clement Bera <a href="https://clementbera.wordpress.com"> https://clementbera.wordpress.com</a>. Contact Noury Bouraqadi for his network discovery library called Ubiquitalk.</li> </ul> </li> <li> <pr><b>AI for RPG combats</b> <ul> <li>Description: The goal of this project is to develop an AI for RPG game such as fire Emblem where a team should beat opponents. An important design question is whether the AI knows the characteristics or not of the player team in term of strength, weapons and abilities. When we do not know the characteristics of the ennemies we should adapt and learn by remembering which opponent did what damage and how. Creating a small UI would be a plus but the output of a AI can be plain text. </li> <li>First Tasks: Design characters (strength, attack, lifepoints, magic points), weapons (range, damage). Start to design objects responsible to represent a possible strategy like all attacking the same. Then we should find way to represent kind of rules to decide what to do. It may be interesting to use fuzy logic to help taking decision. Look at https://en.wikipedia.org/wiki/Fuzzy_logic and </li> <li>Possible contacts: Stéphane Ducasse</li> <li> Link and resources: Read the Bloc MemoryGame booklet <a href="http://books.pharo.org">http://books.pharo.org</a>. </li> </ul> </li> <li> <pr><b>Magic Deck builder App</b> <ul> <li>Description: The goal of this project is to develop an App to manage magic card collection or decks. The player should be able to import a set of cards and build several decks with it. Validation rules such as no more than 4 cards of the same types should be enforced. Importing the information found on online database <a href="http://gatherer.wizards.com/Pages/Default.aspx">http://gatherer.wizards.com/Pages/Default.aspx</a> using scraping approach as described in the booklet Scraping HTML uzing XPath available at <a href="http://books.pharo.org">http://books.pharo.org</a>.</li> <li> Link and resources: Have a look at the Spec UI framework book available at <a href="http://books.pharo.org">http://books.pharo.org</a> for a desktop version. For a web solution <a href="http://book.seaside.st">http://book.seaside.st</a> offers a free book on the seaside web frameworks - with REST integration. </li> </ul> </li> <li> <pr><b>Snake Competition Client Server</b> <ul> <li>Description: The goal of this project is to develop the client and server for the following competition system<a href="https://stembolthq.github.io/battle_snake/">https://stembolthq.github.io/battle_snake/</a>. The renderer can be done on the web or inside Pharo using a 2D map. You should contact Jerry Kott jkott@cincom.com for help and information.</li> <li> Link and resources: Read the Bloc MemoryGame booklet <a href="http://books.pharo.org">http://books.pharo.org</a>.</li> </ul> </li> <li> <pr><b>Client/Server HTTP for the elevator competition</b> <ul> <li>Description: The goal of this project is to develop the client and server for the following competition system<a href="https://github.com/xebia-france/code-elevator">https://github.com/xebia-france/code-elevator</a>. The idea is that clients should code the logic to bring people from stair to stair. The server side schedules people waiting in front of the elevator and monitor each client and give different points to them showing a dash board of the competiting teams.</li> <li> Link and resources: Reading the Zinc HTTP chapter on the Pharo Entreprise book will definitively help <a href="http://books.pharo.org">http://books.pharo.org</a>. In addition the display for the result of the competiting teams can be done with Seaside <a href="http://seaside.st">http://seaside.st</a>.</li> </ul> </li> <li> <pr><b>OpenPonk</b> <ul> <li>Description: The goal of this project is to develop some plugins for the OpenPonk modeling platform.</li> <li> Link and resources: Talk to Peter and Prof. Pergl about it.</li> </ul> </li> <li> <pr><b>Pillar renderer</b> <ul> <li>Description: Pillar is document processing system developed in Pharo. The books, slides of this lectures are defined using Pillar. The idea of this project is to provide a live rendering system so that the writer can see a rendered version of what he is typing. In addition clicking on a graphical element should jump to the text. A first little experiment was made in the Pillar-Renderer package and can be loaded from the pillar repository.MCSmalltalkhubRepository owner: 'Pier' project: 'Pillar' user: '' password: ''. The current experience is using Morphic the default and old graphical framework. Using Bloc the future graphical framework is an option.</li> <li> Link and resources: <a href="https://github.com/pillar-markup/pillar">https://github.com/pillar-markup/pillar</a>. Check the discussion in the Pharo mailing-list https://mail.google.com/mail/u/0/#search/pillar+editor/15e1d8bc2bbee23c . Contact stephane.ducasse@inria.fr for guidance. Read the chapter on double dispatch and the visitor design pattern. Ask Stephane Ducasse.</li> </ul> </li> <li> <pr><b>Improving the Pillar HTML/epub outputter</b> <ul> <li>Description: Pillar is document processing system developed in Pharo. The books, slides of this lectures are defined using Pillar. The idea of this project is to improve the HTML outputter as well as the epub one.</li> <li> Link and resources: <a href="https://github.com/pillar-markup/pillar">https://github.com/pillar-markup/pillar</a>. Contact stephane.ducasse@inria.fr for guidance. Read the chapter on double dispatch and the visitor design pattern. Ask Stephane Ducasse.</li> </ul> </li> <li> <pr><b>Surface Designer</b> <ul> <li>Description: The goal of this project is to create a chip surface designer and simulator similar to the game Engineer of the people, but with infinite drawing area<a ref="http://www.blakeohare.com/article/kohctpyktop/">http://www.blakeohare.com/article/kohctpyktop</a><a ref="https://www.youtube.com/watch?v=gG9utx6x0rY">https://www.youtube.com/watch?v=gG9utx6x0rY</a><a href="http://www.zachtronics.com/kohctpyktop-engineer-of-the-people/">http://www.zachtronics.com/kohctpyktop-engineer-of-the-people/</a>.</li> </ul> </li> <li> <pr><b>macroassembler</b> <ul> <li>Description: The goal of this project is to develop a macroassembler and simulator for a single-instruction computer <a href="https://pragprog.com/magazines/2012-03/the-nor-machine">https://pragprog.com/magazines/2012-03/the-nor-machine</a>.</li> </ul> </li></ul></section> <section id="download"> <h2>Download Pharo</h2> <p>We will use <a href="http://mooc.pharo.org#download">Pharo 50 as the Pharo Mooc</a>. Now you are free to use <a href="http://www.pharo.org">Pharo 6.1</a></p> </section> <section id="about"> <h2>About</h2> <div class="row"><div class="col-xs-4"> <section> <img alt="Stéphane Ducasse" src="Web/pictures/sducasse.jpg" class="teacher"/> <h3>Stéphane Ducasse</h3> <p>Stéphane Ducasse is directeur de recherche at Inria. He leads the RMoD team. He is expert in two domains: object-oriented language design and reengineering. His works on traits have been introduced in AmbientTalk, Slate, Pharo, Perl-6, PHP 5.4 and Squeak. They have also influencedJavaScript, Scala and Fortress. Stéphane is also expert on software quality, program understanding, program visualisations, reengineering and metamodeling. He is one of the developers of Pharo. He is also one of the developers of Moose, an open-source software analysis platform. He created Synectique a company building dedicated tools for advanced software analysis. Stéphane wrote several books on programming learning and other topics such as web programming.</p> </section></div> <footer class="text-center"> <p>This webpage is hosted in <a href="https://github.com/SquareBracketAssociates/PharoMooc-website">https://github.com/SquareBracketAssociates/OOProgrammingMooc-website</a>.</p> <p>The slides are hosted in <a href="https://github.com/SquareBracketAssociates/OOProgrammingMooc">https://github.com/SquareBracketAssociates/OOProgrammingMooc</a>.</p> </footer> </div> <!-- end of container --> <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"> </script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="Web/js/bootstrap.min.js"> </script> </body></html>