Categorias
Tecnologia

Deploy de sistema Flask no Webfaction

Depois de concluir um sistema simples (em Python Flask) para guardar informações em um banco de dados, eu o publiquei no meu servidor para disponibilizar para o usuário final (deploy).

Foi a primeira vez que fiz um deploy de um sistema desenvolvido em Flask (que é um micro framework web em Python que tenho estudado e utilizado ultimamente, como comentei neste texto).

Tenho uma conta no Webfaction e foi lá que fiz o deploy do sistema. O processo foi baseado em uma mistura de alguns tutoriais achados na internet e também de tentativa e erro. Entretanto todos eles eram baseados em Python 2.7 e o Webfaction já disponibilizou o WSGI com Python 3.4. Depois de algumas alterações para suprir isso e mais pesquisa eu consegui colocar o sistema para funcionar.

O deploy foi feito para rodar com virtualenv, como mostra essa referência que encontrei neste link. O que tive mesmo que mudar da referência foi a forma de executar o arquivo Python que ativa o ambiente virtual (activate_this.py). No Python 2.7 utilizamos execfile() para rodar o script que ativa o ambiente (como você pode ver no Step 6 do artigo que referenciei acima) e precisei substituir por exec() do Python 3.4.

Só consegui descobrir que o erro era esse acompanhando os logs do servidor a cada vez que fazia uma mudança no código e executava um restart no Apache. No caso do Webfaction os logs ficam em /home/<seuUsuario>/logs/user/error_<seuApp>.log.

Estou gostando muito de trabalhar com o Python e com o Flask. Desenvolver com este framework é muito ágil e dinâmico. O Flask tem diversas extensões que facilitam a vida do desenvolvedor e ainda assim, por não virem no código-fonte do framework, te deixam a escolha de usar ou esta ou aquela extensão. O que é muito bom, pois dependendo do escopo do projeto podemos precisar ou não de determinadas extensões.

Neste projeto, que comento neste texto, estou utilizando as extensões Flask-Login (controle de acesso), Flask-SQLAlchemy (ORM) e Flask-WTF (para formulários). Em textos futuros falarei um pouco mais sobre as extensões do Flask.

Categorias
Crônicas Empreendedorismo

O medo da mudança

Tomar uma decisão que muda drasticamente a vida sempre vem acompanhada de uma grande ansiedade e também do medo das consequências dessas mudanças.

O medo em doses controláveis é importante, ele é o responsável por impedir uma pessoa de pular de um prédio, pois tem medo de se machucar. Mas precisamos ter cuidado para que ele não se torne o responsável pela nossa acomodação em uma situação a qual não estamos satisfeitos.

Não ter medo de nada é impossível (e nada saudável), mas ter o controle dele é o que faz com que alguém consiga dar passos em direção ao desconhecido. E é nesse desconhecido que pode estar o verdadeiro caminho, aquele que nos trará felicidade e satisfação.

Acomodar-se é muito fácil. Naturalmente o ser humano tem maior facilidade de “controlar” sua insatisfação do que o seu medo, então a chance de colocarmos a bunda na cadeira e não fazermos nada por medo de perder o que já temos é muito maior do que jogar tudo para o alto e recomeçar num caminho fora do padrão e que, obviamente, irá exigir muito mais de nós mesmos.

Quantas histórias ouvimos de pessoas que tentaram o diferente e perderam tudo? E as que ganharam tudo após essa grande mudança? Sempre existirá a chance de passarmos por muitas dificuldades quando deixamos de lado o estado de acomodação e buscamos um desafio muito maior. Essas dificuldades podem nos derrubar e nos fazer perder tudo, talvez até fazer com que nos arrependamos de ter dado o passo ruma ao desconhecido.

Mas como saber se o desconhecido será uma derrota ou uma vitória se não tomarmos a coragem de matar no peito o medo e experimentar esse caminho? Pode dar certo ou pode dar errado, mas quando lembrarmos que tivemos a coragem necessária para partir nesta jornada sentiremos uma satisfação sem igual.

Vencer ou perder, ambos são pontos de vista. O quanto da vida estaríamos perdendo se ainda estivéssemos acomodados naquela velha cadeira empoeirada esperando…

Categorias
Tecnologia

Annyang para reconhecimento de voz

Nos últimos dias do ano passado comecei um projeto de chatbot para praticar Python e Flask, chama-se Jarvis. A ideia é que sempre que eu tiver um tempo livre eu adicione algumas coisinhas a mais nele.

Desde o começo eu gostaria que o Jarvis ajudasse na prática da lingua inglesa, principalmente na conversação. Foi por isso que comecei a pesquisar meios de fazer reconhecimento de voz (speech recognition) pela web.

