forked from Catrobat/catrobat.github.com
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gsoc_2017_ideas_page.html
390 lines (351 loc) · 15.1 KB
/
gsoc_2017_ideas_page.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<title>Ideas Page</title>
<link rel="stylesheet" href="stylesheets/styles.css">
<link rel="stylesheet" href="stylesheets/pygment_trac.css">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<div class="wrapper">
<header>
<h1>Catrobat</h1>
<p>
A visual programming language
<br/>
and set of creativity tools
<br/>
for smartphones, tablets,
<br/>
and mobile browsers
</p>
<p class="view">
<a href="http://www.catrobat.org/">Home</a>
</p>
<p class="view">
<a href="http://developer.catrobat.org/">Developers' Home</a>
</p>
<p class="view">
<a href="http://developer.catrobat.org/first_steps">First steps into Catrobat</a>
</p>
<p class="view">
<a href="http://catrob.at/pc">Find Pocket Code on Google Play</a>
</p>
<p class="view">
<a href="http://catrob.at/plus"><img src="googleplus.png" height="20px"/></a> <a href="http://catrob.at/fb"><img src="facebook.png" height="20px"/></a> <a href="http://catrob.at/pctwitter"><img src="twitter.png" height="20px"/></a> <a href="http://catrob.at/youtube"><img src="youtube.png" height="20px"/></a> <a href="http://catrob.at/mailinglist"><img src="google-group.png" height="20px"/></a> <a href="http://catrob.at/github"><img src="github.png" height="20px"/></a> <a href="mailto:[email protected]"><img src="mail.jpg" height="20px"/></a>
</p>
</header>
<section>
<h2>Ideas Page for Google Summer of Code 2017</h2>
<br />
<strong>Welcome,
<br />
we officially present our project ideas for this year's Google Summer of Code.</strong>
<br />
08 February 2017</p>
<p>
<strong><u>General knowledge prerequisites for all projects</u>
<br />
<i>JUnit and Robotium for test-driven development on Android devices (Pocket Code and Pocket Paint), Phpunit and Selenium for test-driven development of Web-related projects, Git (revision control) for all projects </i></strong>
</p>
<p>
<h3>Overview:</h3>
<ul>
<li>
<a href="#idea_1">HTML5 Physics Engine</a>
</li>
<li>
<a href="#idea_2">iOS: Implementation of missing Bricks and Sensors</a>
</li>
<li>
<a href="#idea_3">Catroid-Core: Refactoring Code</a>
</li>
<li>
<a href="#idea_4">Catroid-Core: Refactoring Ui Tests</a>
</li>
<li>
<a href="#idea_5">Catroid-Core: Refactoring Unit Tests</a>
</li>
<li>
<a href="#idea_6">Catroid-Core: Refactor/Introduce Flavoring (Flavoring NEW)</a>
</li>
<li>
<a href="#idea_7">Pocket Code - Pocket Paint: Integrate Pocket Paint AS a Flavor into Pocket Code</a>
</li>
<li>
<a href="#idea_8">UX Redesign of Pocket Code</a>
</li>
<li>
<a href="#idea_9">iOS: Create your own Bricks - User Bricks</a>
</li>
<li>
<a href="#idea_10">HTML5: UserBricks (Scripts + CallUserScript)</a>
</li>
<li>
<a href="#idea_11">Pocket Code: Inclusion of Firebase</a>
</li>
</ul>
</p>
<p>
<h3> Projects </h3>
<a id="idea_1"><strong>Title:</strong> HTML5 Physics Engine</a>
<br />
<strong>Brief explanation and expected results:</strong>
<p>PocketCode provides several code bricks for physics-enabled sprites:
<ul>
<li> SetPhysicsObjectTypeBrick</li>
<li> SetVelocityBrick</li>
<li> RotationSpeedLeftBrick</li>
<li> RotationSpeedRightBrick</li>
<li> SetGravityBrick</li>
<li> SetMassBrick</li>
<li> SetBounceFactorBrick</li>
<li> SetFrictionBrick</li>
<li> WhenCollisionBrick</li>
</ul>
A basic implementation of the bricks is already available (setter, getter) but these values are currently not supported (ignored).
The physics engine will take care of these settings and render the physics states parallel to our current rendering engine supporting the same interfaces.
The engine should work on desktop and mobile browsers.
Some tasks you will have to accomplish:
<ul>
<li> Work on the specification together with your mentor </li>
<li> Calculate vertices from images </li>
<li> Replace the current look object with a physics object (physics sprite)</li>
<li> Calculate physics states of all physics objects per rendering frame</li>
<li> Rewrite existing code where conflicts occur between rendering engines (ifOnEdgeBounce, rotationType, whenCollision, ..)</li>
<li> Unit- & integration- testing (several devices, browsers, ..)</li>
<li> ... </li>
</ul>
</p>
<strong>Desired Outcome:</strong><i> HTML5 Player supporting all physics bricks</i><br/>
<strong>Mentor:</strong><i> Matthias</i>
<p />
<hr>
<a id="idea_2"><strong>Title:</strong> iOS: Implementation of missing Bricks and Sensors</a>
<br />
<strong>Brief explanation and expected results:</strong>
<p>
In order to be able to support Catrobat Language version 0.991 it is necessary to implement a set of missing Bricks and Sensors.<br/>
New Bricks:
<ul>
<li> CameraBrick</li>
<li> ChooseCameraBrick</li>
<li> IfThenLogicBeginBrick</li>
<li> RepeatUntilBrick</li>
<li> WhenTouchDownBrick</li>
</ul>
New Sensors:
<ul>
<li> screen_touch_x</li>
<li> screen_touch_y</li>
<li> screen_touch_x(1)</li>
<li> screen_touch_y(1)</li>
<li> screen_is_touched(1)</li>
<li> last_screen_touch_index</li>
<li> color</li>
</ul>
Tasks your have to accomplish:
<ul>
<li> Create data models for new Bricks</li>
<li> Implement serialization and deserialization</li>
<li> Implement Brick visualization and related UI actions</li>
<li> Implement new logic in Player Engine</li>
<li> Write unit & integration tests</li>
</ul>
</p>
<strong>Desired Outcome:</strong><i> Support of all Bricks and Sensors for Catrobat Language version 0.991 (except physics bricks)</i><br/>
<strong>Mentor:</strong><i> Michael</i>
<p />
<hr>
<a id="idea_3"><strong>Title:</strong>Catroid-Core: Refactoring Code</a>
<br />
<strong>Brief explanation and expected results:</strong>
<p>
Refactor code to improve:
<ul>
<li>readability</li>
<li>maintainability</li>
<li>testability</li>
<li>PMD, CPD, Findbugs and LINT checking</li>
</ul>
Architectural changes to
<ul>
<li>comply with Android guidelines</li>
<li>comply with software design patterns</li>
<li>enforce testability and introduce and enforce the use of MOCKing<br/>
<li>give architectural overview as documentation for future developments with tangible examples<br/>
</ul>
</p>
<strong>Desired Outcome:</strong><i> Slimmer, maintainable, clean code compliant, more stable, more robust, Pocket Code version using architectural Patterns rather than Antipatterns</i><br/>
<strong>Mentor:</strong><i> Christian</i>
<p />
<hr>
<a id="idea_4"><strong>Title:</strong> Catroid-Core: Refactoring Ui Tests</a>
<br />
<strong>Brief explanation and expected results:</strong>
<p>
<ul>
<li>Transition from Robotium to Espresso framework for the GUI-tests and therefor getting rid of unnecessary waits</li>
<li>Get rid of Polidea testrunner</li>
<li>Get rid of redundant, flaky and broken tests</li>
<li>Create meaningful tests compliant with clean code rules</li>
<li>Get rid of reflections</li>
<li>Get rid of reflections in tests to introduce and enforce the use of MOCKing</li>
<li>Setting up proper gradle tasks and jenkins integration</li>
<li>Create guidelines as documentation in confluence how to test in this project with tangible examples</li>
</ul>
</p>
<strong>Desired Outcome:</strong><i> Refactored, slimmer test harness using Espresso instead of Robotium and introduce and enforce the use of Mocking framework</i><br/>
<strong>Mentor:</strong><i> Thomas</i>
<p />
<hr>
<a id="idea_5"><strong>Title:</strong> Catroid-Core: Refactoring Unit Tests</a>
<br />
<strong>Brief explanation and expected results:</strong>
<p>
<ul>
<li>Review of existing JUnit tests and splitting them in two groups, actual Unit tests and Integration tests</li>
<li>Re-implement subset of UiTests that do not require a Ui as integration/unit tests</li>
<li>Get rid of Polidea testrunner</li>
<li>Get rid of redundant, flaky and broken tests</li>
<li>Create meaningful tests compliant with clean code rules</li>
<li>Get rid of reflections</li>
<li>Get rid of reflections in tests to introduce and enforce the use of MOCKing</li>
<li>Setting up proper gradle tasks and jenkins integration</li>
<li>Create guidelines as documentation in confluence how to test in this project with tangible examples</li>
</ul>
</p>
<strong>Desired Outcome:</strong><i> Refactored, slimmer and more robust JUnit tests, introduction of a new test group of integration tests (technically based on JUnit), and enforce the use of Mocking framework</i><br/>
<strong>Mentor:</strong><i> Wolfgang</i>
<p />
<hr>
<a id="idea_6"><strong>Title:</strong>Catroid-Core: Refactor/Introduce Flavoring (Flavoring NEW)</a>
<br />
<strong>Brief explanation and expected results:</strong>
<p>
<ul>
<li>Meaningful, stable, robust, way to activate additional unique features in Pocket Code which are not the core functionality like, e.g., education features needed for school courses (Dashboard, Analytics)</li>
<li>Feature de/activation must have an impact on the size of the APK - in terms of footprint of the resulting APK, the less flavor features are activated the smaller the footprint</li>
</ul>
</p>
<strong>Desired Outcome:</strong><i> Working flavoring as a base for integration of Pocket Paint and other functionality beside the core Pocket Code functionality</i><br/>
<strong>Mentor:</strong><i> Bernadette</i>
<p />
<hr>
<a id="idea_7"><strong>Title:</strong> Pocket Code - Pocket Paint: Integrate Pocket Paint AS a Flavor into Pocket Code</a>
<br />
<strong>Brief explanation and expected results:</strong>
<p>
<ul>
<li>Pocket Paint should be a flavor of Pocket Code. This makes sense to integrate Pocket Paint into Pocket Code (no need to install both anymore). But it also allows to publish Pocket Paint still as a standalone app in the Google Playstore, as until now.</li>
<li>Pocket Paint should be integrated into Pocket Code in a way that it can be set to be build as a standalone APK and also published as such in the Google Playstore.</li>
<li>The footprint must be according the used features - smaller than with activated Pocket Code.</li>
</ul>
</p>
<strong>Desired Outcome:</strong><i> Make Pocket Paint a flavor of Pocket Code</i><br/>
<strong>Mentor:</strong><i> Annemarie</i>
<p />
<hr>
<a id="idea_8"><strong>Title:</strong> UX Redesign of Pocket Code</a>
<br />
<strong>Brief explanation and expected results:</strong>
<p>
<ul>
<li>Redesign GUI for Pocket Code - look and feel as it was done in Pocket Paint the last year </li>
<li>Detailed Guideline for the Redesign, in respect of material design, will be provided</li>
</ul>
</p>
<strong>Desired Outcome:</strong><i> Redesign of all GUI Elements according the current Android and the worked out UX guidelines</i><br/>
<strong>Mentor:</strong><i> Sebastian</i>
<p />
<hr>
<a id="idea_9"><strong>Title:</strong> iOS: Create your own Bricks - User Bricks</a>
<br />
<strong>Brief explanation and expected results:</strong>
<p>
User Bricks provide the functionality to create custom scripts which allow one to reuse user-defined functionality across objects without duplicating Bricks. This is the Catrobat-equivalent to "Custom Blocks" in Scratch.<br/>
Tasks you have to accomplish:
<ul>
<li> Create data model
<li> Implement serialization and deserialization
<li> Provide a user interface to create and edit User Bricks
<ul>
<li> Each User Bricks consists of a header and a number of normal Bricks</li>
<li> The header of a User Brick can contain text and variables which can be used within the User Brick</li>
</ul></li>
<li> Integrate in Player Engine</li>
<li> Write unit & integration tests</li>
</ul>
</p>
<strong>Desired Outcome:</strong><i> User should have the possibility to create custom scripts which can be reused without duplicating Bricks</i><br/>
<strong>Mentor:</strong><i> TBA</i>
<p />
<hr>
<a id="idea_10"><strong>Title:</strong> HTML5: UserBricks (Scripts + CallUserScript)</a>
<br />
<strong>Brief explanation and expected results:</strong>
<p>Parser: Parsing the user scripts (early version) is already available in our backend (PHP). There may be the need of customization the parser and adding unit tests for the backend.
Client:
<ul>
<li>load the userScripts into our gameEngine</li>
<li>brick logic for calling the scripts</li>
<li>adjusting parser/formula objects to execute code in a new scope (e.g., using script parameters instead of local/global variables)</li>
<li>extend the sprite cloning brick to clone the user scripts as well if necessary</li>
<li>make sure the stopScriptBrick is handled correctly when placed inside a userScript</li>
<li>unit + integration testing (several platforms, browsers, ..)</li>
</ul>
</p>
<strong>Desired Outcome:</strong><i> HTML5 Player supporting user defined scripts and the brick calling theses scripts</i><br/>
<strong>Mentor:</strong><i> TBA</i>
<p />
<p />
<hr>
<a id="idea_11"><strong>Title:</strong> Pocket Code: Inclusion of Firebase</a>
<br />
<strong>Brief explanation and expected results:</strong>
<p>
<ul>
<li>Integrate Firebase Funnels feature to track success rate of login, etc.</li>
<li>Integrate Firebase FCM (Firebase Cloud Messaging) feature so we can</li>
notify our user of cool coding events.
<li>Improve manual bug reporting to also report defects which doesn't
cause the app to crash.</li>
<li>Fix Firebase crash reports.</li>
</ul></p>
<strong>Desired Outcome:</strong><i> Firebase implemented in Catroid and producing useful output</i><br/>
<strong>Mentor:</strong><i> Robert</i>
<p />
<p />
<hr>
<p>
<a id="youridea"><strong>Your own project ideas ... </strong></a>
<br />
<p>
Please do not hesitate to bring forward your own ideas and discuss them with the Catrobat team members at #catrobat on Freenode or by contacting us via <a href="http://catrob.at/mailinglist"><img src="google-group.png" height="20px"/> [email protected]</a>!
</p>
</p>
</section>
</div>
<script src="javascripts/scale.fix.js"></script>
<script>
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] ||
function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o), m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-42270417-2', 'catrobat.org');
ga('send', 'pageview');
</script>
</body>
</html>