Activities/Turtle Art/Patching

Background

 

The steps

  • I looked at the Turtle Art program installed in Activity/TurtleArt.activity and determined where I needed to make changes. I had to add a new primitive for square root to the talogo.py file (and also include the sqrt function from the Python math module. And I had to define a new brick for square root in tasetup.py and describe the bricks attributes: its size; how it connects to other bricks; and default values. Finally, I had to create a graphic for the brick (images/en/numbers/sqrt.gif) and modify the panel for numbers (images/en/numbers/numbersgroup,gif and numbersmask.gif). I made similar changes to the Spanish version (images/es).
  • I ran the modified Turtle Art program and made changes until I managed to get it working properly--i.e., I debugged my code. At one point, I sent email to the maintainer with a question, which he promptly answered.
  • In order to push my changes upstream so that others can use them, first I needed to get a local copy of the source code
git-clone git://dev.laptop.org/projects/turtleart-activity
Initialized empty Git repository in /home/walter/Desktop/turtleart-activity/.git/
remote: Generating pack...
re mote: Done counting 587 objects.
remote: Deltifying 587 objects...
remote:  100% (587/587) done
remote: Total 587 (delta 129), reused 0 (delta 0)
Receiving objects: 100% (587/587), 5.69 MiB | 882 KiB/s, done.
Resolving deltas: 100% (129/129), done.
  • and make the appropriate changes
I edited talogo.py and tasetup.py
I also created images/en/numbers/sqrt.gif
and modified images/en/numbers/numbersgroup.gif and numbersmask.gif
(I also made corresponding changes in the images/es tree)
  • and generate a patch
git diff -U > patch
  • and send the patch to the maintainer for review
 mailto:bss...

The patch

diff --git a/images/en/numbers/numbersgroup.gif b/images/en/numbers/numbersgroup
.gif
index 3108073..7fe9848 100755
Binary files a/images/en/numbers/numbersgroup.gif and b/images/en/numbers/number
sgroup.gif differ
diff --git a/images/en/numbers/numbersmask.gif b/images/en/numbers/numbersmask.g
if
index 9509618..ab61c28 100755
Binary files a/images/en/numbers/numbersmask.gif and b/images/en/numbers/numbers
mask.gif differ
diff --git a/images/es/numbers/numbersgroup.gif b/images/es/numbers/numbersgroup
.gif
index 2cc5f42..f67fc50 100755
Binary files a/images/es/numbers/numbersgroup.gif and b/images/es/numbers/number
sgroup.gif differ
diff --git a/images/es/numbers/numbersmask.gif b/images/es/numbers/numbersmask.g
if
index 9509618..ab61c28 100755
Binary files a/images/es/numbers/numbersmask.gif and b/images/es/numbers/numbers
mask.gif differ
diff --git a/talogo.py b/talogo.py
index 0e441bd..bb5850b 100755
--- a/talogo.py
+++ b/talogo.py
@@ -22,6 +22,7 @@ import re
 from time import clock
 from operator import isNumberType
 import random
+from math import sqrt
 class taLogo: pass
 
 from taturtle import *
@@ -269,6 +270,7 @@ def lcNew(tw):
     defprim(lc,'or', None, lambda lc,x,y:x|y)
     defprim(lc,'not', 1, lambda lc,x:not x)
     defprim(lc,'%', None, lambda lc,x,y:x%y)
+    defprim(lc,'sqrt', 1, lambda lc,x: int(sqrt(x)))
 
     defprim(lc,'clean', 0, lambda lc: clearscreen(lc.tw.turtle))
     defprim(lc,'forward', 1, lambda lc, x: forward(lc.tw.turtle, x))
diff --git a/tasetup.py b/tasetup.py
index 73aa451..19c3c3e 100755
--- a/tasetup.py
+++ b/tasetup.py
@@ -57,13 +57,15 @@ selectors = (
      ('product','*','ari'),
      ('division','/','ari'),
      ('remainder','%','ari2'),
+     ('sqrt','sqrt','sqrt',100),
      ('random','random','random',0,100),
      ('greater','greater?','comp'),
      ('less','less?','comp'),
      ('equal','equal?','comp'),
      ('and','and','and'),
      ('or','or','and'),
-     ('not','not','not'),     ('print','print','onearg'))),
+     ('not','not','not'),
+     ('print','print','onearg'))),
   ('flow', 55,
     (('wait','wait','onearg',10),
      ('forever','forever','forever'),
@@ -98,6 +100,7 @@ dockdetails = {
   'ifelse':  (('flow',True,37,5),('logi+',False,80,31),('flow',False,132,79,'['
),('flow',False,217,79,']['),('flow',False,37,120,']')),
   'ari':     (('numend',True,12,20),('num',False,39,20)),
   'ari2':    (('numend',True,12,20),('num',False,51,20)),
+  'sqrt':    (('num',True,0,20),('num',False,42,20)),
   'stop':    (('flow',True,37,5),('unavailable',False,0,0)),
   'comp':    (('logi+',True,0,21,'('),('num',False,32,21),('num',False,181,21),
('logi-',False,320,21,')')),
   'random':  (('num',True,0,31,'('),('num',False,28,31),('num',False,150,31),('
numend',False,279,31,')')),