A opção mais comum é a Speech API do Google, entretanto ela tem algumas limitações por ter um largo uso entre os desenvolvedores. Então fui pesquisar se existia outra opção. Nessa pesquisa encontrei o Annyang, um projeto em javascript para adicionar comandos de voz ao seus aplicativos web.

Ele é muito fácil de aplicar ao site, basta adicionar o script ao html e declarar os comandos de voz que o seu site irá atender.

<script src="//cdnjs.cloudflare.com/ajax/libs/annyang/1.4.0/annyang.min.js"></script>
<script>
    if (annyang) {
        // Let's define our first command. First the text we expect, and then the function it should call
        var commands = {
            'show tps report': function() {
                $('#tpsreport').animate({bottom: '-100px'});
            }
        };

        // Add our commands to annyang
        annyang.addCommands(commands);

        // Start listening. You can call this here, or attach this call to an event, button, etc.
        annyang.start();
    }
</script>

É importante adicionar uma verificação lógica na variável annyang antes de tudo, porque se o navegador não for compatível com o reconhecimento de voz seus comandos serão ignorados e não causarão erro algum. Isso pode ser feito porque no código fonte do Annyang a variável é iniciada como false antes de fazer a verificação de suporte do navegador e caso o mesmo não tenha este suporte, ela continuará falsa.

Caso você queira adicionar um comando que possa receber qualquer palavra depois (uma variável) continua sendo muito simples: basta adicionar um asterisco antes do nome da variável e declará-la como parâmetro na função anônima do comando.

var commands = {
    'tell me *chat' : function(chat) {
        $('#question').val(chat);
        $('#the-form').submit();
    }
}

No exemplo acima mostro como estou usando no projeto Jarvis. Basta o usuário pronunciar ‘tell me‘ e a frase que gostaria de dizer em inglês, então o sistema preenche o campo do formulário com a frase e em seguida executa um submit, fazendo com que o Jarvis responda em seguida.

Caso você queira ver o que está acontecendo enquanto ele tenta reconhecer o que você está dizendo, adicione um annyang.debug(); antes do annyang.start();. Isso fará com que ele apresente no seu console Javascript o que está sendo reconhecido em tempo real. Isso é prático porque ele nem sempre consegue reconhecer e você consegue perceber o que pode estar acontecendo.

Opinião

O Annyang funciona muito bem para aquilo que se propõe, que é o reconhecimento de comandos de voz, entretanto nem sempre ele consegue reconhecer uma frase maior, diferente da Speech API do Google, talvez por problemas com a entonação ou a pronúncia. Ainda não experimentei ele com um microfone melhor, apenas com o do meu notebook, e talvez isso faça uma boa diferença na porcentagem de sucesso. Mas ele é tão fácil de implementar que vale a pena experimentar e se divertir com os comandos de voz.

No caso do Jarvis ele não fica tão prático por causa da necessidade de um comando antes de cada frase e para a prática de conversação isso é um pé no saco, mas mesmo assim vou mantê-lo no projeto por enquanto.

Observação: O Annyang não irá funcionar com arquivos locais (acessando via file:///) pois o navegador (pelo menos o Google Chrome) irá bloquear a tentativa do script de acessar o microfone. É preciso testá-lo com um servidor http.

Categorias
Crônicas Empreendedorismo

Os caminhos e o rebanho

O mundo nos dá tantas opções que as vezes fica difícil escolher uma direção a seguir. O problema é que nós mesmos não percebemos o tanto de caminhos que podemos escolher e acabamos seguindo o rebanho, nos deixando ser levados pela vida.

Gosto muito de um exemplo de um amigo meu, ele entrou em uma faculdade e cursou até o final. Estagiou e experimentou o mercado. Descobriu que definitivamente não era aquilo que gostaria de fazer para o resto da vida, então simplesmente iniciou uma outra faculdade e começou tudo de novo, sem medo de “perder tempo”.

Muitos podem dizer que ele tem grana para poder se dar ao luxo de escolher. Não é o caso, ele simplesmente trabalha e paga seu curso.

A questão é que podemos sim recomeçar. Basta olhar ao nosso redor e perceber a quantidade de opções que existem para escolhermos. Depois é ter força de vontade e dedicação para seguir no caminho escolhido.

Devemos começar parando para pensar e analisando a nós mesmos para nos conhecermos um pouco mais. Buscar um propósito naquilo que vamos fazer, não apenas os ganhos materiais e sim buscar a verdadeira motivação para estar seguindo por este ou aquele caminho.

Lembrando, sempre que seguirmos nossa própria vontade vamos causar uma reação ruim das outras pessoas, pois estamos nos desgarrando do rebanho e somente nós vamos saber os reais motivos disso. Sempre haverão pessoas tentando nos desanimar e nos atrair para o caminho “certo”. Por isso a força de vontade e a dedicação são tão importantes.

São essas mesmas pessoas que irão elogiar e “puxar o saco” daquele que se desgarrou e acabou “se dando bem” na vida.