Categorias
Tecnologia

Chatbot com Flask e PyAIML

Continuo meus estudos com Flask, para brincar um pouco com o que estou aprendendo resolvi fazer um chatbot utilizando a biblioteca PyAIML e os arquivos AIML da A.L.I.C.E. AI Foundation.

Pra quem não sabe, os arquivos AIML (Artificial Intelligence Markup Language) são marcações baseadas em XML para inteligência artificial. Usando a biblioteca PyAIML fica muito simples fazer um chatbot em Python. Mas eu queria fazê-lo via web e foi aí que o Flask entrou.

Utilizei o Flask apenas para lidar com os requests e responses via web. Ou seja, ele recebe uma pergunta vinda do navegador e devolve uma resposta do bot.

Para ver o código-fonte completo do meu chatbot, acesse meu github.

Vendo o código-fonte, percebe-se que na raiz temos apenas o diretório app e o lib, além do arquivo run.py, que roda o servidor. Dentro do diretório app temos os arquivos do Flask: __init__.py e o views.py. No diretório lib está a biblioteca PyAIML e os arquivos AIML, importados da A.L.I.C.E. AI Foundation. Nestes arquivos eu fiz pouquíssimas alterações para o funcionamento básico do Jarvis, nome que dei ao meu chatbot.

Dentro do arquivo app/__init__.py eu importo o Flask e biblioteca PyAIML, para poder utilizá-la no arquivo app/views.py. Perceba que também importo o arquivo brain.brn, que é a “compilação” dos arquivos AIML, ou seja, é o cérebro do bot. Se ele não existir, o Kernel da biblioteca PyAIML vai criá-lo. Exemplo nas linhas abaixo, retiradas do arquivo app/__init__.py.

brainfile = os.path.join('lib', 'pyaiml', 'brain.brn')
aimlfiles = os.path.join('lib', 'pyaiml', 'aiml', 'std-startup.aiml')

k = aiml.Kernel()
if os.path.isfile(brainfile):
	k.bootstrap(brainFile = brainfile)
else:
	k.bootstrap(learnFiles = aimlfiles, commands = 'load aiml b')
	k.saveBrain(brainfile)

Uma pequena observação, estou importando os arquivos com os.path.join() para que não precise me preocupar se estou em sistema operacional Windows ou em Unix-based. Isso foi necessário porque no Windows as barras que separam os arquivos são inversas às dos sistemas baseados em Unix (como Linux e MacOS).

No arquivo app/views.py encontramos as definições de rotas (@app.route()) e definimos o que cada endereço web vai fazer no sistema. No caso, temos o / ou /index, que apenas mostra o template básico, através do método render_template do Flask, e temos o /talk, que recebe a “pergunta” do browser e envia a resposta transformada em um objeto JSON com o método jsonify do Flask. Os outros métodos são apenas handlers para os erros 404 (página não encontrada) e 500 (erro interno do servidor). Veja o index e o talk no exemplo abaixo, retirado do arquivo app/views.py.

@app.route('/', methods=['GET'])
@app.route('/index', methods=['GET'])
def index():
    return render_template('index.html')

@app.route('/talk', methods=['GET'])
def talk():
    question = request.args.get('question')
    answer = k.respond(question)
    return jsonify(question=question, answer=answer)

Lembrando que quando chamamos k.respond() no método talk() estamos chamando a biblioteca PyAIML para fazer o trabalho pesado por nós. Já a importamos no arquivo app/__init__.py e a passamos para a variável app.

É importante lembrar que aquilo que fomos utilizar em um programa Python tem que ser importado. Por isso é comum vermos os comandos import no começo dos arquivos. Por exemplo, no arquivo app/views.py eu importei o render_template, o request e o jsonify do Flask e o app e k (que contem a biblioteca PyAIML) do nosso app iniciado no arquivo app/__init__.py.

from flask import render_template, request, jsonify
from app import app, k

Com a biblioteca PyAIML fazendo a interpretação dos arquivos AIML, o Flask tinha pouquíssimo trabalho pela frente. Com apenas alguns poucos métodos escritos eu consegui rodar o aplicativo web. Isto é algo que tem me agradado muito no Python e no Flask.

