{"id":769,"date":"2012-05-01T18:31:14","date_gmt":"2012-05-01T18:31:14","guid":{"rendered":"http:\/\/blog.filipesaraiva.info\/?p=769"},"modified":"2012-05-01T18:31:14","modified_gmt":"2012-05-01T18:31:14","slug":"python-backend-para-cantor-nascendo-no-lakademy","status":"publish","type":"post","link":"https:\/\/filipe.saraiva.tec.br\/blog\/?p=769","title":{"rendered":"Python backend para Cantor nascendo no LaKademy"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2012\/05\/filipesaraiva-20120429T201446-e4aslw9.png\" alt=\"\" width=\"693\" height=\"399\" \/><\/p>\n<p style=\"text-align: justify;\"><em>Aconteceu muita coisa no <a href=\"http:\/\/blog.filipesaraiva.info\/?p=756\" target=\"_blank\">LaKademy<\/a> e irei reportar tudo em v\u00e1rios posts tem\u00e1ticos. Este \u00e9 sobre o que desenvolvi no sentido t\u00e9cnico, durante o encontro latino-americano dos colaboradores do KDE. Mais posts na <a href=\"http:\/\/blog.filipesaraiva.info\/?tag=lakademy\" target=\"_blank\">tag LaKademy<\/a>.<br \/>\n<\/em><\/p>\n<p style=\"text-align: justify;\">No Google Summer of Code deste ano submeti o projeto de desenvolvimento de um backend para programa\u00e7\u00e3o cient\u00edfica em <a href=\"http:\/\/python.org\/\" target=\"_blank\">Python<\/a> no <a href=\"http:\/\/edu.kde.org\/cantor\/\" target=\"_blank\">Cantor<\/a>, a exemplo do ano passado em que <a href=\"http:\/\/blog.filipesaraiva.info\/?tag=gsoc2011-scilab-backend\">implementei um backend<\/a> para o <a href=\"http:\/\/scilab.org\/\" target=\"_blank\">Scilab<\/a>. Infelizmente a proposta n\u00e3o foi aceita.<\/p>\n<p style=\"text-align: justify;\">Mas tudo bem, a vida continua. Isso n\u00e3o me desmotivaria a tocar o projeto para frente.<\/p>\n<p style=\"text-align: justify;\">Durante a prepara\u00e7\u00e3o para o LaKademy, coloquei como meta conseguir fazer funcionar a comunica\u00e7\u00e3o entre Cantor e Python. Minha primeira ideia foi fazer um fork do backend para <a href=\"http:\/\/www.sagemath.org\/\" target=\"_blank\">Sage<\/a>, que \u00e9 tamb\u00e9m uma tecnologia de programa\u00e7\u00e3o cient\u00edfica baseada em Python. Por\u00e9m, ainda na fase de avalia\u00e7\u00e3o do projeto para o Google Summer of Code, o desenvolvedor principal do Cantor Alex Rieder me sugeriu a dar uma olhada na <a href=\"http:\/\/docs.python.org\/c-api\/index.html\" target=\"_blank\">API Python\/C<\/a>.<\/p>\n<p style=\"text-align: justify;\">Comecei a estudar esta API e outros materiais na web (como <a href=\"http:\/\/elmer.sourceforge.net\/PyCon04\/elmer_pycon04.html\" target=\"_blank\">este<\/a>, baseado em <a href=\"http:\/\/elmer.sourceforge.net\/\" target=\"_blank\">Elmer<\/a>), ver exemplos e mais. Percebi que enviar comandos Python a partir de c\u00f3digo C\/C++ seria f\u00e1cil, entretanto, a captura das sa\u00eddas do interpretador seria o real desafio. Toda esta comunica\u00e7\u00e3o poderia ser simples se Python us\u00e1sse <a href=\"http:\/\/en.wikipedia.org\/wiki\/Standard_streams\" target=\"_blank\">standard streams<\/a> por padr\u00e3o, o que permitiria utilizar <a href=\"http:\/\/api.kde.org\/4.x-api\/kdelibs-apidocs\/kdecore\/html\/classKProcess.html\" target=\"_blank\">kprocess<\/a> para fazer esta ponte. Scilab tamb\u00e9m n\u00e3o usava, o que me levou a implementar este suporte ano passado e possibilitar esta abordagem. Por\u00e9m, em Python eu n\u00e3o poderia fazer isso &#8211; ou seria mais dif\u00edcil de faz\u00ea-lo.<\/p>\n<p style=\"text-align: justify;\">Com pesquisas na internet e alguns estudos, consegui implementar uma classe Python que redireciona as mensagens do interpretador, tanto de sa\u00eddas convencionais quanto de de erro, para uma vari\u00e1vel que depois pode ser recuperada em um tipo string via API Python\/C. <em>Voil\u00e0<\/em>!<\/p>\n<p style=\"text-align: justify;\">Com essa vari\u00e1vel recuperada, posso dizer que o <em>core<\/em> do Python backend para Cantor est\u00e1 funcionando e pronto para implementa\u00e7\u00e3o de mais funcionalidades. Vamos a alguns screenshots:<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2012\/05\/filipesaraiva-20120429T201506-9ttjgmu1.png\" alt=\"\" width=\"656\" height=\"356\" \/><\/p>\n<p style=\"text-align: center;\"><em>Computa\u00e7\u00e3o de um simples contador em Python.<\/em><\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2012\/05\/filipesaraiva-20120501T151658-jqv8wng.png\" alt=\"\" width=\"656\" height=\"356\" \/><\/p>\n<p style=\"text-align: center;\"><em>Cantor + Python + matplotlib realizando um plot externo<\/em><\/p>\n<p style=\"text-align: center;\"><em><\/em><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2012\/05\/filipesaraiva-20120501T151912-8bxdw4n1.png\" alt=\"\" width=\"656\" height=\"356\" \/><em>Mensagem de erro de Python no Cantor<\/em><\/p>\n<p style=\"text-align: justify;\"><em><\/em>Com esta parte implementada, as novas funcionalidades a serem adicionadas ser\u00e3o: adi\u00e7\u00e3o de gr\u00e1ficos no ambiente de trabalho do Cantor; destaque de sintaxe; auto-complete de fun\u00e7\u00f5es pr\u00e9-definidas; e mais. Pretendo dar suporte em especial para as bibliotecas <a href=\"http:\/\/numpy.scipy.org\/\" target=\"_blank\">numpy<\/a>, <a href=\"http:\/\/scipy.org\/\" target=\"_blank\">scipy<\/a> e <a href=\"http:\/\/matplotlib.sourceforge.net\/\" target=\"_blank\">matplotlib<\/a>, que quando adicionadas ao Python tornam-o uma interessante ferramenta para programa\u00e7\u00e3o cient\u00edfica, a exemplo de outras que temos no mundo livre como <a href=\"http:\/\/www.gnu.org\/software\/octave\/\" target=\"_blank\">GNU Octave<\/a>, Scilab, <a href=\"http:\/\/maxima.sourceforge.net\/\" target=\"_blank\">Maxima<\/a>, Sage e outras.<\/p>\n<p style=\"text-align: justify;\">Quem quiser testar, o c\u00f3digo est\u00e1 dispon\u00edvel no <a href=\"https:\/\/projects.kde.org\/projects\/kde\/kdeedu\/cantor\/repository\/show?rev=python-backend\" target=\"_blank\">branch python-backend<\/a>, no <a href=\"https:\/\/projects.kde.org\/projects\/kde\/kdeedu\/cantor\/repository\/\" target=\"_blank\">reposit\u00f3rio do Cantor<\/a>. Mas \u00e9 sempre bom avisar: trata-se de uma vers\u00e3o experimental, e as principais funcionalidades ainda ser\u00e3o adicionadas. O que est\u00e1 funcionando \u00e9 a comunica\u00e7\u00e3o de m\u00e3o dupla C++ &lt;-&gt; Python, o <em>core<\/em> da aplica\u00e7\u00e3o.<\/p>\n<p style=\"text-align: justify;\">Fiquem ligados para maiores informa\u00e7\u00f5es. \ud83d\ude09<\/p>\n<p style=\"text-align: justify;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2012\/04\/logo-camisa-01_wee.jpg\" alt=\"\" width=\"510\" height=\"360\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aconteceu muita coisa no LaKademy e irei reportar tudo em v\u00e1rios posts tem\u00e1ticos. Este \u00e9 sobre o que desenvolvi no sentido t\u00e9cnico, durante o encontro latino-americano dos colaboradores do KDE. Mais posts na tag LaKademy. No Google Summer of Code deste ano submeti o projeto de desenvolvimento de um backend para programa\u00e7\u00e3o cient\u00edfica em Python&hellip;&nbsp;<a href=\"https:\/\/filipe.saraiva.tec.br\/blog\/?p=769\" class=\"\" rel=\"bookmark\">Continue a ler &raquo;<span class=\"screen-reader-text\">Python backend para Cantor nascendo no LaKademy<\/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":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[23,9],"tags":[58,25,48,11,7,26,79,42,41,49,80],"class_list":["post-769","post","type-post","status-publish","format-standard","hentry","category-pessoal","category-software-livre","tag-cantor","tag-ciencia-da-computacao","tag-comunidade","tag-desenvolvimento","tag-eventos","tag-kde","tag-lakademy","tag-planet-mageia-portugues","tag-planeta-psl-pi","tag-planetkde-portugues","tag-python-backend"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1p2Jh-cp","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/769","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=769"}],"version-history":[{"count":2,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/769\/revisions"}],"predecessor-version":[{"id":775,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/769\/revisions\/775"}],"wp:attachment":[{"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=769"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=769"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}