[sage-support] How set UTF8 on the sage Notebook published page automatically?

2009-02-06 Thread NoSyu

Hello~

I test the sage on the sage Notebook homepage.

http://www.sagenb.org

So I wrote the code and comments and published it.

http://www.sagenb.org/home/pub/209/


I'm Korean and I want to show my code to my friends.

So I wrote the comments in Korean.

Sage support UTF-8, So I can see the comments.


But there is one problem.

Web browser's default encoding is EUC-KR not UTF-8.

In EUC-KR encoding, I can't read the comments cause it's broken.

So everytime my friends change the encoding manually.

Does any other solution about this problems?

--~--~-~--~~~---~--~~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~--~~~~--~~--~--~---



[sage-support] Re: How set UTF8 on the sage Notebook published page automatically?

2009-02-08 Thread NoSyu

Thanks to reply my post.

Actually, in firefox it works well.

But as you know, Windows IE is popular Web browser. Therefore I can't
say 'You should use firefox to see this comments' to all users.

I think there is no the meta html code to say about page.


http://www.sagenb.org/home/pub/220/

I wrote comments in Korean at that page.

But I can't read this comment on the IE7, because IE7 don't know about
encoding. So it set EUC-KR, because this machine OS is Windows XP
Korea.


I suggests that the meta html code is added to all notebook page like
this

meta http-equiv=Content-Type content=text/html; charset=utf-8 /

Then Web browser know this page's encoding is UTF-8.



-
누구나가 다,
자기 옆에서 눈물을 흘리며 신음하는
불행한 사람들에 비해
자기가 훨씬 더 불행하다고 생각하지요.
이게 바로 우리 가련한 인간들의 오만 중의 하나입니다.
- LE COMTE DE MONTECRISTO

Nickname : NoSyu
School of Information  Communication Engineering, SungKyunKwan
University
blog : http://nosyu.pe.kr

On 2월9일, 오전11시05분, Dan Drake dr...@kaist.edu wrote:
 Hello,



 On Fri, 06 Feb 2009 at 06:27AM -0800, NoSyu wrote:
  Hello~

  I test the sage on the sage Notebook homepage.

 http://www.sagenb.org

  So I wrote the code and comments and published it.

 http://www.sagenb.org/home/pub/209/

  I'm Korean and I want to show my code to my friends. So I wrote the
  comments in Korean. Sage support UTF-8, So I can see the comments.

  But there is one problem. Web browser's default encoding is EUC-KR not
  UTF-8. In EUC-KR encoding, I can't read the comments cause it's
  broken. So everytime my friends change the encoding manually. Does any
  other solution about this problems?

 I suspect that this is a browser problem, and not something that can be
 fixed in the Sage notebook. I'm using Firefox, and it seems to
 automatically switch encodings for me; when I visithttp://www.kaist.ac.kr/, 
 it's in euc-kr and I can read everything. When
 I visithttp://www.google.co.kr/, it's UTF-8 and Firefox automatically
 detects this and switches.

 Since you are Korean, I am guessing that you are using Internet
 Explorer. Try using Firefox and see if that helps:http://www.mozilla.or.kr/ko/

 Dan

 --
 ---  Dan Drake dr...@kaist.edu
 -  KAIST Department of Mathematical Sciences
 ---  http://mathsci.kaist.ac.kr/~drake

  signature.asc
  1K보기다운로드
--~--~-~--~~~---~--~~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~--~~~~--~~--~--~---



[sage-support] Is nullity of matrix is right nullity of matrix?

2009-05-14 Thread NoSyu

Ah... message is gone, so I write again. OTL...




I solve the Linear Algebra course problems on Sage.

Now I get the nullity of matrix to use nullity function, but it's
weird.


If I get the nullity of matrix A to use nullity function like that,

A.nullity()

but the result of this is same as left nullity of A.

So rank + nullity is not columns of A.

According to the Rank-Nullity Theorem, rank A + nullity A = number of
columns of A.

It's weird.



So I read the source file.