Utilizar o PyAIML também foi simples, mas para entender como personalizar o bot (mudar o nome, nascimento, preferências, etc) eu levei um tempinho. Precisava entender que os “predicates” do bot precisavam ser mudados no arquivo lib/pyaiml/aiml/Kernel.py da biblioteca. Para facilitar, criei um arquivo chamado lib/pyaiml/aiml/BotPredicates.py e o importei no Kernel.py, como mostro abaixo.

import BotPredicates
# Set up the bot predicates 
self._botPredicates = BotPredicates.bot

Acabou sendo mais simples do que eu imaginava criar o Jarvis. Agora vou continuar brincando um pouco com ele. Quero adicionar reconhecimento de voz para que o usuário possa conversar com o Jarvis. Também quero que o usuário se registre com login e senha, para que o Jarvis já conheça seus amigos quando eles vierem conversar. A medida que eu for desenvolvendo essas novas funcionalidades vou postando algumas notas por aqui.

Categorias
Tecnologia

Aprendendo Python com Flask

Sou programador PHP desde 2001 e trabalhei somente com essa linguagem por muito tempo. Em 2012 eu tive uma pequena experiência, graças a um colega de trabalho, com Python através do framework para web Django. Comecei a fazer algumas aplicações simples para aprender. Mas logo após deixar a empresa que trabalhava, acabei parando por ali mesmo.

Este ano resolvi voltar a aprender o Python, gosto muito dessa linguagem e gostaria de ser proficiente nela. Como tudo que aprendo acaba sendo de forma autodidata, fui atrás de alguns tutoriais para voltar a estudar.

Para recomeçar, escolhi um tutorial muito interessante sobre Flask, um microframework para web escrito em Python. O tutorial chama-se The Flaks Mega Tutorial e aborda praticamente tudo que você precisa para fazer uma pequena aplicação web com Flask. Eu recomendo.

O Python e o Flask

Desde o primeiro contato que tive com Python, em 2012, eu achei sua sintaxe incrível. É muito simples e “readable“. Foi uma das primeiras coisas que me chamou atenção nessa tecnologia.

Quando você programa por muito tempo em uma linguagem específica, você acaba ficando viciado em certas coisas específicas dela. É muito gostoso poder experimentar uma forma diferente de programar e a sintaxe do Python deixa tudo mais interessante ainda.

Já o Flask tem me parecido extremamente prático para construir aplicações. Mas ainda estou muito no início para falar mais sobre ele. Só posso dizer que estou gostando bastante das facilidades que ele oferece.

Outra coisa que tem me chamado bastante a atenção com o Python são as empresas que tem migrado de outras linguagens para ele por conta da performance. Assisti diversas palestras e li publicações sobre empresas fazendo essa migração, mas não tenho informações o suficiente sobre isso para falar mais, por enquanto.

Vou continuar meus estudos e o que achar interessante vou publicando por aqui.

Categorias
Crônicas Empreendedorismo

Por que um ambiente de trabalho mais relaxado é mais produtivo?

Estar de bom humor e descansado faz toda a diferença na produtividade de uma pessoa. O site da Revista Galileu publicou uma notícia trazendo dados de uma pesquisa científica que mostra como funciona nosso cérebro no momento em que temos uma boa ideia.

De toda a explicação sobre a pesquisa, a parte mais interessante, e a qual dou enfoque nesse texto, é o último parágrafo.

Os cientistas avisam – ou dão a dica – de que bom humor e mentes descansadas podem ser fatores importantes na hora daquele “Eureca!”. Para concluir, o autor diz: “Existe um processo importante de consolidação da memória que só acontece quando dormimos. Elas são transformadas e podem trazer detalhes escondidos para situações no dia a dia. Dormir bastante é ótimo para ter insights”.

Na área de tecnologia, por exemplo, passamos o tempo todo buscando soluções para os problemas do usuário e para isso precisamos de boas ideias. É um trabalho técnico, mas que exige muita criatividade.

Isso não se resume somente à area de tecnologia. Como um gestor espera que o membro de sua equipe seja pró-ativo, traga ideias inovadoras sobre como executar seu trabalho, se o mesmo não tem um ambiente que facilite esse processo?

É por isso que, cada vez mais, empresas com ambientes inovadores e premiados pela qualidade que proporcionam aos seus trabalhadores tem apresentado ótimos resultados ano após ano. Sentir-se bem no local de trabalho faz toda a diferença no resultado que o colaborador irá gerar para a empresa.

