Skip to content

Commit 2bace78

Browse files
author
AlvarBer
committed
More fixes on docs
1 parent 70ba132 commit 2bace78

File tree

10 files changed

+131
-110
lines changed

10 files changed

+131
-110
lines changed

docs/persimmon.bib

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,14 @@ @article{zmud1980management
331331
publisher={JSTOR}
332332
}
333333

334+
@book{schwaber2002agile,
335+
title={Agile software development with Scrum},
336+
author={Schwaber, Ken and Beedle, Mike},
337+
volume={1},
338+
year={2002},
339+
publisher={Prentice Hall Upper Saddle River}
340+
}
341+
334342
% Risk Analysis
335343
@article{boehm1991software,
336344
title={Software risk management: principles and practices},

docs/src/evaluation.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ Mining and Machine Learning is saved, as well as any additional feedback about
1919
the system.
2020

2121

22-
Proposed tasks
22+
Proposed Tasks
2323
--------------
24-
The evaluation is composed by three different closed tasks.
24+
The evaluation consists of by three different closed tasks.
2525
The task are defined as to gradually introduce more complex concepts, following
2626
the seen workflows on the workflow chapter and also being introduced to the
2727
concepts of reconnecting and complex block that require more actions than just
@@ -32,7 +32,7 @@ connecting.
3232
terms. Using the iris dataset they perform a cross validation evaluation
3333
of their chosen classificator.
3434
* Second task is modifying the previous workflow to create a more complex
35-
worflow thatfits and predicts using an estimators and two sources of files.
35+
worflow thati fits and predicts using an estimator and two sources of files.
3636
It is only slightly more complex than the previous one, but it introduces
3737
the concept of re-cabling to the participants.
3838
* Third task and final task. This one involves adding hyper-parameter tunning,

docs/src/implementation.md

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ Implementation
44
On this chapter the implementation of the system is detailed, explained what
55
was done in each iteration.
66
After the iterations Persimmon intermediate representation is explained.
7-
Finally some of the most complex technical problems along their respective
7+
Finally, some of the most complex technical problems along their respective
88
solutions are detailed.
99

1010

1111
First Iteration
1212
---------------
1313
![Implementation of the first interface](images/interface.png)
1414

15-
For the first iteration the priority was to get a proof of concept in order to
15+
For the first iteration, the priority was to get a proof of concept in order to
1616
see where the difficulties can appear, with a few simple classifiers and
1717
cross-validation techniques. As such a button-based interface with very limited
1818
workflow creation was chosen.
@@ -25,8 +25,8 @@ Trees, but gives good results in wide variety of problems.
2525
All these classifiers have few parameters on their respective sklearn
2626
implementations, and for this prototype the interface did not allow modifying
2727
any of them, as the it would have cluttered and it was not a necessary feature.
28-
Also all of them are classifiers, as it simplifies the interface, since
29-
regressors and clustering have some incompatibilities.
28+
Also, all of them are classifiers, as it simplifies the interface, since
29+
regression and clustering have some incompatibilities.
3030

3131
Apart from the temporary interface the backend had to be built. Since the
3232
workflow was fixed the backend simply received the node as arguments and
@@ -36,7 +36,7 @@ needed for this iteration.
3636

3737
Second Iteration
3838
----------------
39-
For the second interface the drag and drop feel was the main priority.
39+
For the second iteration the drag and drop feel was the main priority.
4040
As such after developing the tab panel draggable boxes were developed, these
4141
boxes needed to be connected through pins.
4242
The logic behind the pins and the blocks is quite heavy, as there is a tight
@@ -54,7 +54,7 @@ particular function tools such as `Numba`[^Numba] or `Cython` could be used.
5454

5555
Third Iteration
5656
---------------
57-
For the third and final iteration the focus was on improving the visual aspect,
57+
For the third and final iteration, the focus was on improving the visual aspect,
5858
adding helpful aids to the user experience.
5959
The main addition being adding a notification systems that gives feedback to
6060
the user about the outcome of their actions and the type systems that prevents
@@ -69,7 +69,7 @@ a warning showing up when a block has only some of their inputs connected.
6969
Model View Controller
7070
---------------------
7171
Since the beginning of development separation of logic and presentation has
72-
been a priority. For this matter the Model View Controller[^MVC] pattern has
72+
been a priority. For this reason, the Model View Controller[^MVC] pattern has
7373
been applied, separating Model (represented by the subpackage backend), View
7474
(represented by the `.py` files on view subpackage) and Controller
7575
(corresponding to the `.kv` files on view subpackage).
@@ -79,7 +79,7 @@ the current kivy framework for another one by just changed the view, no
7979
modifications to the backend needed.
8080

8181
In order to avoid repetition extensive use of classes coupled with reusable
82-
custom kivy Widgets was used. This for example meant that each individual pin
82+
custom kivy Widgets were used. This for example meant that each individual pin
8383
on each block is a class, this proved useful for defining matching pins in
8484
different blocks (like when connection a pin that sends data to a pin that
8585
receives it).
@@ -89,7 +89,7 @@ For more information about internal package distribution check appendix A.
8989

9090
Making a Connection
9191
-------------------
92-
One of the most complex part of the system is starting, reconnecting and
92+
One of the most complex parts of the system is starting, reconnecting and
9393
deleting a connection between blocks, it involves several actors, asynchronous
9494
callbacks and a very strong coupling between all elements.
9595

@@ -99,7 +99,7 @@ In order to understand how connections are made it is necessary to understand
9999
how `Kivy` handles input.
100100
At surface level `Kivy` follows the traditional event-based input management,
101101
with the event propagating downwards from the root.
102-
However while traditionally inputs events are only passed down to components
102+
However, while traditionally inputs events are only passed down to components
103103
that are on the event position `Kivy` passes the events to almost all children
104104
by default, this is done because in phones (one of `Kivy` targets is Android)
105105
gestures tend to start outside the actual widget they intend to affect.
@@ -109,7 +109,7 @@ when a key is is pressed, `on_touch_move` that is notified when the touch is
109109
moved, i.e. a finger moves across the screen, or on this cases when the mouse
110110
moves, and `on_touch_up` that is fired when the touch is released.
111111

112-
Lets represent the possible actions as use cases, the outer \* represents
112+
Let's represent the possible actions as use cases, the outer \* represents
113113
`on_touch_down`, - represents `on_touch_move`, and the inner \* `on_touch_up`:
114114

115115
* (On pin) Start a connection.
@@ -123,9 +123,9 @@ Logic is split in two big cases, creating a connection and modifying an
123123
existing one.
124124
Creating a connection involves creating one end of the connection, both
125125
visually and logically and preparing the line that will follow the cursor.
126-
On the other hand modifying a connection means removing the end that is being
126+
On the other hand, modifying a connection means removing the end that is being
127127
touched.
128-
This two cases can be handled by different classes, pin on the first case and
128+
These two cases can be handled by different classes, pin on the first case and
129129
connection for the last.
130130
Moving and finishing the connection use the same code for both.
131131

@@ -138,14 +138,15 @@ canvas, and when a connection is destroyed (this only happens inside
138138
depending if the connection is destroyed because the pin violates type safety
139139
or there is no pin under the cursor respectively) it has to unbind the logical
140140
connections of the pins themselves.
141-
For this reason connection has high-level functions that do the unbind, rebind
141+
For this reason, connection has high-level functions that do the unbind, rebind
142142
and deletion of ends, as long as the necessary elements are passed (dependency
143143
injection pattern).
144144

145145
This is the reconnecting logic, notice how the reconnecting is *forward* or
146146
*backwards* depending on which edge the touch has happened, of course if neither
147147
has been touched the touch event is not handled.
148148

149+
149150
~~~python
150151
def on_touch_down(self, touch):
151152
""" On touch down on connection means we are modifying an already
@@ -169,6 +170,9 @@ def on_touch_down(self, touch):
169170
else:
170171
return False
171172
~~~
173+
\begin{figure}
174+
\caption{Connection modification handling}
175+
\end{figure}
172176

173177
Visualizing the Data Flow
174178
-------------------------
@@ -186,7 +190,7 @@ But the frontend does not receive the block, only the hash, since that is all
186190
the backend has, and it has to compare with all block hashes to find the actual
187191
block.
188192

189-
After this the backend has to make the outgoing connections of that block
193+
After this, the backend has to make the outgoing connections of that block
190194
pulse, meaning for example changing the value of the width of the line between
191195
certain values, a function that works well for this is the sin function.
192196
The tricky part is that each time the function is called it has to remember the
@@ -198,7 +202,7 @@ generator (also known as semi-coroutines).
198202
But what happens when coroutine needs to be stopped from being called? Kivy
199203
has a mechanism where if the scheduled function returns `False` it will stop
200204
calling, by default our coroutine does not return any meaningful value, but
201-
we can put a final `yield False` that will stop the calls.
205+
it is possible to yield a final `False` that will stop the calls.
202206
But how is that yield triggered? The proper solution solution is using
203207
a full coroutine (either a generator-based one of the newer asyncio ones), but
204208
then concurrency issues appears, such that since the coroutine is being called
@@ -256,9 +260,9 @@ importing, it also breaks resource loading at execution time (since it has to
256260
create a temporary folder). This results in manually specifying hidden
257261
dependencies and non python files (on this case mostly `kv` files).
258262

259-
Unfortunately this process has to be done on a windows system, and as such
263+
Unfortunately, this process has to be done on a windows system, and as such
260264
cannot be done on the CI[^CI] server, to see how Persimmon utilizes CI check
261-
the appendix on how this document was made.
265+
the appendix B.
262266

263267

264268
[^blackboard]: Blackboard is where the blocks and connections reside.

docs/src/interface.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Interface Design
22
================
33

4-
The main way users interact with the system is trough the visual interface, and
4+
The main way users interact with the system is through the visual interface, and
55
as such is very important that all the information and operations available are
66
easily accessible on an intuitive manner, removing the need for extensive
77
training with the software.
@@ -10,9 +10,9 @@ Sketches
1010
--------
1111
![Sketch of the first interface](images/sketch_1.png)
1212

13-
On the first interface there was a focus on getting a prototype done as soon as
14-
possible.
15-
For this reason the interface had to be easy to implement and easy to use, with
13+
On the first interface, there was a focus on getting a prototype done as soon
14+
as possible.
15+
For this reason, the interface had to be easy to implement and easy to use, with
1616
the few navigations steps required to perform all possible actions as to allow
1717
for quick debugging.
1818
This meant sacrificing flexibility in favour of usability, because the
@@ -23,20 +23,20 @@ shapes or any other kind of visual aid.
2323

2424
![Sketch of the second interface](images/sketch_2.png)
2525

26-
For the second iteration however the extensibility had to be present, meaning
26+
For the second iteration, however, the extensibility had to be present, meaning
2727
the old interface was not reusable for the new functionality.
2828
The block based interface gives a lot more of control to the final user, still
2929
some underlying mechanisms such as optional parameters or saving into file were
3030
not present.
3131

32-
Finally on the third iteration the proposed improvements to the interface were:
32+
Finally, on the third iteration the proposed improvements to the interface were:
3333

3434
* Adding a smart bubble[^bubble] that shows the blocks that make sense to spawn
3535
according to the connection.
3636
* Optional parameters.
3737
* Hide/Toggle parameters.
3838
* Data transfer visualization, meaning that the connection between two blocks
39-
starts signaling when data from one is moved onto the other.
39+
starts signalling when data from one is moved onto the other.
4040
* Type safety indicator while dragging a connection, such as turning the
4141
connection cable to a bright red to signal that if the cursor is unpressed
4242
at that location a connection will not form.
@@ -49,7 +49,7 @@ Colour Palette
4949
--------------
5050
One of the most important parts of the system where colour played a vital role
5151
was connections, symbolizing types with colours.
52-
The relations goes as far as each types has a colour associated with it on
52+
The relations go as far as each types has a colour associated with it on
5353
code, meaning that pins are not coloured, their type is specified and their
5454
colour is derived from the type.
5555

docs/src/introduction.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ Description
1212
Data Science has seen exponential growth in the market on recent years, with
1313
some predictions stating that one million data scientists will be needed by
1414
2018 [@onemillion].
15-
Bubble or not data scientists find themselves on a golden age, for the Harvard
16-
Business Review it is the sexiest job of the 21st century [@sexy].
15+
Data scientists find themselves on a golden age, for the Harvard Business
16+
Review it is the sexiest job of the 21st century [@sexy].
1717
Despite all the hype, there is a shortage of skilled data scientists, the field
1818
is inherently multidisciplinary, as coding, statistics and domain knowledge are
1919
required, making the path to mastery long and complex, leading to the so
20-
called Unicorn hunts [@unicorn, @hunt].
20+
called Unicorn hunts [@unicorn] and [@hunt].
2121

2222
Tools such as scikit-learn[^skl], Weka or Tableau provide a very high
2323
level access to some of the required tools data scientists require, easing the

0 commit comments

Comments
 (0)