JacquesC

Prof. Jacques Carette

2401 Reputation

17 Badges

20 years, 82 days
McMaster University
Professor or university staff
Hamilton, Ontario, Canada

Social Networks and Content at Maplesoft.com

From a Maple perspective: I first started using it in 1985 (it was Maple 4.0, but I still have a Maple 3.3 manual!). Worked as a Maple tutor in 1987. Joined the company in 1991 as the sole GUI developer and wrote the first Windows version of Maple (for Windows 3.0). Founded the Math group in 1992. Worked remotely from France (still in Math, hosted by the ALGO project) from fall 1993 to summer 1996 where I did my PhD in complex dynamics in Orsay. Soon after I returned to Ontario, I became the Manager of the Math Group, which I grew from 2 people to 12 in 2.5 years. Got "promoted" into project management (for Maple 6, the last of the releases which allowed a lot of backward incompatibilities, aka the last time that design mistakes from the past were allowed to be fixed), and then moved on to an ill-fated web project (it was 1999 after all). After that, worked on coordinating the output from the (many!) research labs Maplesoft then worked with, as well as some Maple design and coding (inert form, the box model for Maplets, some aspects of MathML, context menus, a prototype compiler, and more), as well as some of the initial work on MapleNet. In 2002, an opportunity came up for a faculty position, which I took. After many years of being confronted with Maple weaknesses, I got a number of ideas of how I would go about 'doing better' -- but these ideas required a radical change of architecture, which I could not do within Maplesoft. I have been working on producing a 'better' system ever since.

MaplePrimes Activity


These are replies submitted by JacquesC

The previous post (More torture tests) makes the page on which it is displayed go quite wonky. I have no idea where the bug lies, but it definitely highlights a problem.
(a>b) + 3*(a<b) + 4
Moderator edit - I changed <maple> to <pre> I believe the bug comes from the use of the less than and greater than signs. I will look into it.
I really doubt that backquotes are used, as it would results in things like `1+2`, which is clearly not what happens. You probably meant to say that forward quotes are used, which would be consistent with the behaviour I have seen. Similarly, I doubt the typesetter cannot be the same as in the Standard Worksheet - that would produce such a huge load on the web server that the site would be unusable; using Classic would make no appreciable difference. And anyways, the typesetter in the Standard Worksheet produces different results on the previous example! What I am sure you meant to say is that the TTY version of Maple is used with the GIF driver for pretty-printing. Which just goes to show how useful that TTY version really is, no? Plus I recognize the GIF drivers' hideous choice of fonts. I could be wrong, but I rather suspect not. Trivia question: how many typesetters are there in Maple? I mean, when you install Maple 10 on Windows, how many typesetters are there in that product? As far as I know, there are 6, with each one have slightly different layout rules.
Without cheating, can someone tell me the Maple input string I had to type to get abs(Eval(abs(``[iota]),``^iota=``[1][1])) as output? It also highlights some bugs in the typesetter used on this web site - the same input in Classic looks ``better''.
That was so much fun, that I decided to keep going. Let's see what various things do: CFRAC([3, 7, 15, 1, 292, 1, 1, `...`]) numtheory[cfrac](Pi,6) PLOT(CURVES([[0,0],[1,1]])) <<1>> Matrix(1,1,{(1, 1) = 1},datatype = anything,storage = rectangular,order = Fortran_order,shape = []) and I get nothing particularly bizarre. That's almost too bad! (The reason I chose the above is that all of those objects in either Maple GUIs, from Maple 6 to Maple 10 are good sources of cut&paste bugs). Trying to be sneaky: x -> (1+1)   x -> (1+1) proc(x) (1+1) end   proc(x) (1+1) end and we see two interesting things: automatic simplifications inside a procedure, and elision of a procedure body (even without option copyright). I wonder why the last is so? OK, so can we get around that? proc(x) options operator, arrow; (1+1) end   proc(x) options operator, arrow; (1+1) end Well, sort-of. Let's test it for real: proc(x) options operator, arrow; if type(x,'real') then sin(x) else procname(args) end if end proc  proc(beta) options operator, arrow; if beta::real then sin(beta) else procname(args) end if end proc which certainly is an interesting result.
> dsolve({diff(s(t),t) = A - A * rho^((1 - r^(theta * t)) * x) - v, diff(f(t),t)=((c - s(t)) / l) * m + x, diff(h(t),t) = x, f(0) = 0, s(0) = 0, h(0) = 0});

                     x          (theta t)
                A rho  Ei(1, x r          ln(rho))
  {s(t) = A t + ---------------------------------- - v t
                           theta ln(r)

                                                          t
                x                                        /
           A rho  Ei(1, x ln(rho))                      |   m c
         - -----------------------, h(t) = x t, f(t) =  |   ---
                 ln(r) theta                            |    l
                                                       /
                                                         0

                            x          (theta _z1)
           m A _z1   m A rho  Ei(1, x r            ln(rho))   m v _z1
         - ------- - -------------------------------------- + -------
              l                  theta ln(r) l                   l

                  x
           m A rho  Ei(1, x ln(rho))
         + ------------------------- + x d_z1}
                 theta ln(r) l