Infelizmente, muitas empresas ainda não entenderam que seu maior recurso não é a tecnologia ou o método que empregam, mas sim as pessoas que a estão empregando. Pressionar o colaborador por resultados sem nem sequer se importar se ele está bem é um tiro no pé para qualquer gestor.

Eu acredito que, em algumas áreas, a gestão de colaboradores deve ser repensada e deve-se usar o exemplo dos cases de sucesso que cada vez mais aparecem por aí. Já temos casos de empresas brasileiras dando o exemplo, como a Chaordic de Florianópolis, que em 2013 ganhou prêmio Great Place to Work de melhor empresa para trabalhar em Santa Catarina.

Os exemplos estão aí, basta seguí-los. Se não for pela motivação dos colaboradores e a vontade que tem de trabalhar nestes locais, que seja pelos resultados financeiros que elas apresentam.

Categorias
Crônicas

Eu e a programação

Quando eu tinha por volta de 16 anos, escrevi minha primeira linha de código. Foi na linguagem de programação PASCAL e fazia parte da aula de Lógica de Programação do curso técnico de informática que eu havia acabado de ingressar, por falta de opção, de certa forma, na Escola Técnica Federal de Santa Catarina.

Vou contar um pouco sobre como foi a experiência que me levou à esse momento. Quando passei na prova para a ETFSC, a ideia era estudar o ensino médio sem precisar pagar mensalidade, afinal a situação financeira da família já era precária há alguns anos e, sendo o mais novo de quatro irmãos, as opções eram muito poucas. Conseguir vaga no ensino médio em escolas públicas naquele ano estava complicado, então dependia apenas de mim passar na prova.

Depois disso, a ideia de sair do ensino médio já com alguma formação e podendo estagiar para ter alguma renda e ajudar em casa também me atraiu bastante. O primeiro ano (ou as duas primeiras fases) na ETFSC eram de ensino médio comum, mas após a terceira você ingressava no curso técnico do seu interesse, que poderia lhe propiciar uma oportunidade de estágio remunerado.

O problema é que entrei num ano divisor de águas, a ETFSC estava virando CEFET/SC e o ensino técnico seria separado do médio. Entretanto, na exata fase em que entrei, a direção não sabia o que fazer. Eram obrigados a nos prover ensino médio completo dentro do período padrão de três anos (não mais apenas o primeiro ano), mas também tínhamos direito adquirido de cursar o técnico a partir da terceira fase.

Então, uma escolha nos foi oferecida: começar o técnico na terceira fase (início do segundo ano) de forma concomitante com o ensino médio (períodos opostos) ou aguardar o término dos três anos (ou seis fases) do médio para somente depois iniciar o técnico.

Imagine que um adolescente de 15 anos precisa fazer essa escolha. Eu queria ganhar tempo, então escolhi fazer concomitância. O problema é que teria que escolher rapidamente em qual curso iria ingressar para cursar ao mesmo tempo que o ensino médio.

Segurança do trabalho, mecânica, eletrônica, eletrotécnica, edificações ou informática?

Com uns 13 anos eu aprendi um pouco de HTML com uma fotocópia de um livrinho básico que achei em casa, provavelmente de algum curso que meu irmão mais velho tinha feito e até que gostei de brincar com páginas da internet. Então pensei, vou entrar para informática!

Após três meses de aula de “Empreendedorismo”, iniciamos as aulas técnicas do curso de informática. Então chego novamente ao PASCAL da classe de Lógica de Programação.

Lembro de como foi a sensação de escrever comandos simples em texto e ver o computador executá-los. Para uma pessoa que sempre gostou de ver resultados rápidos como eu, aquilo ali era uma maravilha. Escreva, execute e as coisas acontecem. Naquele momento eu descobri o poder da programação… e estamos falando de um algoritmo extramente simples.

Passei a adorar os exercícios de Lógica de Programação, só achava insuportável ter que escrevê-los no papel durante as provas. Queria ver o resultado, e no papel nada acontecia. Depois disso ainda tive aulas de hardware e de redes. Não gostava de nada. Banco de dados eu até engolia, mas o que eu queria era o imediatismo de escrever e ter o resultado ali na hora.

Sendo um adolescente que queria apenas ficar com notas altas o suficiente para passar, eu matava muita aula para jogar futebol na quadra da escola. Tentando, sem sucesso, me justificar: imagine quão insuportável era ter que estudar de manhã e de tarde para um rapaz de 16 anos. Eu queria era me divertir!