On SAGEROOT/devel/sage/sage/matrix/matrix2.pyx line 1546, (ver 3.4.1)

nullity = left_nullity

and definition of left_nullity function's comments

# Use that rank + nullity = number of rows, since matrices act
# from the right on row vectors.


But left null space of A is same as null space of transpose A.

http://en.wikipedia.org/wiki/Null_space#Left_null_space



So I think it is wrong, I modified the code like that.

nullity = left_nullity

=

nullity = right_nullity



The result of this is here.

http://121.169.55.178:8000/home/pub/2/

(It's my desktop computer, so it's slow.)



Nullity function's document is here.

http://www.sagemath.org/doc/reference/sage/matrix/matrix2.html#sage.matrix.matrix2.Matrix.nullity

It said this function return the left nullity of matrix.



Is it wrong, or right?





누구나가 다, 자기 옆에서 눈물을 흘리며 신음하는 불행한 사람들에 비해 자기가 훨씬 더 불행하다고 생각하지요. 이게 바로 우리
가련한 인간들의 오만 중의 하나입니다.

- 몬테크리스토 백작

it is the infirmity of our nature always to believe ourselves much
more unhappy than those who groan by our sides!

- The Count of Monte Cristo

c'est un des orgueils de notre pauvre humanité, que chaque homme se
croie plus malheureux qu'un autre malheureux qui pleure et qui gémit à
côté de lui

- Le Comte de Monte-Cristo



박진영 - Bak Jin Yeong

학부재학생 - Undergraduate

컴퓨터공학전공 - Department of Computer Engineering

정보통신공학부 - School of Information  Communication Engineering

성균관대학교 - SungKyunKwan University

블로그 - http://nosyu.pe.kr

이메일 - don...@skku.edu
--~--~-~--~~~---~--~~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~--~~~~--~~--~--~---



[sage-support] Re: Is nullity of matrix is right nullity of matrix?

2009-05-14 Thread NoSyu

Thanks to reply my message.

I understand it.

You're right. From now, I use explicit function likes right_nullity.

I learned right nullity convention, so rank + nullity = number of
columns.

I discuss about it with my Prof.


Thanks again.

Have a nice weekend.^^



누구나가 다, 자기 옆에서 눈물을 흘리며 신음하는 불행한 사람들에 비해 자기가 훨씬 더 불행하다고 생각하지요. 이게 바로 우리
가련한 인간들의 오만 중의 하나입니다.
- 몬테크리스토 백작
it is the infirmity of our nature always to believe ourselves much
more unhappy than those who groan by our sides!
- The Count of Monte Cristo
c'est un des orgueils de notre pauvre humanité, que chaque homme se
croie plus malheureux qu'un autre malheureux qui pleure et qui gémit à
côté de lui
- Le Comte de Monte-Cristo

박진영 - Bak Jin Yeong
학부재학생 - Undergraduate
컴퓨터공학전공 - Department of Computer Engineering
정보통신공학부 - School of Information  Communication Engineering
성균관대학교 - SungKyunKwan University
블로그 - http://nosyu.pe.kr
이메일 - don...@skku.edu



On 5월15일, 오전11시43분, Jason Grout jason-s...@creativetrax.com wrote:
 NoSyu wrote:
  Ah... message is gone, so I write again. OTL...

  I solve the Linear Algebra course problems on Sage.

  Now I get the nullity of matrix to use nullity function, but it's
  weird.

  If I get the nullity of matrix A to use nullity function like that,

  A.nullity()

  but the result of this is same as left nullity of A.

 You did a great job tracking this down.  You're right; nullity in Sage
 refers to left nullity (i.e., dealing with vectors on the left, like
 v*M).  You're also correct that this is different than most standard
 linear algebra, where the term nullity means right nullity.  This is
 a historical thing in Sage that unfortunately, at least at this point,
 is not going to change.  Rather, Sage provides the explicit functions
 right_nullity and left_nullity.  We encourage you to use
 right_nullity or left_nullity to make it clear which nullity you are
 talking about.  Eventually (not in the near future), the nullity
 function may be deprecated and no longer available, as it is ambiguous,
 or at least confusing.

 The Sage decision is not right or wrong; it's just a different
 convention.  Moving to more explicit functions (left_nullity and
 right_nullity) is better, as it makes sure that everyone understands
 exactly what you mean.

 Jason
