You can subscribe to this list here.
2005 
_{Jan}

_{Feb}

_{Mar}

_{Apr}

_{May}

_{Jun}
(486) 
_{Jul}
(201) 
_{Aug}
(194) 
_{Sep}
(87) 
_{Oct}
(72) 
_{Nov}
(72) 
_{Dec}
(4) 

2006 
_{Jan}
(6) 
_{Feb}
(41) 
_{Mar}
(22) 
_{Apr}
(4) 
_{May}
(12) 
_{Jun}

_{Jul}

_{Aug}
(42) 
_{Sep}
(21) 
_{Oct}
(14) 
_{Nov}
(10) 
_{Dec}

2007 
_{Jan}
(14) 
_{Feb}
(34) 
_{Mar}
(61) 
_{Apr}
(54) 
_{May}
(140) 
_{Jun}
(184) 
_{Jul}
(164) 
_{Aug}
(130) 
_{Sep}
(241) 
_{Oct}
(175) 
_{Nov}
(148) 
_{Dec}
(96) 
2008 
_{Jan}
(5) 
_{Feb}
(38) 
_{Mar}
(30) 
_{Apr}
(46) 
_{May}
(25) 
_{Jun}
(22) 
_{Jul}
(5) 
_{Aug}
(17) 
_{Sep}
(2) 
_{Oct}
(100) 
_{Nov}
(83) 
_{Dec}
(33) 
2009 
_{Jan}
(127) 
_{Feb}
(43) 
_{Mar}
(86) 
_{Apr}
(34) 
_{May}
(50) 
_{Jun}
(168) 
_{Jul}
(48) 
_{Aug}
(66) 
_{Sep}
(38) 
_{Oct}
(75) 
_{Nov}
(113) 
_{Dec}
(72) 
2010 
_{Jan}
(123) 
_{Feb}
(68) 
_{Mar}
(26) 
_{Apr}
(11) 
_{May}
(39) 
_{Jun}
(131) 
_{Jul}
(56) 
_{Aug}
(79) 
_{Sep}
(69) 
_{Oct}
(17) 
_{Nov}
(166) 
_{Dec}
(32) 
2011 
_{Jan}
(21) 
_{Feb}

_{Mar}

_{Apr}

_{May}
(1) 
_{Jun}

_{Jul}

_{Aug}
(2) 
_{Sep}

_{Oct}
(1) 
_{Nov}
(8) 
_{Dec}

2012 
_{Jan}
(2) 
_{Feb}

_{Mar}

_{Apr}
(1) 
_{May}

_{Jun}

_{Jul}

_{Aug}

_{Sep}

_{Oct}

_{Nov}

_{Dec}

S  M  T  W  T  F  S 



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22
(5) 
23

24

25

26

27

28

29

30

31



From: Chris Sangwin <sangwinc@us...>  20080722 10:59:47