A definite integral is considered ``simpler'' than a differential equation, so the above is solved. Most of the integrand is constant (with respect to _z1), so the part that needs to be integrated is quite compact.
Solving Sudoku puzzles via backtracking (ie brute-force) is really too easy, and takes a lot of the fun out of solving these puzzles! A much more human-like way of solving these is by forcing a recursion-depth of say 5 (which corresponds to how many things are easy to keep track of in ones' mind). Then one needs much more elaborate strategies to successfully solving Sudoko puzzles. There are many different sites that offer a lot of suggestions about such strategies. I like this Japanese puzzle site, as well as Paul's Pages (and some of the links therein). The Sudoku Solver in Javascript over at Scanraid is fun to play with, as it offers a nice GUI. Making a Maplet that does the same would be fun! Apparently, this puzzle: 1 - - - - - - - - - - 2 7 4 - - - - - - - 5 - - - - 4 - 3 - - - - - - - 7 5 - - - - - - - - - - - - 9 6 - - - 4 - - - 6 - - - - - - - - - - 7 1 - - - - - 1 - 3 - is the smallest known Sudoku puzzle which still has a unique solution. I found it over on Lambda the Ultimate (a programming languages blog), in a discussion on Sudoku. One question: how did you generate that PDF? That is a very interesting way to view Maple code!
Using Firefox on a Windows XP machine, I clicked on 84_sudoku.pdf file above. I was then asked what I wanted to do with this compressed folder. If I try to view it using the compressed folder viewer, that fails. If instead I save the file to disk, it saves as a pdf file which Acrobat views just fine. I am not sure I understand what is going on here. An incorrect MIME type somewhere?
The current evolution that I see in this site is very promising for its growth. The rapid reaction of the site implementors to the good suggestions is refreshing. More community moderators (and fewer current Maple employees), at least in the medium term, would be a good direction to move in. A Wiki portion to this site is a tremendous idea. Other Wikis have worked really well; outside the obvious examples, the Haskell Wiki has been a very successfull ``niche'' Wiki that has really helped that community come together. I am particularly happy to see various Maplesoft employees, in particular some that are responsible for actually doing stuff in many parts of Maplesoft's product lines, providing responses now and then. I particularly like it when they clearly label themselves as such. I certainly hope that the MaplePrimes community will not abuse this gesture of goodwill on Maplesoft's part.
To have a much better chance of getting help, your parameters (A, rho, theta, x, v, c, m) all need to be known numerically. And, in any case, your problem can be solved symbolically! Even in Maple 9.5.
The suggestion of using partial evaluation to faithfully mirror Maple's behaviour is quite interesting (although it would require the ability to link against some of Maple's run-time, NAG libraries included). In fact, Stephen, my student Mike Kucera is working on a partial evaluator for Maple -- your desk will be right next this his! So this would be an interesting test for his work, though perhaps a mite too challenging for a Master's Thesis project. It might also be interesting to see how far one can go via pure code generation, but with a bit of Maple help. This could be done if the complete interval over which the integration might be performed was known ahead of time. You could still integrate Int(f(x),x=a..b), but a..b would have to be contained in a fixed c..d. Then using a Chebyshev-Pade approximation to f over a..b, one could integrate this (exactly!) to give a fast numerical ``integrator''. To get fancier, one could probably to a finer singularity analysis of f(x) and interval sub-division, then Chebyshev-Pade approximation (rather like what evalf/Int itself does when straightforward numerical methods fail, in fact).
The suggestion of using partial evaluation to faithfully mirror Maple's behaviour is quite interesting (although it would require the ability to link against some of Maple's run-time, NAG libraries included). In fact, Stephen, my student Mike Kucera is working on a partial evaluator for Maple -- your desk will be right next this his! So this would be an interesting test for his work, though perhaps a mite too challenging for a Master's Thesis project. It might also be interesting to see how far one can go via pure code generation, but with a bit of Maple help. This could be done if the complete interval over which the integration might be performed was known ahead of time. You could still integrate Int(f(x),x=a..b), but a..b would have to be contained in a fixed c..d. Then using a Chebyshev-Pade approximation to f over a..b, one could integrate this (exactly!) to give a fast numerical ``integrator''. To get fancier, one could probably to a finer singularity analysis of f(x) and interval sub-division, then Chebyshev-Pade approximation (rather like what evalf/Int itself does when straightforward numerical methods fail, in fact).
The <code> tag should not strip spaces - that is a definite bug. See how my favourite public blog Lambda the Ultimate cleanly handles that tag for posting code. Additionally, that blog also allows other tags, like <b> and <i> in posts, which make for more expressivity as well, I don't know why these are not allow in Filtered HTML.
Last I had access to Maple's memory management (3 years ago, but it has been like that since about 1984...), the kernel did not explicitly track root nodes and block sizes, so that it has no way to know that a malloc'ed block is entirely free and thus can be given back to the OS. This would not necessarily be difficult to add though, especially for large memory blocks. Let's hope your suggestion gets heard, as it is relatively easy to show that Maple's gc is O(allocated_memory).
First 116 117 118 119 Page 118 of 119