--~--~-~--~~~---~--~~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~--~~~~--~~--~--~---



[sage-support] Re: notebook worksheet rating info?

2009-08-06 Thread NoSyu

Hello

I see this problem few weeks ago.

So maybe someone find it and make a ticket.

I can't find ticket, so I write problems and solution in this article.


Here is the original source Sage 4.1 server/notebook/twist.py line
1266~1299

class Worksheet_rating_info(WorksheetResource, resource.Resource):
def render(self, ctx):
s = self.worksheet.html_ratings_info()
return HTMLResponse(stream=message('''
h2 align=centerRatings for %s/h2
h3 align=centera href='/home/%s'Go to the worksheet./a
brbr
table width=70%%align=center border=1 cellpadding=10
cellspacing=0
tr bgcolor=#7799bbtd width=30emUser/tdtd width=10em
align=centerRating/tdtd width=10em align=center
width=60emComment/td/tr
%s
/table
brbr
'''%(self.worksheet.name(), self.worksheet.filename(), s)))


class Worksheet_rate(WorksheetResource, resource.Resource):
def render(self, ctx):
ret = '/home/' + self.worksheet.filename()
#if self.worksheet.is_rater(self.username):
#return HTMLResponse(stream=message(You have already
rated the worksheet ib%s/b/i.%self.worksheet.name(), ret))
if user_type(self.username) == guest:
return HTMLResponse(stream = message(
'You must a href=/login first/a in order to rate
this worksheet.', ret))

rating = int(ctx.args['rating'][0])
if rating  0 or rating = 5:
return HTMLResponse(stream = message(
Gees -- You can't fool the rating system that
easily!, ret))
comment = ctx.args['comment'][0]
self.worksheet.rate(rating, comment, self.username)
return HTMLResponse(stream=message(
Thank you for rating the worksheet bi%s/i/b!
You can a href=rating_infosee all ratings of this
worksheet./a
%self.worksheet.name(), '/pub/'))


and here is fixed soruce.

class Worksheet_rating_info(WorksheetResource, resource.Resource):
def render(self, ctx):
s = self.worksheet.html_ratings_info()
return HTMLResponse(stream='''
h2 align=centerRatings for %s/h2
h3 align=centera href='/home/%s'Go to the worksheet./a
brbr
table width=70%%align=center border=1 cellpadding=10
cellspacing=0
tr bgcolor=#7799bbtd width=30emUser/tdtd width=10em
align=centerRating/tdtd width=10em align=center
width=60emComment/td/tr
%s
/table
brbr
'''%(self.worksheet.name(), self.worksheet.filename(), s))


class Worksheet_rate(WorksheetResource, resource.Resource):
def render(self, ctx):
ret = '/home/' + self.worksheet.filename()
#if self.worksheet.is_rater(self.username):
#return HTMLResponse(stream=message(You have already
rated the worksheet ib%s/b/i.%self.worksheet.name(), ret))
if user_type(self.username) == guest:
return HTMLResponse(stream = message(
'You must a href=/login first/a in order to rate
this worksheet.', ret))

rating = int(ctx.args['rating'][0])
if rating  0 or rating = 5:
return HTMLResponse(stream = message(
Gees -- You can't fool the rating system that
easily!, ret))
comment = ctx.args['comment'][0]
self.worksheet.rate(rating, comment, self.username)
return HTMLResponse(stream=
Thank you for rating the worksheet bi%s/i/b!
You can a href=rating_infosee all ratings of this
worksheet./a
%self.worksheet.name())


The problem is that if the right result, it use message function.

message function is like this.


# An error message

def message(msg, cont=None):
template_dict = {'msg': msg, 'cont': cont}
return template('error_message.html', **template_dict)

It use for error page. But original source use it to show right result
such as rate and raing_info page.

Can I make a ticket for this?

누구나가 다, 자기 옆에서 눈물을 흘리며 신음하는 불행한 사람들에 비해 자기가 훨씬 더 불행하다고 생각하지요. 이게 바로 우리
가련한 인간들의 오만 중 하나입니다.

- 몬테크리스토 백작

it is the infirmity of our nature always to believe ourselves much
more unhappy than those who groan by our sides!

- The Count of Monte Cristo

c'est un des orgueils de notre pauvre humanité, que chaque homme se
croie plus malheureux qu'un autre malheureux qui pleure et qui gémit à
côté de lui

- Le Comte de Monte-Cristo



박진영 - Bak JinYeong

학부재학생 - Undergraduate

컴퓨터공학전공 - Department of Computer Engineering

정보통신공학부 - School of Information  Communication Engineering

성균관대학교 - SungKyunKwan University

블로그 - http://nosyu.pe.kr

이메일 - don...@skku.edu

On 8월7일, 오전9시01분, Kevin Horton khorto...@rogers.com wrote:
 What is supposed to happen if one click's on a rating_info link in a  
 list of notebook worksheets?  I've tried with three different browsers  
 on two computers, on both sagenb.org and on my personal local server,  
 and I always end up at a blank page titled Error | Sage Notebook.
 --
 Kevin Horton
 

[sage-support] Re: notebook worksheet rating info?

2009-08-07 Thread NoSyu

I modify the only this from sage 4.1 source like this.

/server/notebook/twisted.py


class Worksheet_rating_info(WorksheetResource, resource.Resource):
def render(self, ctx):
s = self.worksheet.html_ratings_info()
return HTMLResponse(stream='''
h2 align=centerRatings for %s/h2
h3 align=centera href='/home/%s'Go to the worksheet./a
brbr
table width=70%%align=center border=1 cellpadding=10
cellspacing=0
tr bgcolor=#7799bbtd width=30emUser/tdtd width=10em
align=centerRating/tdtd width=10em align=center
width=60emComment/td/tr
%s
/table
brbr
'''%(self.worksheet.name(), self.worksheet.filename(), s))


class Worksheet_rate(WorksheetResource, resource.Resource):
def render(self, ctx):
ret = '/home/' + self.worksheet.filename()
#if self.worksheet.is_rater(self.username):
#return HTMLResponse(stream=message(You have already
rated the worksheet ib%s/b/i.%self.worksheet.name(), ret))
if user_type(self.username) == guest:
return HTMLResponse(stream = message(
'You must a href=/login first/a in order to rate
this worksheet.', ret))

rating = int(ctx.args['rating'][0])
if rating  0 or rating = 5:
return HTMLResponse(stream = message(
Gees -- You can't fool the rating system that
easily!, ret))
comment = ctx.args['comment'][0]
self.worksheet.rate(rating, comment, self.username)
return HTMLResponse(stream=
Thank you for rating the worksheet bi%s/i/b!
You can a href=rating_infosee all ratings of this
worksheet./a
%self.worksheet.name())


I remove message function twice.

Here is my temporary sage server 4.1

http://nosyu.homeip.net:8000/pub/

It works fine when I click the unrated post and other things.



누구나가 다, 자기 옆에서 눈물을 흘리며 신음하는 불행한 사람들에 비해 자기가 훨씬 더 불행하다고 생각하지요. 이게 바로 우리
가련한 인간들의 오만 중 하나입니다.

- 몬테크리스토 백작

it is the infirmity of our nature always to believe ourselves much
more unhappy than those who groan by our sides!

- The Count of Monte Cristo

c'est un des orgueils de notre pauvre humanité, que chaque homme se
croie plus malheureux qu'un autre malheureux qui pleure et qui gémit à
côté de lui

- Le Comte de Monte-Cristo



박진영 - Bak JinYeong

학부재학생 - Undergraduate

컴퓨터공학전공 - Department of Computer Engineering

정보통신공학부 - School of Information  Communication Engineering

성균관대학교 - SungKyunKwan University

블로그 - http://nosyu.pe.kr

이메일 - don...@skku.edu

On 8월7일, 오후6시26분, Kevin Horton khorto...@rogers.com wrote:
 On 6 Aug 2009, at 20:42, NoSyu wrote:





  Hello

  I see this problem few weeks ago.

  So maybe someone find it and make a ticket.

  I can't find ticket, so I write problems and solution in this article.

  Here is the original source Sage 4.1 server/notebook/twist.py line
  1266~1299

  class Worksheet_rating_info(WorksheetResource, resource.Resource):
     def render(self, ctx):
         s = self.worksheet.html_ratings_info()
         return HTMLResponse(stream=message('''
         h2 align=centerRatings for %s/h2
         h3 align=centera href='/home/%s'Go to the worksheet./a
         brbr
         table width=70%%align=center border=1 cellpadding=10
  cellspacing=0
         tr bgcolor=#7799bbtd width=30emUser/tdtd width=10em
  align=centerRating/tdtd width=10em align=center
  width=60emComment/td/tr
         %s
         /table
         brbr
         '''%(self.worksheet.name(), self.worksheet.filename(), s)))

  class Worksheet_rate(WorksheetResource, resource.Resource):
     def render(self, ctx):
         ret = '/home/' + self.worksheet.filename()
         #if self.worksheet.is_rater(self.username):
         #    return HTMLResponse(stream=message(You have already
  rated the worksheet ib%s/b/i.%self.worksheet.name(), ret))
         if user_type(self.username) == guest:
             return HTMLResponse(stream = message(
                 'You must a href=/login first/a in order to rate
  this worksheet.', ret))

         rating = int(ctx.args['rating'][0])
         if rating  0 or rating = 5:
             return HTMLResponse(stream = message(
                 Gees -- You can't fool the rating system that
  easily!, ret))
         comment = ctx.args['comment'][0]
         self.worksheet.rate(rating, comment, self.username)
         return HTMLResponse(stream=message(
         Thank you for rating the worksheet bi%s/i/b!
         You can a href=rating_infosee all ratings of this
  worksheet./a
         %self.worksheet.name(), '/pub/'))

  and here is fixed soruce.

  class Worksheet_rating_info(WorksheetResource, resource.Resource):
     def render(self, ctx):
         s = self.worksheet.html_ratings_info()
         return HTMLResponse(stream='''
         h2 align=centerRatings for %s/h2
         h3 align=centera href='/home/%s'Go to the worksheet./a
         brbr
         table

[sage-support] How can I remove or delete worksheet written by pub?

2009-08-11 Thread NoSyu
Hello.
I test the something not use notebook web interface directly. And
there is a problem that if I publish the worksheet, there is a new
published worksheet by pub id in published worksheet list.
So I want to remove that worksheets, but I don't know the pub password
or can't login. I just delete the worksheet directory in .sage/
sage_notebook/pub folder, but it didn't work.
Now I fix the problem to use some function, but I want to remove the
published worksheets written by pub. How can I do?



누구나가 다, 자기 옆에서 눈물을 흘리며 신음하는 불행한 사람들에 비해 자기가 훨씬 더 불행하다고 생각하지요. 이게 바로 우리
가련한 인간들의 오만 중 하나입니다.

- 몬테크리스토 백작

it is the infirmity of our nature always to believe ourselves much
more unhappy than those who groan by our sides!

- The Count of Monte Cristo

c'est un des orgueils de notre pauvre humanité, que chaque homme se
croie plus malheureux qu'un autre malheureux qui pleure et qui gémit à
côté de lui

- Le Comte de Monte-Cristo

박진영 - Bak JinYeong

학부재학생 - Undergraduate

컴퓨터공학전공 - Department of Computer Engineering

정보통신공학부 - School of Information  Communication Engineering

성균관대학교 - SungKyunKwan University

블로그 - http://nosyu.pe.kr

이메일 - don...@skku.edu
--~--~-~--~~~---~--~~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~--~~~~--~~--~--~---



[sage-support] Re: How can I remove or delete worksheet written by pub?

2009-08-11 Thread NoSyu

Thanks to reply my post.

I expect that new version of notebook in October.

Have a wonderful day~^^

On 8월12일, 오전2시36분, William Stein wst...@gmail.com wrote:
 On Tue, Aug 11, 2009 at 4:55 AM, NoSyu don...@gmail.com wrote:
  Hello.
  I test the something not use notebook web interface directly. And
  there is a problem that if I publish the worksheet, there is a new
  published worksheet by pub id in published worksheet list.
  So I want to remove that worksheets, but I don't know the pub password
  or can't login. I just delete the worksheet directory in .sage/
  sage_notebook/pub folder, but it didn't work.
  Now I fix the problem to use some function, but I want to remove the
  published worksheets written by pub. How can I do?

 I think deleting published worksheets is not implemented at present,
 unfortunately.  This will get fixed in October.  Also, that the worksheet
 appears to be published by pub is a bug.

 William





  

  누구나가 다, 자기 옆에서 눈물을 흘리며 신음하는 불행한 사람들에 비해 자기가 훨씬 더 불행하다고 생각하지요. 이게 바로 우리
  가련한 인간들의 오만 중 하나입니다.

  - 몬테크리스토 백작

  it is the infirmity of our nature always to believe ourselves much
  more unhappy than those who groan by our sides!

  - The Count of Monte Cristo

  c'est un des orgueils de notre pauvre humanité, que chaque homme se
  croie plus malheureux qu'un autre malheureux qui pleure et qui gémit à
  côté de lui

  - Le Comte de Monte-Cristo

  박진영 - Bak JinYeong

  학부재학생 - Undergraduate

  컴퓨터공학전공 - Department of Computer Engineering

  정보통신공학부 - School of Information  Communication Engineering

  성균관대학교 - SungKyunKwan University

  블로그 -http://nosyu.pe.kr

  이메일 - don...@skku.edu

 --
 William Stein
 Associate Professor of Mathematics
 University of Washingtonhttp://wstein.org
--~--~-~--~~~---~--~~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~--~~~~--~~--~--~---



Re: [sage-support] Sage notebook on a mobile device?

2010-05-30 Thread NoSyu




2010-05-30 오후 9:54, Alasdair 쓴 글:http://math1.skku.ac.kr/wap_html

  Has anybody made any headway with either of

(a) optimizing Sage for a mobile device (such as an iPhone, or an
Android device)?

(b) produced a mobile formatted version of the notebook?

There are times when I'd like access to Sage for a quick computation,
and my iPod Touch is all I have with me, in which case (b) would be a
great boon.

I'm also very keen to explore Android devices (when I can afford one).

Thanks,
Alasdair

  


Hello.

We make the page for mobile phone.

In fact, It's not for iPhone or Android. It just for old phone that
don't use _javascript_ or others.

http://math1.skku.ac.kr/wap_html

It written in Korean, but You can get the result same as SAGE Notebook.

Bye.

-- 

누구나가 다, 자기 옆에서 눈물을 흘리며 신음하는 불행한 사람들에 비해 자기가 훨씬 더 불행하다고 생각하지요. 이게 바로 우리 가련한 인간들의 오만 중의 하나입니다.
- 몬테크리스토 백작
it is the infirmity of our nature always to believe ourselves much more unhappy than those who groan by our sides!
- The Count of Monte Cristo
c'est un des orgueils de notre pauvre humanité, que chaque homme se croie plus malheureux qu'un autre malheureux qui pleure et qui gémit à côté de lui
- Le Comte de Monte-Cristo

박진영 - Bak Jin Yeong
학부재학생 - Undergraduate
컴퓨터공학전공 - Department of Computer Engineering
정보통신공학부 - School of Information  Communication Engineering
성균관대학교 - SungKyunKwan University
블로그 - http://nosyu.pe.kr
이메일 - no...@nosyu.pe.kr







-- 
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to sage-support+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-support
URL: http://www.sagemath.org