Update of /cvsroot/stack/stackdev/install In directory sc8prcvs8.sourceforge.net:/tmp/cvsserv25905/install Modified Files: answer_test_testsuite.php Log Message: Index: answer_test_testsuite.php =================================================================== RCS file: /cvsroot/stack/stackdev/install/answer_test_testsuite.php,v retrieving revision 1.27 retrieving revision 1.28 diff C2 d r1.27 r1.28 *** answer_test_testsuite.php 24 Jun 2008 11:14:51 0000 1.27  answer_test_testsuite.php 22 Jul 2008 10:59:39 0000 1.28 *************** *** 57,60 ****  57,62  $testsuite[] = stack_testsuite_construct('AlgEquiv','integerp(3.1)','true',0,'',''); $testsuite[] = stack_testsuite_construct('AlgEquiv','X','x',0,'','Case sensitivity'); + $testsuite[] = stack_testsuite_construct('AlgEquiv','Y=1+X','y=1+x',0,'','Permutations of variables (To do: a dedicated answer test with feedback)'); + $testsuite[] = stack_testsuite_construct('AlgEquiv','v+w+x+y+z','a+b+c+A+B',0,'',''); $testsuite[] = stack_testsuite_construct('AlgEquiv','4^(1/2)','1/2',1,'','Numbers'); $testsuite[] = stack_testsuite_construct('AlgEquiv','4^(1/2)','sqrt(4)',1,'',''); *************** *** 67,73 **** $testsuite[] = stack_testsuite_construct('AlgEquiv','x1','(x^21)/(x+1)',1,'',''); $testsuite[] = stack_testsuite_construct('AlgEquiv','(x1)^2','x^22*x+1',1,'','Polynomials and rational function'); ! $testsuite[] = stack_testsuite_construct('AlgEquiv','(x1)*(x^2+x+1)','x^31',1,'x',''); $testsuite[] = stack_testsuite_construct('AlgEquiv','(x1)^(2)','1/(x^22*x+1)',1,'',''); ! $testsuite[] = stack_testsuite_construct('AlgEquiv','1/n1/(n+1)','1/(n*(n+1))',1,'x',''); $testsuite[] = stack_testsuite_construct('AlgEquiv','cos(x)','cos(x)',1,'','Trig functions'); $testsuite[] = stack_testsuite_construct('AlgEquiv','cos(x)^2+sin(x)^2','1',1,'','');  69,75  $testsuite[] = stack_testsuite_construct('AlgEquiv','x1','(x^21)/(x+1)',1,'',''); $testsuite[] = stack_testsuite_construct('AlgEquiv','(x1)^2','x^22*x+1',1,'','Polynomials and rational function'); ! $testsuite[] = stack_testsuite_construct('AlgEquiv','(x1)*(x^2+x+1)','x^31',1,'',''); $testsuite[] = stack_testsuite_construct('AlgEquiv','(x1)^(2)','1/(x^22*x+1)',1,'',''); ! $testsuite[] = stack_testsuite_construct('AlgEquiv','1/n1/(n+1)','1/(n*(n+1))',1,'',''); $testsuite[] = stack_testsuite_construct('AlgEquiv','cos(x)','cos(x)',1,'','Trig functions'); $testsuite[] = stack_testsuite_construct('AlgEquiv','cos(x)^2+sin(x)^2','1',1,'',''); 
From: Chris Sangwin <sangwinc@us...>  20080722 10:59:47

Update of /cvsroot/stack/stackdev In directory sc8prcvs8.sourceforge.net:/tmp/cvsserv25905 Modified Files: cron.php Log Message: Index: cron.php =================================================================== RCS file: /cvsroot/stack/stackdev/cron.php,v retrieving revision 1.3 retrieving revision 1.4 diff C2 d r1.3 r1.4 *** cron.php 8 Jun 2008 20:52:57 0000 1.3  cron.php 22 Jul 2008 10:59:39 0000 1.4 *************** *** 4,10 **** * Welcome to STACK. A system for teaching and assessment using a * computer algebra kernel. ! * * This file is licensed under the GPL License. ! * * A copy of the license is in your STACK distribution called * license.txt. If you are missing this file you can obtain  4,10  * Welcome to STACK. A system for teaching and assessment using a * computer algebra kernel. ! * * This file is licensed under the GPL License. ! * * A copy of the license is in your STACK distribution called * license.txt. If you are missing this file you can obtain *************** *** 13,17 **** * * @author Jonathan Hart (j.p.hart@...) ! * * @package stackUtil *  13,17  * * @author Jonathan Hart (j.p.hart@...) ! * * @package stackUtil * *************** *** 23,27 **** global $config; $root = $config>get('docroot'); ! require_once $root.'/lib/logger.php'; $logger = new Logger('Cron.php'); $logger>info('Cron running.');  23,27  global $config; $root = $config>get('docroot'); ! require_once $root.'/lib/Logger.php'; $logger = new Logger('Cron.php'); $logger>info('Cron running.'); 
From: Chris Sangwin <sangwinc@us...>  20080722 10:59:47

