{"id":1191,"date":"2013-12-27T14:04:50","date_gmt":"2013-12-27T14:04:50","guid":{"rendered":"http:\/\/blog.filipesaraiva.info\/?p=1191"},"modified":"2013-12-27T14:24:36","modified_gmt":"2013-12-27T14:24:36","slug":"cantor-tour-pelas-funcionalidades-do-backend-para-python-2","status":"publish","type":"post","link":"https:\/\/filipe.saraiva.tec.br\/blog\/?p=1191","title":{"rendered":"Cantor: tour pelas funcionalidades do backend para Python 2"},"content":{"rendered":"<h2 style=\"text-align: justify;\">Introdu\u00e7\u00e3o<\/h2>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_select.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1192\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1192\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_select.png\" data-orig-size=\"613,330\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python2_select\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_select-300x161.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_select.png\" class=\"aligncenter size-full wp-image-1192\" alt=\"python2_select\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_select.png\" width=\"613\" height=\"330\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_select.png 613w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_select-300x161.png 300w\" sizes=\"auto, (max-width: 613px) 100vw, 613px\" \/><\/a><em>Tela de sele\u00e7\u00e3o de backends do Cantor<\/em><\/p>\n<p style=\"text-align: justify;\">Em 2013 desenvolvi <a href=\"http:\/\/blog.filipesaraiva.info\/?tag=gsoc2013-python-backend\" target=\"_blank\">um backend para Python 2<\/a> no <a href=\"http:\/\/edu.kde.org\/cantor\/\" target=\"_blank\">Cantor<\/a>, um projeto financiado em parte pelo <a href=\"http:\/\/blog.filipesaraiva.info\/?p=1081\" target=\"_blank\">Google Summer of Code<\/a>. Agora este backend est\u00e1 presente na vers\u00e3o do Cantor lan\u00e7ado com o <a href=\"http:\/\/kde.org\/announcements\/4.12\/\" target=\"_blank\">KDE 4.12<\/a>.<\/p>\n<p style=\"text-align: justify;\">Cantor \u00e9 um software para programa\u00e7\u00e3o cient\u00edfica\/matem\u00e1tica do KDE que serve como frontend para diferentes engines matem\u00e1ticas, entregando um ambiente que re\u00fane facilidades t\u00edpicas de uma IDE (como destaque de sintaxe, tab-complete, gerenciamento de vari\u00e1veis, etc) e um terminal avan\u00e7ado. Cantor tem uma arquitetura modular que permite ao desenvolvedor escrever o suporte para diferentes engines matem\u00e1ticas como backends. Atualmente, Cantor suporta Octave, Sage, Maxima, Kalgebra, Qualculate, R, Scilab (este tamb\u00e9m <a href=\"http:\/\/blog.filipesaraiva.info\/?tag=gsoc2011-scilab-backend\" target=\"_blank\">desenvolvido por mim<\/a>) e, em sua vers\u00e3o mais recente, Python 2.<\/p>\n<p style=\"text-align: justify;\">Neste post faremos uma &#8220;tour&#8221; pelas funcionalidades presentes nesta primeira vers\u00e3o do backend para Python 2.<\/p>\n<h2 style=\"text-align: justify;\">Tela Inicial &#8211; Destaque de Sintaxe e Tab Complete<\/h2>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_initialscreen.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1193\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1193\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_initialscreen.png\" data-orig-size=\"1366,737\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python2_initialscreen\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_initialscreen-300x161.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_initialscreen-1024x552.png\" class=\"aligncenter size-large wp-image-1193\" alt=\"python2_initialscreen\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_initialscreen-1024x552.png\" width=\"698\" height=\"375\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_initialscreen-1024x552.png 1024w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_initialscreen-300x161.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><em>Tela inicial do Cantor<\/em><\/p>\n<p style=\"text-align: justify;\">Ap\u00f3s selecionar o backend Python 2, o Cantor mostrar\u00e1 a tela inicial. Basicamente ela disp\u00f5e de uma grande tela que serve como o terminal do Python 2, e dois pain\u00e9is &#8211; um para mostrar sa\u00eddas de ajuda e outro para o gerenciamento de vari\u00e1veis.<\/p>\n<p style=\"text-align: justify;\">Vamos entrar com alguns comandos b\u00e1sicos no terminal para vermos como ficar\u00e1 a tela da aplica\u00e7\u00e3o:<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_syntax.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1194\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1194\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_syntax.png\" data-orig-size=\"1366,737\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python2_syntax\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_syntax-300x161.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_syntax-1024x552.png\" class=\"aligncenter size-large wp-image-1194\" alt=\"python2_syntax\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_syntax-1024x552.png\" width=\"698\" height=\"375\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_syntax-1024x552.png 1024w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_syntax-300x161.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><em>Destaque de sintaxe<\/em><\/p>\n<p style=\"text-align: justify;\">Percebam que o Cantor est\u00e1 destacando a sintaxe do Python 2 e, no painel ao lado, \u00e9 poss\u00edvel ver as vari\u00e1veis produzidas durante a intera\u00e7\u00e3o com o terminal. Voltaremos a este painel em outra se\u00e7\u00e3o.<\/p>\n<p style=\"text-align: justify;\">Agora vamos criar novas vari\u00e1veis com nomes parecidos e testar o tab complete. Veja a figura abaixo:<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_complete.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1195\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1195\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_complete.png\" data-orig-size=\"1366,737\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python2_complete\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_complete-300x161.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_complete-1024x552.png\" class=\"aligncenter size-large wp-image-1195\" alt=\"python2_complete\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_complete-1024x552.png\" width=\"698\" height=\"375\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_complete-1024x552.png 1024w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_complete-300x161.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><em>Tab complete para vari\u00e1veis<\/em><\/p>\n<p style=\"text-align: justify;\">Ap\u00f3s criarmos as vari\u00e1veis <em>variable_x<\/em>, <em>variable_y<\/em> e <em>variable_var<\/em>, escrevemos at\u00e9 <em>var<\/em> e teclamos tab duas vezes &#8211; Cantor apresentar\u00e1 as vari\u00e1veis ou fun\u00e7\u00f5es compat\u00edveis com aquele in\u00edcio de nome. O tab complete tamb\u00e9m funciona para fun\u00e7\u00f5es de m\u00f3dulos, como pode ser visto na pr\u00f3xima imagem.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_complete2.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1196\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1196\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_complete2.png\" data-orig-size=\"1366,737\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python2_complete2\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_complete2-300x161.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_complete2-1024x552.png\" class=\"aligncenter size-large wp-image-1196\" alt=\"python2_complete2\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_complete2-1024x552.png\" width=\"698\" height=\"375\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_complete2-1024x552.png 1024w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_complete2-300x161.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><em>Tab complete para fun\u00e7\u00f5es de m\u00f3dulos<\/em><\/p>\n<p style=\"text-align: justify;\">Cantor tamb\u00e9m trata erros no terminal. A pr\u00f3xima figura apresenta a mensagem de erro durante um import incorreto.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_error.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1197\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1197\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_error.png\" data-orig-size=\"1366,737\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python2_error\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_error-300x161.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_error-1024x552.png\" class=\"aligncenter size-large wp-image-1197\" alt=\"python2_error\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_error-1024x552.png\" width=\"698\" height=\"375\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_error-1024x552.png 1024w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_error-300x161.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><em>Mensagem de erro<\/em><\/p>\n<p style=\"text-align: justify;\">Tamb\u00e9m \u00e9 poss\u00edvel salvar o estado do terminal ou apenas os comandos e suas respectivas sa\u00eddas em um arquivo externo. Cantor tamb\u00e9m permite enviar\/baixar um exemplo do terminal para um servidor remoto. Explore estas funcionalidades na aba &#8220;<em>Arquivo<\/em>&#8220;.<\/p>\n<h2 style=\"text-align: justify;\">Painel de Ajuda<\/h2>\n<p>Cantor exibe a ajuda do Python, obtida a partir do comando <em>help<\/em>, em um dos pain\u00e9is laterais da interface. A figura abaixo apresenta a sa\u00edda de ajuda para a fun\u00e7\u00e3o complex:<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_help.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1198\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1198\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_help.png\" data-orig-size=\"382,648\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python2_help\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_help-176x300.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_help.png\" class=\"aligncenter size-full wp-image-1198\" alt=\"python2_help\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_help.png\" width=\"382\" height=\"648\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_help.png 382w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_help-176x300.png 176w\" sizes=\"auto, (max-width: 382px) 100vw, 382px\" \/><\/a><em>Painel de ajuda<\/em><\/p>\n<p style=\"text-align: justify;\">Como Cantor usa tecnologias Qt\/KDE, \u00e9 poss\u00edvel deslocar os paineis laterais e mudar o formato da tela. Abaixo temos um exemplo onde o painel de ajuda est\u00e1 na direita do terminal enquanto o gerenciador de vari\u00e1veis est\u00e1 na esquerda.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_help_complete.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1199\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1199\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_help_complete.png\" data-orig-size=\"1366,737\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python2_help_complete\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_help_complete-300x161.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_help_complete-1024x552.png\" class=\"aligncenter size-large wp-image-1199\" alt=\"python2_help_complete\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_help_complete-1024x552.png\" width=\"698\" height=\"375\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_help_complete-1024x552.png 1024w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_help_complete-300x161.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><em>Pain\u00e9is de cada lado da tela<\/em><\/p>\n<h2 style=\"text-align: justify;\">Gerenciamento de Vari\u00e1veis<\/h2>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_variables.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1200\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1200\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_variables.png\" data-orig-size=\"310,648\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python2_variables\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_variables-143x300.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_variables.png\" class=\"aligncenter size-full wp-image-1200\" alt=\"python2_variables\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_variables.png\" width=\"310\" height=\"648\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_variables.png 310w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_variables-143x300.png 143w\" sizes=\"auto, (max-width: 310px) 100vw, 310px\" \/><\/a><em>Painel de gerenciamento de vari\u00e1veis<\/em><\/p>\n<p style=\"text-align: justify;\">Al\u00e9m de ter a clara fun\u00e7\u00e3o de apresentar as vari\u00e1veis e seus respectivos valores, o painel de gerenciamento de vari\u00e1veis permite algumas opera\u00e7\u00f5es adicionais atrav\u00e9s dos bot\u00f5es na parte inferior do widget. S\u00e3o eles, da esquerda para a direita: <em>Adicionar uma nova vari\u00e1vel<\/em>, <em>Carregar vari\u00e1veis<\/em>, <em>Armazenar vari\u00e1veis<\/em>, e <em>Limpar vari\u00e1veis<\/em>.<\/p>\n<p style=\"text-align: justify;\"><em>Adicionar uma nova vari\u00e1vel<\/em> \u00e9 uma funcionalidade simples que exibe um pop-up e permite a cria\u00e7\u00e3o de uma vari\u00e1vel.<\/p>\n<p style=\"text-align: justify;\"><em>Carregar vari\u00e1veis<\/em> e <em>Armazenar vari\u00e1veis<\/em> fazem uso do m\u00f3dulo <a href=\"http:\/\/docs.python.org\/2\/library\/shelve.html\" target=\"_blank\">shelve<\/a> para persistir os dados do ambiente de execu\u00e7\u00e3o do Python. Quando os bot\u00f5es s\u00e3o clicados, Cantor carrega scripts que ir\u00e3o, no primeiro caso, ler um arquivo e carregar as vari\u00e1veis no ambiente e, no segundo, varrer o dicion\u00e1rio global do python salvando as vari\u00e1veis em um arquivo. Vale comentar que, como utiliza-se o shelve, estamos sujeitos \u00e0s restri\u00e7\u00f5es desse m\u00f3dulo &#8211; por exemplo, n\u00e3o \u00e9 poss\u00edvel salvar vari\u00e1veis que referenciam m\u00f3dulos importados. As figuras abaixo apresentam as opera\u00e7\u00f5es descritas.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_save_variables.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1202\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1202\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_save_variables.png\" data-orig-size=\"1366,737\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python2_save_variables\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_save_variables-300x161.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_save_variables-1024x552.png\" class=\"aligncenter size-large wp-image-1202\" alt=\"python2_save_variables\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_save_variables-1024x552.png\" width=\"698\" height=\"375\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_save_variables-1024x552.png 1024w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_save_variables-300x161.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><em>Salvando vari\u00e1veis<\/em><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_load_variables.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1203\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1203\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_load_variables.png\" data-orig-size=\"1366,737\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python2_load_variables\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_load_variables-300x161.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_load_variables-1024x552.png\" class=\"aligncenter size-large wp-image-1203\" alt=\"python2_load_variables\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/12\/python2_load_variables-1024x552.png\" width=\"698\" height=\"375\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_load_variables-1024x552.png 1024w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/12\/python2_load_variables-300x161.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><em>Carregando vari\u00e1veis<\/em><\/p>\n<p style=\"text-align: justify;\">Entre a opera\u00e7\u00e3o de armazenamento e de carregamento das vari\u00e1veis, utilizamos <em>Limpar vari\u00e1veis<\/em> para apagar todas as vari\u00e1veis do ambiente. O c\u00f3digo varre o dicion\u00e1rio global e vai deletando vari\u00e1vel por vari\u00e1vel. O c\u00f3digo carregado pelo Cantor \u00e9 o seguinte:<\/p>\n<h2 style=\"text-align: justify;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/09\/python_backend_variable_management_usecase6.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1124\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1124\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_backend_variable_management_usecase6.png\" data-orig-size=\"913,81\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_backend_variable_management_usecase6\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_backend_variable_management_usecase6-300x26.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_backend_variable_management_usecase6.png\" class=\"aligncenter size-full wp-image-1124\" alt=\"python_backend_variable_management_usecase6\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/09\/python_backend_variable_management_usecase6.png\" width=\"913\" height=\"81\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_backend_variable_management_usecase6.png 913w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_backend_variable_management_usecase6-300x26.png 300w\" sizes=\"auto, (max-width: 913px) 100vw, 913px\" \/><\/a>Gr\u00e1ficos no Cantor<\/h2>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/09\/python_command_to_plot.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1143\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1143\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_command_to_plot.png\" data-orig-size=\"1366,737\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_command_to_plot\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_command_to_plot-300x161.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_command_to_plot-1024x552.png\" class=\"aligncenter size-large wp-image-1143\" alt=\"python_command_to_plot\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/09\/python_command_to_plot-1024x552.png\" width=\"698\" height=\"375\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_command_to_plot-1024x552.png 1024w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_command_to_plot-300x161.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><em>C\u00f3digo para cria\u00e7\u00e3o de um gr\u00e1fico usando matplotlib<\/em><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/09\/python_plot_result.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1142\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1142\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_plot_result.png\" data-orig-size=\"1366,737\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_plot_result\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_plot_result-300x161.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_plot_result-1024x552.png\" class=\"aligncenter size-large wp-image-1142\" alt=\"python_plot_result\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/09\/python_plot_result-1024x552.png\" width=\"698\" height=\"375\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_plot_result-1024x552.png 1024w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/09\/python_plot_result-300x161.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><em>Gr\u00e1fico carregado no ambiente do Cantor<\/em><\/p>\n<p style=\"text-align: justify;\">As figuras anteriores apresentam o carregamento de um gr\u00e1fico no ambiente do Cantor. Quando a planilha \u00e9 exportada, o gr\u00e1fico estar\u00e1 l\u00e1 tamb\u00e9m. Essa funcionalidade pode ser modificada para a cria\u00e7\u00e3o do gr\u00e1fico numa janela separada &#8211; que \u00e9 o comportamento default do backend.<\/p>\n<h2 style=\"text-align: justify;\">Conclus\u00e3o e Futuro<\/h2>\n<p style=\"text-align: justify;\">Essa \u00e9 a primeira vers\u00e3o est\u00e1vel do suporte para Python 2, e apesar do b\u00e1sico estar funcionando muito bem, \u00e9 poss\u00edvel que alguns erros e bugs estejam espalhados pelo sistema.<\/p>\n<p style=\"text-align: justify;\">Gostaria era de ouvir feedbacks da comunidade Python de programa\u00e7\u00e3o cient\u00edfica\/matem\u00e1tica. Eu n\u00e3o sou um pythonista, ent\u00e3o conto com a ajuda de voc\u00eas para ca\u00e7ar bugs, relatar comportamentos estranhos, e sugerir melhorias e funcionalidades.<\/p>\n<p style=\"text-align: justify;\">Para a pr\u00f3xima vers\u00e3o teremos o suporte ao editor de scripts, que infelizmente n\u00e3o foi poss\u00edvel entregar neste lan\u00e7amento.<\/p>\n<p style=\"text-align: justify;\">Cantor \u00e9 uma das muitas iniciativas das comunidades de software livre que visa entregar uma solu\u00e7\u00e3o de qualidade para programa\u00e7\u00e3o cient\u00edfica\/matem\u00e1tica. Espero que a comunidade Python se aproprie dessa ferramenta e ajude no seu desenvolvimento e evolu\u00e7\u00e3o.<\/p>\n<p style=\"text-align: justify;\">Para os interessados nos bastidores do backend, h\u00e1 uma <a href=\"http:\/\/blog.filipesaraiva.info\/?tag=gsoc2013-python-backend\" target=\"_blank\">s\u00e9rie de posts<\/a> em portugu\u00eas e ingl\u00eas onde descrevo o processo de desenvolvimento da ferramenta. E para quem quiser colocar a m\u00e3o na massa, basta clonar o <a href=\"https:\/\/projects.kde.org\/projects\/kde\/kdeedu\/cantor\/repository\/\" target=\"_blank\">reposit\u00f3rio<\/a> do Cantor &#8211; cujo c\u00f3digo est\u00e1 dispon\u00edvel sob a GPLv2.<\/p>\n<p style=\"text-align: justify;\">E quaisquer d\u00favidas ou feedbacks, postem a\u00ed nos coment\u00e1rios ou mandem e-mail para filipe em kde.org.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o Tela de sele\u00e7\u00e3o de backends do Cantor Em 2013 desenvolvi um backend para Python 2 no Cantor, um projeto financiado em parte pelo Google Summer of Code. Agora este backend est\u00e1 presente na vers\u00e3o do Cantor lan\u00e7ado com o KDE 4.12. Cantor \u00e9 um software para programa\u00e7\u00e3o cient\u00edfica\/matem\u00e1tica do KDE que serve como frontend&hellip;&nbsp;<a href=\"https:\/\/filipe.saraiva.tec.br\/blog\/?p=1191\" class=\"\" rel=\"bookmark\">Continue a ler &raquo;<span class=\"screen-reader-text\">Cantor: tour pelas funcionalidades do backend para Python 2<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[58,11,26,107,42,41,105,49,108,80],"class_list":["post-1191","post","type-post","status-publish","format-standard","hentry","category-software-livre","tag-cantor","tag-desenvolvimento","tag-kde","tag-periodico","tag-planet-mageia-portugues","tag-planeta-psl-pi","tag-planeta-python-brasil","tag-planetkde-portugues","tag-python","tag-python-backend"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1p2Jh-jd","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1191","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1191"}],"version-history":[{"count":6,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1191\/revisions"}],"predecessor-version":[{"id":1208,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1191\/revisions\/1208"}],"wp:attachment":[{"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}