Activities/Turtle Art/Patching
< Activities | Turtle Art
Jump to navigation
Jump to search
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,')')),