Update of /cvsroot/stack/stackdev/maxima In directory sc8prcvs8.sourceforge.net:/tmp/cvsserv25905/maxima Modified Files: stackmaxima.mac unittests.mac Log Message: Index: stackmaxima.mac =================================================================== RCS file: /cvsroot/stack/stackdev/maxima/stackmaxima.mac,v retrieving revision 1.46 retrieving revision 1.47 diff C2 d r1.46 r1.47 *** stackmaxima.mac 24 Jun 2008 13:12:55 0000 1.46  stackmaxima.mac 22 Jul 2008 10:59:40 0000 1.47 *************** *** 545,549 **** This function is a wraper for AtAlgEquivfun(SA,SB) */ ! ATAlgEquiv(SA,SB) :=block([simp:true,ret], /* Turn on simplification and error catch */ SA:errcatch(ev(SA,simp,fullratsimp,nouns)),  545,549  This function is a wraper for AtAlgEquivfun(SA,SB) */ ! ATAlgEquiv(SA,SB) :=block([simp:true,ret,newret], /* Turn on simplification and error catch */ SA:errcatch(ev(SA,simp,fullratsimp,nouns)), *************** *** 555,558 ****  555,565  /* Start recursive process */ ret:ATAlgEquivfun(SA,SB), + /* Can we find a permutation of the variables? */ + if ret[2]=0 then block([p1], + p1:subst_equiv(SA,SB), + /* Actually, at this point 2008/7/7, we don't want to give this feedback. Just leave an answer note. */ + /* if p1#[] and p1#false then ret:[ret[1],ret[2],concat(ret[3]," Subst ",string(p1)),StackAddFeedback(ret[4],"Subst",StackDISP(p1,"$$"))] */ + if p1#[] and p1#false then ret:[ret[1],ret[2],concat(ret[3]," Subst ",string(p1)),ret[4]] + ), /* Send back result */ return(StackReturnOb(string(ret[1]),string(ret[2]),ret[3],ret[4])) *************** *** 794,797 ****  801,845  + /* This function takes two expressions. + It establishes if there exists a substitution of the variables of ex2 into ex1 which renders + ex1 algebraically equivalent to ex2. + If such a substitution exists the function returns it in a form so that + + ex2 = ev(ex1, subst_equiv(ex1,ex2)) + + If no such permutation exists it returns the empty list []. + If it could not establish this, because there are too many combinations to reasonably consider, + then the function returns false. + */ + subst_equiv(ex1,ex2):=block([lv1,lv2,lvi,lvp,lvs,lve,il,perm_size,simp], + simp:true, + perm_size:4, /* This algorithm is order factorial(perm_size) and so this needs to be small. */ + lv1:listofvars(ex1), + lv2:listofvars(ex2), + if length(lv1)#length(lv2) then return([]), + /* If the lists are too long, try a weaker condition */ + /* We assume the variables which occur in both are correctly assigned. */ + /* Can we find a permutation of those left in each? */ + if length(lv1)>perm_size then ( + lv1:setify(lv1), + lv2:setify(lv2), + lvi:intersection(lv1,lv2), + lv1:listify(setdifference(lv1,lvi)), + lv2:listify(setdifference(lv2,lvi)) + ), + if length(lv1)>perm_size then return(false), + /* */ + lvp:listify(permutations(lv2)), + /* Create a list of subsitutions */ + lvs:map(lambda([ex],zip_with("=",lv1,ex)),lvp), + /* Create list of expressions with which to compare ex1 */ + lve:map(lambda([ex],ev(ex1,ex)),lvs), + lve:map(lambda([ex],ATAlgEquivfun(ex,ex2)),lve), + lve:map(second,lve), + lve:map(lambda([ex],equal(ex,1)),lve), + if apply("or",lve) then (il:sublist_indices(lve,identity),lvs[il[1]]) else [] + )$ + + /******************************************************************/ Index: unittests.mac =================================================================== RCS file: /cvsroot/stack/stackdev/maxima/unittests.mac,v retrieving revision 1.7 retrieving revision 1.8 diff C2 d r1.7 r1.8 *** unittests.mac 4 Apr 2008 12:52:18 0000 1.7  unittests.mac 22 Jul 2008 10:59:40 0000 1.8 *************** *** 1,8 **** /* Unit tests for STACK Maxima */ kill(all); ! load("C:/xampp/htdocs/stackdev/logfiles/maximalocal.mac")$ ! /*load("C:/xampp/htdocs/stackdev/stacklocal/maximalocal.mac")$*/ /* NOTE: we need to run tests with simp:false and simp:true */ simp:false$ no_fails:0$  1,9  /* Unit tests for STACK Maxima */ kill(all); ! /*load("C:/xampp/htdocs/stackdev/logfiles/maximalocal.mac")$*/ ! load("C:/xampp/htdocs/stackdev/stacklocal/maximalocal.mac")$ /* NOTE: we need to run tests with simp:false and simp:true */ simp:false$ + print("simp is ",simp); no_fails:0$ *************** *** 156,159 ****  157,170  UT('subst_int_const(ex2,[k1,k2,k3]),ev(c*x^4/4+c^2*x/2+c*x = k2+c*k1,simp)); + UT('subst_equiv(x^2+y,a^2+1),[]); + UT('subst_equiv(x^22*x+1,(X1)^2),[x=X]); + UT('subst_equiv(x^2+y,a^2+b),[x=a,y=b]); + UT('subst_equiv(x^2+y,a^2+b),[x=a,y=b]); + UT('subst_equiv(x^2+y/z,a^2+c/b),[x=a,y=c,z=b]); + UT('subst_equiv(x^2+y/z,y^2+z/x),[x=y,y=z,z=x]); + UT('subst_equiv(x^2+y,y^2+x^2),[]); + UT('subst_equiv(x+y^2+z^3+v^4+w^5+u^6,a^6+b^5+c^4+d^3+g^2+f),false); + UT('subst_equiv(x^2+y+v+u+w,a^2+b+y+v+w),[u=b,x=a]); + if all_pass then 
From: Chris Sangwin <sangwinc@us...>  20080722 10:59:47

Update of /cvsroot/stack/stackdev/lang/en In directory sc8prcvs8.sourceforge.net:/tmp/cvsserv25905/lang/en Modified Files: stack.php Log Message: Index: stack.php =================================================================== RCS file: /cvsroot/stack/stackdev/lang/en/stack.php,v retrieving revision 1.99 retrieving revision 1.100 diff C2 d r1.99 r1.100 *** stack.php 24 Jun 2008 11:14:52 0000 1.99  stack.php 22 Jul 2008 10:59:39 0000 1.100 *************** *** 262,278 **** $string['AT_NOTIMPLEMENTED'] = 'This answer test has not been implemented.'; ! $string['ATAlgEquiv_SA_not_expression'] = 'Your answer should be an expression, not an equation, inequality, list, set or matrix.'; ! $string['ATAlgEquiv_SA_not_matrix'] = 'Your answer should be a matrix, but is not.'; ! $string['ATAlgEquiv_SA_not_list'] = 'Your answer should be a list, but is not. Note that the syntax to enter a list is to enclose the comma separated values with square brackets.'; ! $string['ATAlgEquiv_SA_not_set'] = 'Your answer should be a set, but is not. Note that the syntax to enter a set is to enclose the comma separated values with curly brackets.'; ! $string['ATAlgEquiv_SA_not_equation'] = 'Your answer should be an equation, but is not.'; ! $string['ATAlgEquiv_TA_not_equation'] = 'Your answer is an equation, but the expression to which it is being compared is not. You may have typed something like y=2 when you only needed to type 2.'; ! $string['ATAlgEquiv_SA_not_inequality'] = 'Your answer should be an inequality, but is not.';  $string['ATInequality_nonstrict'] = 'Your inequality should be strict, but is not!';  $string['ATInequality_strict'] = 'Your inequality should not be strict!';  $string['ATInequality_backwards'] = 'Your inequality appears to be backwards'; ! $string['ATLowestTerms_wrong'] = 'You need to cancel fractions within your answer.'; $string['ATLowestTerms_entries'] = 'The following terms in your answer are not in lowest terms. {$a[0]} Please try again. ';  262,280  $string['AT_NOTIMPLEMENTED'] = 'This answer test has not been implemented.'; ! $string['ATAlgEquiv_SA_not_expression'] = 'Your answer should be an expression, not an equation, inequality, list, set or matrix. '; ! $string['ATAlgEquiv_SA_not_matrix'] = 'Your answer should be a matrix, but is not. '; ! $string['ATAlgEquiv_SA_not_list'] = 'Your answer should be a list, but is not. Note that the syntax to enter a list is to enclose the comma separated values with square brackets. '; ! $string['ATAlgEquiv_SA_not_set'] = 'Your answer should be a set, but is not. Note that the syntax to enter a set is to enclose the comma separated values with curly brackets. '; ! $string['ATAlgEquiv_SA_not_equation'] = 'Your answer should be an equation, but is not. '; ! $string['ATAlgEquiv_TA_not_equation'] = 'Your answer is an equation, but the expression to which it is being compared is not. You may have typed something like y=2 when you only needed to type 2. '; ! $string['ATAlgEquiv_SA_not_inequality'] = 'Your answer should be an inequality, but is not. '; ! $string['Subst'] = 'Your answer would be correct if you used the following substitution of variables. {$a[0]} '; ! $string['ATInequality_nonstrict'] = 'Your inequality should be strict, but is not! '; ! $string['ATInequality_strict'] = 'Your inequality should not be strict! '; ! $string['ATInequality_backwards'] = 'Your inequality appears to be backwards. '; ! ! $string['ATLowestTerms_wrong'] = 'You need to cancel fractions within your answer. '; $string['ATLowestTerms_entries'] = 'The following terms in your answer are not in lowest terms. {$a[0]} Please try again. '; *************** *** 281,291 **** $string['ATList_wrongentries'] = 'The entries in red below are those that are incorrect. {$a[0]} '; ! $string['ATMatrix_wrongsz'] = 'Your matrix should be {$a[0]} by {$a[1]}, but it is actually {$a[2]} by {$a[3]}.'; ! $string['ATMatrix_wrongentries'] = 'The entries in red below are those that are incorrect. {$a[0]}'; ! $string['ATSet_wrongsz'] = 'Your set should have {$a[0]} different elements, but it is actually has {$a[1]}.'; $string['ATSet_wrongentries'] = 'The following entries are incorrect, although they may appear in a simplified form from that which you actually entered. {$a[0]} '; ! $string['irred_Q_factored'] = 'The term {$a[0]} should be unfactored, but is not.'; $string['irred_Q_commonint'] = 'You need to take out a common factor. '; // needs a space at the end. $string['irred_Q_optional_fac'] = 'You could do more work, since {$a[0]} can be further factored. However, you don\'t need to. ';  283,293  $string['ATList_wrongentries'] = 'The entries in red below are those that are incorrect. {$a[0]} '; ! $string['ATMatrix_wrongsz'] = 'Your matrix should be {$a[0]} by {$a[1]}, but it is actually {$a[2]} by {$a[3]}. '; ! $string['ATMatrix_wrongentries'] = 'The entries in red below are those that are incorrect. {$a[0]} '; ! $string['ATSet_wrongsz'] = 'Your set should have {$a[0]} different elements, but it is actually has {$a[1]}. '; $string['ATSet_wrongentries'] = 'The following entries are incorrect, although they may appear in a simplified form from that which you actually entered. {$a[0]} '; ! $string['irred_Q_factored'] = 'The term {$a[0]} should be unfactored, but is not. '; $string['irred_Q_commonint'] = 'You need to take out a common factor. '; // needs a space at the end. $string['irred_Q_optional_fac'] = 'You could do more work, since {$a[0]} can be further factored. However, you don\'t need to. '; *************** *** 317,324 **** $string['ATInt_const_int'] = 'You need to add a constant of integration. This should be an arbitrary constant, not a number.'; $string['ATInt_const'] = 'You need to add a constant of integration, otherwise this appears to be correct. Well done.'; ! $string['ATInt_EqFormalDiff'] = 'The formal derivative of your answer does equal the function that you were asked to integrate. However, your answer differs from the correct answer in a significant way, that is to say not just, eg, a constant of integration. Please ask your teacher about this.'; ! $string['ATInt_wierdconst'] = 'The formal derivative of your answer does equal the function that you were asked to integrate. However, you have a strange constant of integration. Please ask your teacher about this.'; $string['ATInt_diff'] = 'It looks like you have differentiated instead!'; ! $string['ATInt_generic'] = 'The derivative of your answer should be equal to the function that you were asked to integrate, that was: {$a[0]} In fact, the derivative of your answer, with respect to {$a[1]} is: {$a[2]} so you must have done something wrong!'; $string['ATDiff_error_list'] = $string['ATFacForm_error_list'];  319,326  $string['ATInt_const_int'] = 'You need to add a constant of integration. This should be an arbitrary constant, not a number.'; $string['ATInt_const'] = 'You need to add a constant of integration, otherwise this appears to be correct. Well done.'; ! $string['ATInt_EqFormalDiff'] = 'The formal derivative of your answer does equal the expression that you were asked to integrate. However, your answer differs from the correct answer in a significant way, that is to say not just, eg, a constant of integration. Please ask your teacher about this.'; ! $string['ATInt_wierdconst'] = 'The formal derivative of your answer does equal the expression that you were asked to integrate. However, you have a strange constant of integration. Please ask your teacher about this.'; $string['ATInt_diff'] = 'It looks like you have differentiated instead!'; ! $string['ATInt_generic'] = 'The derivative of your answer should be equal to the expression that you were asked to integrate, that was: {$a[0]} In fact, the derivative of your answer, with respect to {$a[1]} is: {$a[2]} so you must have done something wrong!'; $string['ATDiff_error_list'] = $string['ATFacForm_error_list']; 
From: Chris Sangwin <sangwinc@us...>  20080722 10:59:47

Update of /cvsroot/stack/stackdev/lib/CAS In directory sc8prcvs8.sourceforge.net:/tmp/cvsserv25905/lib/CAS Modified Files: casText.php Log Message: Index: casText.php =================================================================== RCS file: /cvsroot/stack/stackdev/lib/CAS/casText.php,v retrieving revision 1.32 retrieving revision 1.33 diff C2 d r1.32 r1.33 *** casText.php 8 Jun 2008 20:54:55 0000 1.32  casText.php 22 Jul 2008 10:59:39 0000 1.33 *************** *** 33,37 **** require_once($logs.'/CASkeywords.php'); require_once($root.'/lib/translator.php'); ! require_once($root.'/lib/logger.php'); $globalForbid = $stack_cas['globalForbid'];  33,37  require_once($logs.'/CASkeywords.php'); require_once($root.'/lib/translator.php'); ! require_once($root.'/lib/Logger.php'); $globalForbid = $stack_cas['globalForbid']; *************** *** 60,64 **** $this>logger>finest('Processing Castext: '.$rawString); } ! /** * Checks the castext syntax is valid, no missing @'s, $'s etc  60,64  $this>logger>finest('Processing Castext: '.$rawString); } ! /** * Checks the castext syntax is valid, no missing @'s, $'s etc *************** *** 359,368 **** { if(!empty($forbidden)) ! { //convert all forbidden to uppercase foreach($forbidden as $id => $forbid) { $forbidden[$id] = strtoupper($forbid); ! } $toReturn = true;  359,368  { if(!empty($forbidden)) ! { //convert all forbidden to uppercase foreach($forbidden as $id => $forbid) { $forbidden[$id] = strtoupper($forbid); ! } $toReturn = true; *************** *** 484,488 **** } } ! /** * Removes the cas commands from a string replacing with their label eg caschat1  484,488  } } ! /** * Removes the cas commands from a string replacing with their label eg caschat1 *************** *** 581,585 **** return $this>cmdArray; } ! /** * Returns the commands in an indexed array, no labels  581,585  return $this>cmdArray; } ! /** * Returns the commands in an indexed array, no labels 