Nessas “saídas” eu acabei perdendo conteúdo importante e, por sorte, no trabalho final do curso eu tinha dois grandes amigos como membros do grupo e me ajudaram a entender o sistema que entregamos para poder apresentar melhor. Infelizmente, não tive tanta participação na criação do código do sistema, que, nesse caso, foi desenvolvido com PHP/MySQL.

Antes de terminar o curso, eu já estava estagiando para ganhar aquele dinheirinho e ajudar minha família. Na época, 120 reais por mês. Estudava de manhã e à tarde e estagiava à noite, o que, para a vitalidade de um adolescente, não era nada demais.

Meu maior hobby, desde muito novo, era fazer histórias em quadrinhos. E durante o início do curso, um amigo meu se ofereceu para publicar minhas hqs no seu site. Eu amei aquilo, estava tendo resultado com meus quadrinhos pela primeira vez.

Ao terminar o curso, eu fiquei com o código fonte da aplicação PHP que havíamos apresentado. Minha vontade de publicar minhas hqs era tão grande, que aprendi a programar de verdade em PHP apenas para criar um site e postar minhas histórias por lá. Eu o nomeei Macro Vision Studio.

Mais uma vez, eu tinha motivo para programar: ver o resultado. Eu publicava “webcomics” antes mesmo de   termo. Cheguei a ter um pequeno público de fãs e adorava responder aos e-mails deles.

Em tudo isso, a programação era apenas um meio de atingir um resultado rápido. Perceba, nunca foi o fim, mas o meio. Hoje, olhando para trás com uma visão mais madura, eu percebo o quanto isso foi um desperdício de oportunidade. Mas convenhamos, para um adolescente no final dos anos 90 não podemos exigir tanto, não é?

Durante os próximo anos, o desenvolvimento web continuou sendo um meio para mim. Sempre quis ter outras atividades que me gerassem renda, atividades que eu considerava como “trabalhar com o que gosto”. Tentei ilustração, arte marcial, música, design… em todos eles, de alguma forma, a programação web estava lá. Era um sistema para gerenciar alunos, um site para publicar quadrinhos, etc.

Depois de muito tempo percebi que eu tinha ficado melhor em programar e continuava sempre ocupando vagas em empresas nessa área, entretanto, sempre querendo sair para “trabalhar com o que gosto”.

Eu insisti muito em não trabalhar com programação web e tecnologia, mas elas nunca desistiram de mim. Estiveram sempre presentes e foram pacientes, aguardando o momento em que eu iria perceber que fomos feitos um para o outro.

Desde muito cedo eu já usava a internet para guardar arquivos e não pendrives ou CDs. Eu já publicava meu conteúdo na web em vez de em fanzines, como os outros artistas independentes faziam. Eu sempre me inscrevi em todos os aplicativos web que apareciam, porque adorava ver como funcionavam.

Ela estava lá o tempo todo e eu já estava “trabalhando com o que gosto” há muito tempo e nem sequer percebia, porque insistia que devia procurar um trabalho menos convencional. Perceber isso faz minha vida começar a andar para frente.

Nos últimos tempos, minha paixão tem sido o empreendedorismo e já faz alguns anos que tenho o sonho de ter minha própria empresa. Mas, assim como com o trabalho, queria construí-la a partir de algo que eu gostasse muito. Me conhecer o suficiente para perceber o quanto eu gosto de tecnologia e desenvolvimento web me abriu ainda mais portas para realizar esse sonho. Não existe casamento melhor nos dias de hoje do que empreendedorismo e tecnologia!

Escrevi essa pequena história apenas para mostrar o quão importante é se conhecer e quero terminar com uma frase de um livro de empreendedorismo que significou muito para mim nesse processo de autoconhecimento profissional:

Errar muitas vezes, tentando acertar, nem sempre significa sinal de persistência. Na verdade, pode ser um aviso gritante de que você precisa mudar de estratégia, com rapidez.

Categorias
Vídeo

Tutorial – Os passos para criar uma ilustração

Quais são os passos para criar uma ilustração? Neste vídeo falo rapidamente sobre o passo-a-passo da criação de um desenho, por onde começar e no que prestar a atenção em cada momento.

Deixe seu comentário com a sua dúvida ou sugestão para o próximo vídeo!