you are now unmuted
okay can you guys hear me yeah
can you guys hear me sir yep I can and
we're live so take it away okay
so um hello everyone my name is ferming
I'm a programmer
a math student from spain I've been
using me e-max for
two years now more or less and today I'm
going to talk about
a maxima computer algebra system in 2
max
so let's talk about what is maxima
well maxim is a system for manipulation
of symbolic and numerical expression
and it's similar in some regard to
octave
and it's also free software is derived
from the maxima from the 60 from the m80
and it's written in common lisp which is
a language that I really
like I enjoy writing it so for me it's a
plus
okay so let's talk about the initial
support for maxima when I first started
using it I looked for support into Emacs
and I found that
there's two major modes in the main
repository of maxima
for remax the first one is imaxima which
I don't know too much about it
and the second one is maxima dot l which
is the one I took first
and it was pretty nice has like a major
mode a minor mode
a nice ripple but it also has some
disadvantage
and the first one is that is quite
outdated I think
it was from the 2007
so it's not tested with the current
email version and the second one
is that it doesn't use modern e-max
capability
I'm talking for example about the last
or more latex preview
from the last a max 27.1 I think
and that's why is that they know
integrated with common third party
extension I'm talking about company for
example third party
yeah you know the alpa melba packages
so uh this stock is going to be divided
in two parts the first one is going to
be how I maximize my date today
in max exercise don't worry it's going
to be
quite easy and the second one is going
to be why for the package
and the list improvement that I did and
a couple of things more maybe the future
and where's the package right now if you
can use it so
let's talk about the workflow so right
out of the box it has like an
orimal support I didn't write this it
was already
in Emacs
so that's pretty nice let's go with a
simple example
okay so this is an array of three
equations and three variables
so it's a system that can be solved and
the solution is unique
um so we're going to solve it right
let's go
solutions okay here's how you define a
variable
in it's called solve okay
it's called implicit explicit
sorry okay and now an array of
our variables actually okay
so first of all we have to send this
variable to the maxima
repo with we can do that with ctrl c
control c
or with the maxima send line
okay so let's um let's put the maxima
buffer right here
okay let's so um
right now we can get the solution like
this so we call already
uh we call this line right now control
sequence to c
as you can see we get like an array
inside an array because
uh let's see why we get this so we can
call maxima
help a point this will open a
dock um buffer with all information
about the
solve function so we can see that this
list of solution equations
you can see it okay so but we no we know
that this system only have one solution
so we're only interested in the first
one we can do this like pretty easily
just to take the first one
we can send it to the buffer so this is
quite easy example as you can see
they have to completion much of the help
facilities that we have
we can also get information about the
symbol for example maxima
symbol doc and we get in the and now you
can see
correctly in the mini buffer all the
possible
um parameter of the function
right so let's continue
okay so let's go to a more well
complicated example to say oops
okay so we have this
equation and we want to go from -1 to 5
I want to show in a nice
graph right first of all we begin
sending this line to the
maxima ripple hold it button again
okay um so this is not ideal if you want
to write down this equation because
it's quite messy what is when so
uh what's thing are where so we can call
the function maxima
let's say insert form okay
and this is more easy this basically put
text behind
and led or mode to render it and this is
quite easy to
write down you can use it like in every
expression so um first we have to call a
library
let's load the library library draw
we have also completion for local
variable and local
libraries sorry let me try to finish
draw okay and we send the line
so right now we have a leverage and we
should even have auto completion for the
library function
okay we have let's call draw2d
and now we can call implicit we should
have
okay and we can I mean put the variable
of equations we put the first variable d
minus
five d five five
the v variable the minus five and the
five
okay it should be all all good so let me
try to send it
okay you cannot see it right now because
I'm just sharing the maxima screen let
me try to change that
okay um
okay can you plot hello
okay so this is basically the graph that
I can upload generates
uh right now it's not integrated into
into the maximum package but it's a work
in progress
so let's go back to Emacs
uh where are you okay there you are okay
okay so um
let's continue so uh this is some of the
things that you can use
for your day-to-day programming in
maxima
let's go now with the
okay as you can see this is just text
that is render
okay let's go within a slide this is how
I use maxima a simple example you don't
want to
talk too much about it because everyone
use the package in a different way
so right now I'm going to talk about the
original package and
the way I change it right so the
documentation
of the original was great but for me it
wasn't embedded in the code
it was something sometimes hard to read
like it was like a big
chunk of comment it gave me all the
information
like um for me that's too much I prefer
a cohesive small comment and then a big
redmi will order
all the links and information so that's
one of the first thing I
change um then also completion I'm a big
fan
I'm used to slime so I'm I love
great auto completion so um the first
thing that I noticed that well
it uses an absolute function I don't
know if you can see correctly okay
comment dynamic is deprecated and it
also have like this
variable which is maximus symbol which
is basically a big
list of all the possible completions so
if I load the library it's not aware of
the new symbols or even if I
create a variable it's not loaded so
it's not dynamic
so I want the first thing I want is
dynamic completion right
so I improve it which wasn't that hard
I first of all create maximum completion
which we're going to see in a moment
and then it changes completion region so
this is the
improved version but the good thing is
like I decoupled the completion function
so I make that you can use it on your
own so you get a prefix
which is um like
the thing that you're going to also
complete you get the inferior process
which I'm going to talk about later but
basically it's a maxima process you can
work with
and you get an optional argument which
is fuzzy finding
okay so you can easily send a block here
what
uh with the propos which is a maxima
command that gets you
all the auto completion and then you
process the
the output and you return a list
of possible completion this function can
be easily put into
company as you can see you just
get maximum auxiliary inferior process
is a process that just
uses sorry I have of
all the apropos and the get that symbol
it's like uh
like you say auxiliary let's help me uh
for that dirty stuff
so and process manipulation let's talk
about
how the maxima process was in the
beginning
so at first it was just one process and
you send all of the things there
and you move the processor here and
there and
there was a global state right so all
the function depends on
variable global variables and I don't
like that approach I prefer more like a
shirt to say functional like you sense
one of things and you return
something so it's not like a void
function so to say
so I change it recipe uh well this is
the maxima start function now
let's just create a startup process with
this function which is maxima make
inferior
so this function just gets a name
and it return a process of maxima and
you can then manipulate it the way you
want
let's see a better version so this is
the opposite right this
remove an inferior process and delete
the process and kill the buffer
right so let's give an example because
this you can see pretty easily in this
example
so I want to go to the scratch buffer
which I think you can see it better
okay so this is the way you can get a
process with your name
and save it into a variable right let's
execute this so as you can see well
I don't know if you can see big you get
a process
let's go to it the process called my
maxima
as the buffer right and if we can you
can send
stuff to the process right we can call
maximus in block get a block of valid
maxima code and just pass the variable
the process
and we send code to the process right we
can
this is useful if you have some
expensive computation that you want
to process laser to say so the process
can manage it
and when you get the results correctly
you can also get the result from the
process
I mean I don't put it here but quite
easy and then you
removed in favor which is the way to get
rid of the process
and the buffer so if we call this
function we should get rid of the
this process and it works the processing
is no longer
I'm happy to continue so um
other things that improve the package on
my commitment during time
I'm going good okay another thing that I
did to the package was to add
continue integration and continue
delivery right so the package didn't
have any tests
and the code was a little bit messy so
I add integration a test
and test with the test simple framework
from rocky bursting the maintainer of
real
good which is a great package by the way
um
yeah this is one example of the process
so right now because um
the infrastructure of the process
management is decoupled
so I can test it pretty easily this is
the test function of the
inferior running so I can check if an
inferior is running right now
and I can just delete it after and get
the results
and I also did some integration with the
party packages the first one company of
course I love auto completion
the second one was hormone that was
already there and latex with the
um or logic insert form
and with poly mode because um let me
evaluate this maxima can understand lisp
code
well more or less it has like a
function so to say that you can send a
list command to the
maxima rebel and you can understand it
in some way so
we can go to the maxima poly
only maxima right you enable polymaxima
and it creates a polymode
which this is lisp code and this is
maxima code
so we can send this to the maxima ripple
we come to c control r which
it sends the um the current
um area region sorry
and we define a variable which is called
test and as we can see we have the
variable test right here so you can
program in lisp and you can send it to
maxima
so this is pretty good pretty nice um
working integration with
the slime mode and with swank so you can
actually have a completion of
a function inside the maximal list
package but
this is going to take quite a while
because it's not trivial
so um we're the feature of maxima right
now well we have fonts highlighting
smart indentation uh it was already in
the package but now it's quite better
great help functions right now I can
find the recommendation quite
fast and currently the menu integration
this is quite basic it needs to be a
little bit improved
uh latex support also completion the
company and maximizer process
integration and mini buffer I didn't
show you
but basically if you call global maxima
minor mode you have the minor mode you
call maxima mini buffer
how are you okay mini buffer you can
basically just write simple maxima
command and it will give you the result
this is like a permanent version of um
calc so you can do it you write the
command and you get the output uh way
more to come I have like a list
of issues that I put enhancement a new
feature that I'm going to develop
so uh the future under presence of the
package well the package is right now
melpa a melba stable um
in this 0.7.6 version
and I'm planning to include into the
known canoe alpha
this is the url of the package by the
way so you can if you go to metapod you
put maxima and
you can download it it doesn't have too
much dependencies
you aware of that um and thank you very
much
uh this is going to be my talk these are
my uh information
this is my gitlab this is my page which
I don't
love too much and this is my email
so um thank you very much and I will be
answering some questions right now
and happy hacking
you are now unmuted thank you very much
vermin for the great talk um okay yeah
let's see if you have any questions
uh yeah I'm reading like this um
so I'm a buddy october usually right now
okay
maxima over october yep there are a
couple questions
wow maxima we're okay I don't want to I
don't know
october that much um
[Music]
like I use it like a couple of times but
I'm not happy
and I found the octave packets to be
quite a little bit harder to understand
and also that
it didn't have too much features like I
prefer the maximum used to
maybe octave is better I don't I'm not
100 sure
I know that you can use it for similar
stuff but
that's it so sorry
okay I'm in a little bit of a rush sorry
let me drink a little blue okay
okay
okay how does maxima compare to sagemath
in imax
I mean I don't know what is sage
math I'm sorry um so I cannot answer
your question
with your question I think um
sorry but I mean maxima is ready in
combo list that's just a preference for
me because I like
lisp dialect and common lisp is
interesting um
yeah do you plan to
I mean a maximum organization for maxima
code block
yes I want to improve the um
of maxima package but I didn't have
enough time and I want to
clear a little bit of the code because
still right now
the code is quite messy in some areas
because I pretty much implement first
the base function I want to
build on top of so right now it's quite
usable but I still have something that I
want to improve
so when I finish that I will
improve the normal version I think
it's maximizing to get into into your
opinion yes I
I think that the creator of maxima like
have this
lisp mine and probably
that they if you go to a symbol you get
all the information
and that reflects that you can actually
write your program of maxima into
um into lisp literally because they have
a command
so I think that is quite easy to get
into some university use it for
um first um
years so it's quite easy and I think
with my package you can use it
like pretty pretty easily just create a
file and you can start typing and
maximize quite easy to install also
so I think yeah it's crazy and
the page should restart I don't know why
sorry
strict in fixed lisp syntax
you're talking about the maxima itself
syntax
or I don't understand the question
correctly
well I'm going to go to the next
question is there
support for images in maximum mode not
right now
the way I want to implement some imax
things uh is there support for
but right now it doesn't have like a if
you could want to have a new plot
um inside you buffer right now it's not
possible so
that's the thing that I maximized that
maxima.l still doesn't
do which university you start to use
maxima um
in this aragosa university from spain
they used to maximize the um thing in
the engineer
and in the math also so I'm 100 sure
right now but when I started
are you planning to option your package
into maxima um I don't know about that
because uh maybe can be a little bit
messy
um because the maxima ripple is more
built around like maxima itself and they
don't
update the interfaces that much
I have no problem like it's okay it just
you have to um if you want to push you
can push in other
repository I mean it's just changed the
file another way
but also the test um is going to be a
little bit harder because I think
they're using
search for and I'm using
git lab continue integration within the
jury
so yeah I don't think that now unmuted
yeah it will be nice
okay um it's possible to include
maximizing or false similar to jupiter
notebooks
um I mean you can uh use maximize your
or files and you have maximum l mod
integrated and you can like create put
that code into a buffer and then
uh edited correctly but it is now not it
doesn't have like all the features like
other languages because
right now uh as my understanding is
quite basic so I still have some
still needs some some stuff some work
around
okay I think that's it
you are now unmuted
yep so that's it uh thank you very much
fermin for your live talk and for you
know the live q a
thank you all amazing uh max conf
cheers thank you it's thanks to you all
you guys
it's awesome okay thank you cheers bye
bye