Tag: design

  • IBM Watson – Como Criar um Chatbot (com PHP e jQuery)

    IBM Watson – Como Criar um Chatbot (com PHP e jQuery)

    Inteligência artificial é um tema que está em discussão constante no novo milênio. O uso de chatbots tem sido cada vez mais utilizado em diversos ambientes, seja para atendimento, monitoramento, suporte ou outras aplicações diversas. Designers de Interação e Programadores tem usado cada vez mais essas tecnologias para poder criar uma experiência melhor e mais dinâmica para o usuário.

    Dentro da área da computação cognitiva, uma das empresas que está em muita evidência no mercado é a IBM, com sua tecnologia Watson.

    A tecnologia Watson é uma amálgama de serviços de inteligência artificial que permite ao desenvolvedor criar plataformas de comunicação automatas com seus usuários. Para isso, a IBM disponibiliza diversas APIs de comunicação com determinados serviços. Para nosso exemplo de chatbot usaremos o serviço de Conversação do Watson.

    Criar um chatbot com o Watson é bem mais simples do que parece. Porém, devemos deixar claro que a proposta deste tutorial é ser básico, ser um ambiente de entrada, simplificado porém funcional para o desenvolvedor ou designer interessado nesse tipo de tecnologia.

    Atenção, você precisa de um servidor que possa ser autenticado na internet. Ou seja, não adianta testar de Xampp ou Wampp, você precisa testar ao menos de uma hospedagem compartilhada.

    Preparando o Ambiente

    Primeiramente você vai precisar de uma conta na Bluemix. A Bluemix é uma plataforma em nuvem de projetos da Big Blue (apelido dado a IBM pelo mercado). Para isso, basta entrar no site da empresa e clicar em Teste Gratuito 30 Dias.

    Depois disso, siga as instruções para você preencher os seus dados básicos.

    Após o preenchimento de seus dados, será pedido para você criar uma organização. Por algum motivo, você não verá a opção de América do Sul referente ao local, todavia você pode continuar selecionando SUL DOS EUA que não vai impedir o funcionamento do chatbot. Simplesmente siga as demais opções até chegar ao final.

    Cadastro no Bluemix

    Assim que você finalizar, é possível ver uma área para criar Apps. Por hora você pode ignorar completamente isso. À primeira vista, o Bluemix parece ser um pouco difícil de navegar e encontrar algo por conta da diversidade de opções e APIs disponíveis.

    No canto superior esquerdo você vai ver um menu hambúrguer. Clique nesse menu e selecione a opção Serviços. Lá, você vai ver a opção Watson.

    Como nosso tutorial é sobre chatbot, devemos criar um serviço do tipo Conversação. Clique no botão Criar serviço Watson e, na página que se abrirá, selecione a opção Conversation. A configuração do serviço é bem similar ao cadastro do próprio Bluemix.

    Criar serviço de conversação Watson

    Configuração Bluemix

    Esse serviço possui versões Lite (que é gratuita), Padrão e Premium (que precisa de consulta). Na versão Lite, que estamos usando para este tutorial, você possui até 10 mil requisições por mês e não poderá salvar os logs dos chats. Porém a versão padrão não é cara, cada requisição é uma fração inferior a metade de um centavo, o que é um valor aceitável para um sistema corporativo.

    Preço Conversação Watson

    Agora é necessário “ensinar” ao Watson o que você quer que ele responda. Apesar dele já possuir uma inteligência base interna, que reconhece erros e contextos, você precisa treina-lo para que ele dê as respostas corretas para determinadas perguntas.

    Para iniciar, você precisa criar um novo Workspace (por enquanto, pode ignorar o espaço de trabalho de exemplo).

    Criar espaço de trabalho

    Atenção ao idioma do espaço de trabalho que você está criando.

    Treinando o Watson

    Uma vez criado o espaço de trabalho (Workspace), iniciaremos o processo de treinamento do Watson. Para isso, você deve primeiro criar um intent. Um intent é uma intenção de comunicação, ou seja, é um conjunto de interações padronizadas que o usuário poderá fazer com o chatbot.

    Cada intenção que for criada precisa ter pelo menos 5 exemplos de interações para poder funcionar. A partir daí o Watson também irá entender perguntas similares. Não é necessário se preocupar com muitas variações. A tecnologia é inteligente o suficiente para trabalhar com diferenças básicas, erros de digitação e compreender contextos. Em nosso exemplo, vamos criar uma intenção com o nome de #Saudações e preencher com algumas interações básicas de saudações.

    Uma vez criada as intenções desejadas (em nosso exemplo criamos apenas uma), você deverá criar as possíveis respostas para essas intenções e suas variações. Para isso, você deve ir na área de Dialog.

    Um diálogo (Dialog), como o nome já diz, consiste em um conjunto de interações e condições dessas interações, com uma resposta, que pode ou não resultar em um feedback para encerrar um processo de comunicação.

    No Watson, o diálogo é organizado em um sistema de árvores, que possui uma lógica de nós e subnós. Para nosso exemplo, vamos criar um novo nó para responder a intenção de saudação que criamos anteriormente. Clique em Add node.

    Após dar um nome ao nó, você deve colocar o que o bot irá reconhecer. A intenção é representada pelo símbolo de hash (#). Então, basicamente diz: Se o bot reconhecer a intenção #Saudação, então responda com:

    Você pode colocar quantas respostas você quiser. Quanto mais respostas você colocar, maior a quantidade de diálogo possível, deixando o ambiente de comunicação mais natural e otimizando o aprendizado.

    Como opções adicionais você pode colocar as respostas em forma sequencial ou aleatória. Ainda é possível criar condições específicas de contextos ou aguardar por respostas específicas à retóricas do chatbot.

    Com tudo isso preenchido, você já pode testar o chatbot. O próprio ambiente do bluemix possui uma área para testes. Clique no ícone com o balãozinho no canto superior direito e experimente o diálogo que você acabou de criar.

    Implementando o Back-end

    A API do Bluemix funciona através de comunicação cURL Essa comunicação é feita a partir de envios de informações via método POST e mediante autorização de acesso. Por isso, vamos precisar de algumas informações básicas do serviço de comunicação que criamos.

    Caso você queira ver outros exemplos que usam cURL, acesse nosso tutorial sobre preenchimento automático de formulário com o CNPJ ou o tutorial sobre preenchimento automático de endereço a partir do CEP.

    Então, antes de criamos o código, você vai precisar das seguintes informações:

    • Workspace ID
    • Username
    • Password

    O Workspace ID pode ser adquirido lá naquela tela de criação/seleção de ambientes de trabalho (Workspaces). Basta clicar no botão de menu, no canto superior direito do cartão referente ao workspace que criamos, em seguida clicando em View Details.

    Pegar Código do Workspace no Watson

    Para conseguir o login e senha do serviço de conversação, volte a tela onde você cria os serviços e vá na opção Credenciais de Serviço. Nessa área você pode visualizar ou criar novas credenciais, conseguindo assim o username e password que vamos precisar mais adiante.

    ATENÇÃO
    A IBM mudou a forma de autenticação. Agora, ao invés de você ter acesso ao username e password, as novas conexões usarão a autenticação AIM e não mais a autenticação por username  password. Mais detalhes, veja a documentação: https://console.bluemix.net/apidocs/assistant.

    Agora vamos ao código.

    A API REST do Watson, como dito acima, funciona a partir de comunicação cURL e vai retornar um json completo com todas as informações para a comunicação. Para criarmos uma conversa simples, precisamos definir o código. Fique atento ao que precisa ser preenchido.

    Exemplo usando PHP

    conversa.php

    Como o retorno é json, precisamos definir a página como text/plain, para evitar qualquer renderização incorreta.

    header("Content-Type: text/plain");

    Iremos definir então as informações que pegamos acima através das configurações do serviço de conversação. Lembre-se de substituir o código abaixo por seus dados.

    $workspace = "d5b7e381-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
    
    $apikey = "xxxxxxxxxxxxxxxxx";
    
    /*Antiga autenticação
    $username = "cd27b34f-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
    $password = "Klxxxxxxxx";
    */

    Precisamos agora capturar o texto que será enviado para o servidor do Watson. Para testes usaremos o $_REQUEST, do PHP. Por segurança, quando for trabalhar em modo de produção, troque para $_POST.

    $texto = $_REQUEST["texto"];

    Agora é necessário definir um identificador. Para manter o contexto de conversa, e o Watson saber que está conversando ainda com a mesma pessoa, é necessário passar um identificador. Esse identificador deverá ser único por conversa. Caso você esteja implementando em um sistema de gestão, por exemplo, você pode usar o nome de usuário, id, e-mail, ou algum outro tipo de identificação única.

    No nosso teste criaremos uma hash única md5 e a armazenaremos em uma sessão. Dessa forma, garantimos a criação temporária de um identificador único funcional. Nosso bloco então ficará:

    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
    if(isset($_SESSION["identificador"])){
    	$identificador = $_SESSION["identificador"];
    }else{
    	$identificador = md5(uniqid(rand(), true));
    	$_SESSION["identificador"] = $identificador;
    }

    A URL da API REST deverá ser concatenada com o Workspace e o método que você está chamando. Dentro do gateway de conversação há vários métodos, desde status a tratamento de workspaces e diálogos. Através da documentação, você poderá explorar todos os métodos acessíveis para o Watson: https://www.ibm.com/watson/developercloud/conversation/api/v1/.

    Em nosso exemplo básico, entretanto, iremos utilizar apenas o método message. É importante lembrar que é necessário adicionar a data da versão da API como parâmetro para que possa funcionar.

    $url = "https://gateway.watsonplatform.net/conversation/api/v1/workspaces/" . $workspace;
    $urlMessage = $url . "/message?version=2017-05-26";

    Para enviar os dados para o Watson, precisamos criar uma pequena string json. Como em nosso exemplo só precisamos enviar o texto e o identificador, podemos simplesmente concatenar o texto, deixando-o pronto para envio.

    $dados  = "{";
    $dados .= "\"input\": ";
    $dados .= "{\"text\": \"" . $texto . "\"},";
    $dados .= "\"context\": {\"conversation_id\": \"" . $identificador . "\",";
    $dados .= "\"system\": {\"dialog_stack\":[{\"dialog_node\":\"root\"}], \"dialog_turn_counter\": 1, \"dialog_request_counter\": 1}}";
    $dados .= "}";

    Como estamos tratando de json, devemos especificar o cabeçalho do tipo de dados que estamos enviando.

    $headers = array('Content-Type:application/json');

    Agora começa a comunicação. Para acessar a API, algumas exigências são feitas. É necessário ser enviado em método POST um json e ser uma comunicação segura, com identificação de usuário e senha. O bloco referente a comunicação ficará então:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $urlMessage);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $dados);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    //curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); Autenticação antiga
    curl_setopt($ch, CURLOPT_USERPWD, "apikey:$apikey")
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    $retorno = curl_exec($ch);
    curl_close($ch);

    Por fim, para facilitar a leitura, vamos imprimir o json na tela com uma organização mais legível para um ser-humano.

    $retorno = json_decode($retorno);
    echo json_encode($retorno, JSON_PRETTY_PRINT);

    Com isso já poderemos ter uma resposta json, que, ao passar o texto, retornará algo similar como na imagem abaixo:

    O código back-end completo fica (com comentários para ajudar a compreensão):

    <?php
    //Garantir que seja lido sem problemas
    header("Content-Type: text/plain");
    
    //Worskspace
    $workspace = "d5b7e381-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
    
    /**
    Antiga Autenticação
    //Dados de Login
    $username = "cd27b34f-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
    $password = "Kl8XXXXXXXXX";
    **/
    $apikey = "xxxxxxxxxxxxxxxxx";
    //Capturar Texto
    //Use $_POST em produção, por segurança
    $texto = $_REQUEST["texto"];
    
    //Verifica se existe identificador
    //Caso não haja, crie um
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
    if(isset($_SESSION["identificador"])){
    	$identificador = $_SESSION["identificador"];
    }else{
    	//Você pode usar qualquer identificador
    	//Você pode usar ID do usuário ou similar
    	$identificador = md5(uniqid(rand(), true));
    	$_SESSION["identificador"] = $identificador;
    }
    
    //URL da API
    //(deve ser passado o método e a versão da API em GET)
    $url = "https://gateway.watsonplatform.net/conversation/api/v1/workspaces/" . $workspace;
    $urlMessage = $url . "/message?version=2017-05-26";
    
    //Dados
    $dados  = "{";
    $dados .= "\"input\": ";
    $dados .= "{\"text\": \"" . $texto . "\"},";
    $dados .= "\"context\": {\"conversation_id\": \"" . $identificador . "\",";
    $dados .= "\"system\": {\"dialog_stack\":[{\"dialog_node\":\"root\"}], \"dialog_turn_counter\": 1, \"dialog_request_counter\": 1}}";
    $dados .= "}";
    
    //Cabeçalho que leva tipo de Dados
    $headers = array('Content-Type:application/json');
    
    //Iniciando Comunicação cURL
    $ch = curl_init();
    //Selecionando URL
    curl_setopt($ch, CURLOPT_URL, $urlMessage);
    //O cabeçalho é importante para definir tipo de arquivo enviado
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    //Habilitar método POST
    curl_setopt($ch, CURLOPT_POST, 1);
    //Enviar os dados
    curl_setopt($ch, CURLOPT_POSTFIELDS, $dados);
    //Capturar Retorno
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    //Autenticação
    //curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); Autenticação antiga
    curl_setopt($ch, CURLOPT_USERPWD, "apikey:$apikey")
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    //Executar
    $retorno = curl_exec($ch);
    //Fechar Conexão
    curl_close($ch);
    
    //Imprimir com leitura fácil para humanos
    $retorno = json_decode($retorno);
    echo json_encode($retorno, JSON_PRETTY_PRINT);
    
    ?>

    Código do Front-End

    Agora precisamos fazer a interação do usuário com o chatbot. Para isso, precisamos criar uma área do chat e o formulário que enviará os dados.

    <div id="watson" class="watson">
    	<div class="mensagens">
    		<div class="area" id="chat">
    		</div>
    	</div>
    	<form id="mensagem" class="mensagem">
    		<input type="text" id="texto" name="texto" placeholder="Digite sua mensagem"/>
    		<button type="submit">Enviar</button>
    	</form>
    </div>

    Com a área de chat criada, está na hora de adicionarmos os scripts necessários para fazer a comunicação com o back-end. Para facilitar, usaremos o método ajax do jQuery. Atenção aos comentários no código abaixo, pois eles explicam para quê serve cada linha.

    <!--Importar jQuery. Retire caso sua página já faça a importação. -->
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <script type="text/javascript">
    //Submeter Formulário
    $("#mensagem").submit(function(){
    	//Caso o usuário envie uma mensagem vazia
    	if($("#mensagem #texto").val() === ""){
    		//Adiciona na área de Chat a mensagem enviada pelo usuário
    		$("#chat").append("<div class=\"texto usuario\">...</div>");
    		
    		//Faz um scroll para a mensagem mais recente, caso necessário
    		$(".mensagens").animate({scrollTop: $("#chat").height()});
    		setTimeout(function(){
    			//Adiciona uma resposta padrão afirmando que o usuário deixou o campo vazio
    			$("#chat").append("<div class=\"texto chatbot\">Você precisa digitar alguma coisa para prosseguir.</div>");
    			//Faz um scroll para a mensagem mais recente, caso necessário
    			$(".mensagens").animate({scrollTop: $("#chat").height()});
    		},1000);
    		return false;
    	}
    	
    	//Inicia método AJAX
    	$.ajax({
    		//Substitua o caminho da URL pelo que você salvou o arquivo de backend
    		url: "/pasta/conversa.php?texto=" + $("#mensagem #texto").val(),
    		dataType: 'json', // Determina o tipo de retorno
    		beforeSend: function(){
    			//Adiciona a mensagem de usuário à lista de mensagens.
    			$("#chat").append("<div class=\"texto usuario\">" + $("#mensagem #texto").val() + "</div>");	
    		},
    		success: function(resposta){
    			//Limpa o que o usuário digitou e foca no input para próxima interação.
    			$("#mensagem #texto").val("");
    			$("#mensagem #texto").focus();
    			
    			//Caso haja um erro, o Watson retornará a mensagem de erro ao usuário
    			//Basta ler o objeto error para o usuário.
    			if(resposta.error){
    				$("#chat").append("<div class=\"texto chatbot\">" + resposta.error + "</div>");
    				return false;
    			}
    			
    			//Colocar a resposta do Watson para o usuário ler
    			//A mensagem de texto pode ser lida a partir da lógica
    			//do json de exemplo da imagem no post
    			var mensagemChatbot  = "<div class=\"texto chatbot\">";
    			mensagemChatbot		+= resposta.output.text[0];
    			mensagemChatbot		+= "</div>";
    			setTimeout(function(){
    				$("#chat").append(mensagemChatbot);
    				$(".mensagens").animate({scrollTop: $("#chat").height()});
    			},1000);
    		}
    	});
    
    	return false;
    });
    </script>

    Observe que no código acima existe um método setTimeOut que ocorre sempre antes de adicionar a resposta do Watson. Isso é feito por uma decisão de experiência do usuário.

    Uma resposta muito rápida pode causar uma confusão de interpretação e estranhamento.

    Quando você está conversando com alguém, a tendência é, ao enviar uma mensagem, esperar que a pessoa ao menos pense na resposta e digite antes de responder. Um pequeno atraso de um segundo na resposta é um tempo mínimo esperado para dar uma maior naturalidade a conversa e ainda permitir que o usuário se prepare para receber uma mensagem. Essa é uma decisão puramente de UX. Caso queira, você pode retirar o setTimeout e irá funcionar normalmente, mas ao testar você poderá sentir que esse tempo de resposta faz falta.

    Para finalizar, vamos colocar um estilo CSS para ficar mais agradável ao usuário.

    <style>
    	.watson{
    		border: 1px solid #B0BEC5;
    		border-radius: 3px;
    		height: 50em;
    		max-height: 500px;
    		padding: 1em;
    		
    		max-width: 500px;
    		margin: 0 auto;
    		
    		display: flex;
    		flex-direction: column;
    		justify-content: space-between;
    	}
    	
    	.watson .mensagens{
    		box-sizing: border-box;
    		overflow: hidden;
    		overflow-y: auto;
    		height: 100%;
    	}
    	
    	.watson .mensagens .area{
    		display: flex;
    		justify-content: flex-end;
    		flex-direction: column;
    		min-height: 100%;
    	}
    	
    	.watson .mensagens .texto{
    		border-radius: 2px;
    		box-sizing: border-box;
    		padding: .65em;
    		margin-top: .5em;
    		
    		animation: popupmensagem linear .2s;
    		animation-iteration-count: 1;
    		-webkit-animation: popupmensagem linear .2s;
    		-webkit-animation-iteration-count: 1;
    		-moz-animation: popupmensagem linear .2s;
    		-moz-animation-iteration-count: 1;
    		-o-animation: popupmensagem linear .2s;
    		-o-animation-iteration-count: 1;
    		-ms-animation: popupmensagem linear .2s;
    		-ms-animation-iteration-count: 1;
    	}
    	
    	.watson .mensagens .texto:first-child{
    		margin-top: 0;
    	}
    	
    	.watson .mensagens .texto.usuario{
    		background-color: #ECEFF1;
    		color: #1A237E;
    		margin-right: 30%;
    		
    		transform-origin: 0% 100%;
    		-webkit-transform-origin: 0% 100%;
    		-moz-transform-origin: 0% 100%;
    		-o-transform-origin: 0% 100%;
    		-ms-transform-origin: 0% 100%;
    	}
    	
    	.watson .mensagens .texto.chatbot{
    		background-color: #FF5722;
    		color: white;
    		font-weight: bold;
    		margin-left: 30%;
    		
    		transform-origin: 100% 100%;
    		-webkit-transform-origin: 100% 100%;
    		-moz-transform-origin: 100% 100%;
    		-o-transform-origin: 100% 100%;
    		-ms-transform-origin: 100% 100%;
    	}
    	
    	.watson form.mensagem{
    		padding: 0;
    		margin-top: 1em;
    	}
    	
    	.watson form.mensagem input{
    		border: 2px solid #476A7B;
    		border-radius: 3px;
    		padding: .5em .8em;
    		font-size: 16px;
    		display: block;
    		box-sizing: border-box;
    		width: 100%;
    	}
    	
    	.watson form.mensagem input:focus{
    		border: 2px solid #1A237E;
    		outline: none;
    	}
    	
    	.watson form.mensagem button{
    		background-color: #3F51B5;
    		border: none;
    		border-radius: 3px;
    		display: block;
    		padding: .5em 1em;
    		width: 100%;
    		font-size: 16px;
    		color: white;
    		margin-top: .5em;
    	}
    	
    	
    	/**Animação de Mensagem**/
    	
    	@keyframes popupmensagem{
    	  0% {
    		transform:  scaleX(0.30) scaleY(0.30) ;
    	  }
    	  100% {
    		transform:  scaleX(1.00) scaleY(1.00) ;
    	  }
    	}
    
    	@-moz-keyframes popupmensagem{
    	  0% {
    		-moz-transform:  scaleX(0.30) scaleY(0.30) ;
    	  }
    	  100% {
    		-moz-transform:  scaleX(1.00) scaleY(1.00) ;
    	  }
    	}
    
    	@-webkit-keyframes popupmensagem {
    	  0% {
    		-webkit-transform:  scaleX(0.30) scaleY(0.30) ;
    	  }
    	  100% {
    		-webkit-transform:  scaleX(1.00) scaleY(1.00) ;
    	  }
    	}
    
    	@-o-keyframes popupmensagem {
    	  0% {
    		-o-transform:  scaleX(0.30) scaleY(0.30) ;
    	  }
    	  100% {
    		-o-transform:  scaleX(1.00) scaleY(1.00) ;
    	  }
    	}
    
    	@-ms-keyframes popupmensagem {
    	  0% {
    		-ms-transform:  scaleX(0.30) scaleY(0.30) ;
    	  }
    	  100% {
    		-ms-transform:  scaleX(1.00) scaleY(1.00) ;
    	  }
    	}
    </style>
    

    E agora? Funciona mesmo?

    Veja o exemplo abaixo, utilizamos exatamente o mesmo código. Lembre-se que há apenas poucas interações e respostas criadas para este tutorial, então não espere ter uma conversa muito avançada com este chatbot.

    Obs. Está sendo utilizada no exemplo uma conta Lite, então é possível que quando você testar já tenha acabado o limite mensal.

    Caso você deseje um pouco mais de segurança, recomendamos que você utilize um arquivo .htdocs na pasta em que está o conversa.php, com o conteúdo abaixo. Evitando, assim, acesso externo.

    #Evitar Acesso Externo
    Order Deny,Allow
    Deny from all
    Allow from 127.           # localhost

    Faça o Download do Código no Github, se preferir:



    Download
    Implementar um chatbot do IBM Watson é mais simples do que você pensava, não é? Mas lembre-se que esse é só um tutorial básico para demonstrar como usar a API REST. Você pode, verificar todos os métodos e parâmetros que podem ser utilizados diretamente pela documentação.

    Caso tenha apreciado este conteúdo, dê uma passada lá na página da VelhoBit no Facebook e deixe seu like. Compartilhe este post com colegas e interessados na área de tecnologia e não deixe de conferir o restante dos artigos no blog.

    Até o próximo tutorial.

  • Quanto Custa Ser Designer?

    Quanto Custa Ser Designer?

    OBS: Este artigo recebeu atualizações com valores e propostas de 2017. Artigo Originalmente publicado em 2013.

    Tem vontade de ter um estúdio de design?  Ou talvez de trabalhar como designer autônomo? Pois saiba que os custos para a profissão é muito mais alto que a simples compra de um bom computador e uma cadeira.

    A ilusão criada de que é barato ser designer começa em parte pelo baixo custo dos computadores comuns (que podem ser divididos em diversas vezes “sem juros”) e pela popularização da pirataria, que possibilitou que qualquer pessoa adquirisse ilegalmente uma cópia funcional de programas como Photoshop, Illustrator e CorelDRAW. Além disso, cursos como SOS Computadores, Microlins, Microcamp, Cedaspy, Prepara, dentre outros com qualidade igualmente duvidável, criaram a ilusão de que para ser designer basta saber mexer ou brincar em alguns softwares gráficos, ignorando completamente o aprendizado teórico e relacionamentos.

    A realidade é que o custo para ser designer, além de computadores e software, incluem estudos, pesquisas e eventos. Abaixo, irei citar alguns custos que designers possuem para se manter, atualizar e/ou entrar na área. Lembrando que a ideia deste artigo não é desestimular, mas sim mostrar a realidade para aqueles que não tem ideia da complicação de uma empresa na área de design e comunicação.

    O Computador de um Designer

    Um computador para projetos gráficos é bem mais caro do que um computador para uso em escritórios ou doméstico. O custo de equipamento para um profissional de computação gráfica vai variar de acordo com o quê ele trabalha, se com impressos, 3D, vídeos ou relativos. De básico, pelo menos, 4 núcleos, 8GB de RAM, 1GB de vídeo, e, claro, um monitor com uma boa profundidade de pixels.

    Mas porque tanto se a um ano atrás podíamos trabalhar com um processador de 2 núcleos? A resposta pode ser resumida em uma palavra: Qualidade. Com o desenvolvimento de novas tecnologias, é necessário que o estúdio se adeque a esse padrão de qualidade para que não fique atrás de concorrentes, podendo produzir trabalhos com melhores resultados e em menor tempo. O custo de um computador nessas configurações é de, no mínimo, 1900 reais, à vista, caso desktop e cerca de 2400 reais, caso notebook. Isto se você não comprar um Mac, que é mais ideal para a área, aí o preço subiria para pelo menos 8 mil reais para a compra de um iMac razoável ou a partir de 14 mil para um MacPro simples (sem monitor) – caso este indicado para produção de vídeos e 3D. Porém, quando se tem várias máquinas, tende a precisar repor peças defeituosas constantemente, além de ter HDs externos para salvar arquivos importantes e servidores de backup, ainda compra frequentes de acessórios mais específicos. Tudo isso fora os periféricos como caixas de sons, impressoras lasers, roteador, módulo isolador, etc.

    Alguns tipos de computadores e equipamentos usados por designers

    Os Softwares e Aplicativos para Design

    Outrora, o mais caro em um estúdio era o Software. Hoje isso mudou um pouco, não chega a ser mais tão caro. O Windows 8.1 Pro custa cerca de 600 reais por máquina, mais uns 700 de Office. Qualquer laptop vem com o Windows 10 e você pode comprar uma versão Pro por cerca de 450 reais, mais o custo de 60 reais ao ano pelo Office 365. Hoje a Adobe possui um plano muito aceitável de 120 de 220 reais por mês, para o pacote completo. Licença essa que pode ser usado em até duas máquinas ao mesmo tempo. E se você usar o 3DsMAX? Mais 9 mil reais (para pequenas empresas)…. Caro não é? Só que, imagine só! Ainda tem Antivirus, AntiSpywares, Windows Server (caso não use um servidor de backups Linux), dentre outros pequenos serviços que são necessários. Felizmente, essas empresas costumam ter versões mais baratas para estudantes (o pacote Adobe CC fica por cerca de 50 reais 72 reais por mês, por exemplo) e o 3DsMAX e AutoCAD pode ser conseguido gratuitamente, mas não use, por ética, licenças estudantis para trabalhos profissionais recorrentes.

    Caso você utilize um Mac, o custo com software é um pouco menor, o que compensa o custo do hardware. Porém há opções mais bem acabadas como o Pixelmator (editor de imagens), Coda 2(editor de texto), Affinity Designer (desenho vetorial – também disponível para Windows) e Sketch 3 (criação de interfaces gráficas), são exemplos de bons apps focados em design, por valores aceitáveis.

    Equipe de Profissionais da Área de Design

    Encontrar pessoas capacitadas para trabalhar é uma tarefa muito difícil e cara, pois apesar do que possa parecer, o mercado está realmente necessidade de profissionais de verdade. Vocês pode perguntar como isso é possível com tantos cursinhos por aí? A resposta está na pergunta: “cursinhos”. Muitos excelentes profissionais não tem formação na área, mas estudam, lêem, conhecem pessoas, participam de encontros e eventos, etc. Mas essas instituições caça-níqueis, que representam uns 80% dos cursos profissionalizantes, não ensinam absolutamente nada de importante para um designer. Porém, a maioria dos formados nesses cursos se sentem designers. Do mesmo modo, muitas faculdades e cursos técnicos não preparam o profissional para a carreira profissional ou confundem-se com o objetivo principal, que é comunicação, não arte.

    Um profissional de verdade, cadastrado na ADG ou outras associações, tem um custo elevado. Um estagiário na área deve ter uma ajuda de custo (não remuneração) mínima de 700 reais 1000 reais, chegando a 1500 reais, dependendo do estado. Um profissional júnior, mas com boa aptidão, deve receber em torno de 1500 a 2000 1800 a 2300 reais. Fazer um trabalho de estética, sintético, prático, comunicativo, matemático e entender o cliente e o público consumidor não é algo tão simples como parece. É uma área que exige conhecimento em diversas outras áreas, desde tecnologias avançadas à artes plásticas, teatro, psicologia, música, jornalismo e todas as áreas que seus clientes estão envolvidos.

    Custos Adicionais

    Para poder desenvolver sites e sistemas hoje em dia, faz-se necessário alguns custos com equipamentos específicos. Tablets Android e iPads, Smartphones e outros equipamentos móveis são necessários para a elaboração de sites e sistemas adaptados e responsivos. Infelizmente e felizmente, existem diversos modelos e sistemas operacionais móveis, com diferentes resoluções e propostas. Isso pode gerar um custo de alguns milhares de reais a mais, dependendo do tipo de serviço que o designer/estúdio oferecer.

    Vale lembrar que é importante que o contrato contemple a adaptabilidade do projeto. Para desenvolver esse contrato é ideal contratar um advogado ou consultoria empresarial, pode ser iniciante, para que revise ou elabore um padrão desse contrato (e assim você possa reutilizar). Isso pois não é difícil encontrar casos de ter que trabalhar mais tempo refazendo coisas que o cliente exige por conta de um contrato mal formulado.

    Nos custos adicionais, ainda devem ser pensado custos com cursos de atualizações, livros para referências e ida a diversos eventos na área de tecnologia e design. Com o tempo, treinamentos específicos de oratória, coaching e outros executivos são necessários para garantir uma melhor apresentação perante os clientes.

    Custos de decoração e acessibilidade no escritório também são necessários. Isso é importante para manter a identidade da empresa perante visitantes e funcionários.

    adobe-camp-brasil

    Impostos

    O custo em impostos é de cerca de 25% em cima de cada serviço, quando contado as custas do ISS e do contador. Isso sem contar o valor no caso de você ter empregados e não sócios. Lembre-se que as empresas ligadas a tecnologia precisam ser abertas em sociedade e não há como atrelar ao Simples Nacional.

    Felizmente, desde 2015, empresas de TI podem ser inclusas no Simples Nacional, todavia, ainda precisam ser sócio, caso queira abrir uma pequena empresa. O custo em cima do imposto sobre serviço é de 5%, porém é necessário verificar o preço do contador, que pode variar por região ou empresa. Uma alternativa seria procurar outros designers e montar uma cooperativa, os custos de ISS continuariam os mesmos, porém você poderia diluir melhor os custos com infraestrutura e outros impostos.

    Como uma dica rápida, fuja do MEI (Micro Empreendedor Individual) para a área. Apesar de parecer ser uma boa proposta, visto a redução de impostos, você fica limitado a um valor mensal de 5 mil 7 mil reais em nota. Ou seja, caso você passe desse valor em um mês que seja, você já é obrigado a mudar para outra uma empresa normal, com sócio e tudo mais e fechar um MEI é tão difícil quanto fechar qualquer empresa, então não é uma boa ideia para a área.

    Estúdio de Design

    Como qualquer outra empresa, um Estúdio precisa de um local fixo. Não dá para ser na garagem de casa para sempre. É necessário alugar uma casa ou salas comerciais. É preciso pagar contas de água, luz (bem caro, por sinal), telefone (nossa, aí é que é caro mesmo), hospedagens e servidores, contador e internet (que precisa ser super-rápida para atender a demanda e prazos). E não vamos esquecer os produtos de limpeza, higiene, materiais de escritório, mesa, cadeiras ergométricas, etc.

    Horários de Trabalho de um Designer

    É muito normal um profissional de TI passar noites e madrugadas acordado, seja trabalhando ou refletindo em algo relacionado ao trabalho. Por mais que o cliente diga que seja algo rápido, certamente vai ser bem demorado.  É comum o cliente acabar atrasando o projeto, por manter aprovações em segundo plano ou demorar para responde-las. Lembre-se que os últimos 10% do trabalho demorará o mesmo tempo que levou com os outros 90%.

    Remuneração

    Mas o maior problema de todos é a inadimplência. Alguns clientes pensam, graças aos boatos tecnológicos e maravilhas da ficção, que o computador faz tudo sozinho. Por isso, às vezes simplesmente ignoram pagar todo o serviço, como se a parte que pagaram fosse suficiente, mesmo o valor sendo totalmente acordado em um contrato. Quando isso acontece, é necessário muito jogo de cintura, e, por muitas vezes, deve ser ignorado para evitar que o seu nome entre em casos que possam sujar a imagem do Designer ou da Empresa. Somente em último caso o contrato deverá ser reclamado.

    Em outro artigo, abordaremos o assunto sobre o quanto cobrar e como cobrar, baseado em seus custos fixos e investimento inicial.

    Como iniciar um negócio?

    Todavia, uma empresa pode ser iniciada com recursos menores sim. Não há problemas que dois amigos se juntem, com seus computadores e softwares e comecem um negócio pequeno. A única coisa que deve ser lembrada é que se deve sempre pensar no ponto de vista legal. Que impostos devem ser pagos, notas devem ser passadas e deve seguir a ética e conduta para poder manter um mercado sólido, saudável e competitivo.

    É totalmente possível iniciar o trabalho como autônomo, para isso é necessário fazer um cadastro na prefeitura (CIM) e tirar nota fiscal avulsa para serviço (você consegue diretamente na prefeitura – ou subprefeitura – ou órgão autorizado). Além disso, você deve possuir boas máquinas e um local para reuniões. No começo, você pode optar em marcar reuniões em cafeterias ou restaurantes, enquanto tratar de empresas pequenas, mas com o tempo é necessário um local organizado e personalizado para receber o cliente.

    Mac aberto de lado em um escritório

    Como autônomo, você precisaria de:

    • Laptop ou Computador;
    • Mesa e Cadeira confortável;
    • Internet de Qualidade;
    • Impressora Jato de Tinta;
    • Materiais de desenho e rascunho como Papel, Nanquim e Lápis;
    • Custo de Software (Como Adobe CC);
    • Livros e Treinamento.

    Isso gera um custo fixo de cerca de 300 reais a 500 reais 500 reais a 1000 reais por mês mais um investimento inicial de cerca de 5 a 10 mil reais.

    Para um escritório, você deve adicionar ainda todas as questões legais, local de trabalho, mais computadores, etc. O ideal é que quando você for mudar de autônomo para empresa, procure uma consultoria, contador ou amigos da área que já passaram por essa situação.

    O custo inicial para um estúdio de design gira em torno de 40 mil reais iniciais, tendo um custo fixo mensal de 1.5 a 2 mil reais 2 mil a 4 mil reais iniciais.

    Fique claro que esse custo varia de estado para estado. Estados como São Paulo e Rio de Janeiro, os custos são muito maiores do que como Tocantins ou Rio Grande do Norte.

    Conclusão

    Diante de tantas adversidades, fica claro que manter um estúdio de design não é tão simples quanto muitos fazem parecer e nem é aquela “festa de Baco” ou um “chocolate quente”. Muito além do que possa parecer, um estúdio de design é sinônimo de dor de cabeça, noites em claro, stress e litros de café. Mas quando o seu trabalho é reconhecido, e bem pago, faz com que tudo valha a pena.

  • O que é Design?

    O que é Design?

    O que é Design?

    A palavra design está na moda. Talvez graças a popularização dos produtos Apple, famosos por seu design, ou pelo simples costume de querer criar termos mais bonitos usando palavras “importadas”. Com o passar dos anos, muitas e muitas palavras foram aportuguesadas, mesmo já possuindo uma tradução ideal, como no caso de customizar (de custom) ao invés de personalizar  ou randômico (de random), que o correto seria aleatório. Mas já quanto ao termo design, é diferente. Não foi aportuguesado, mas tornou-se sinônimo de algo que é tão indefinido que parece ser usado como uma forma de expressão artística, para definir qualquer tipo de profissão que deseja ser pronunciado mais “bonito”.

    Esse questionamento veio a mim quando um colega de trabalho me mostrou uma espécie de empresa de uma faculdade, mais especificamente da Faal, essa empresa denomina-se Coma (não sei se é por causa do verbo ou para ser mórbido mesmo), mas quase fiquei em coma ao ler o que havia escrito dentro de sua página inicial no Facebook:

    “Seu objetivo principal é desenvolver projetos de design com máximo de eficiência.”

    Talvez para a maioria a frase acima faça sentido. Todavia, quem tem o mínimo conhecimento de design notará um erro sério. Isso pois Design quer dizer projeto, design é projetar, realizar, organizar, planejar. Projetos de design é na verdade uma redudância: Projeto de Projeto.

    O problema é que se a Coma, que é uma empresa que afirma trabalhar com design, não sabe o significado real dessa palavra, como esperar que pessoas leigas a compreenda e a use corretamente? Não é incomum encontrar pessoas como cabelereiros ou manicures que usam termos como hair design, designer de unhas, até mesmo designer de bolos.

    Ficou claro o que não é design, mas o que é design?

    Design é projeto, por tradução e definição. Quando afirmam por exemplo que a Apple não é uma empresa de tecnologia, mas de design, é uma contradição. A Apple é uma empresa de tecnologia que prima pelo o design, ou seja, que prioriza todas as etapas do projeto. Um dos maiores designers do mundo foi Steve Wozniak, o Woz, por saber organizar corretamente uma placa de circuitos impressos com os componentes estão organizados de forma que tudo funcione bem e ainda sim compacta. A beleza dessa placa é o resultado de um bom design, ou seja, de um bom projeto.

    apple-1-placa-circuito

    Fazer o design de algo, é fazer o projeto de algo, se preocupar com suas funções acima de tudo e isso envolve como funciona e como esse artefato está organizado.

    Alguns podem afirmar que esse não é o trabalho de um designer, mas de um engenheiro. A importância do engenheiro é fazer funcionar e cuidar da segurança e resistência de um determinado projeto. O Designer de verdade é muito semelhante ao arquiteto, ele precisa conhecer cada etapa de desenvolvimento do artefato que ele está projetando. Se é um designer de produtos, precisa entender de materiais, se um designer de impressos, precisa entender de impressão, tinta e papel. Já se é um web designer, precisa entender de linguagens de programação e marcação. Se for designer de moda, precisa aprender a costurar e conhecer os tecidos.

    Essa definição deixa clara que um designer é um projetista, sempre atento aos detalhes de confecção de seu artefato final. Então podemos compreender que se algo não é projetável, então não pode ser feito por um designer. Um designer de unhas desenvolve a unha? Ou ele somente pinta a unha de forma mais artística? Se pensarmos corretamente, um hair designer teria que ser um “peruqueiro”.

    Design é Arte?

    Não. Design não é arte. Dessa forma, ilustração, pintura, desenho e fotografia não é design, mas arte. A diferença principal é o fato de que o design é objetivo, ele possui uma finalidade. Já a arte pode e, geralmente, é subjetiva, não precisa ter um objetivo ou uma causa. Como usar a ilustração, a pintura ou o desenho ou a fotografia, de forma a comunicar uma ideia, produto ou empresa é que é realmente design.

    Por tanto,  não há hair designers ou designers de unhas ou designers de bolo, ou parecidos. simplesmente porque essas coisas não existem. E se você sabe mexer no Photoshop ou no CorelDRAW, isso não te faz um designer gráfico. Se você faz layouts para blogs, mas não tem a ideia de como montá-los, você também não é um web designer. Designer é aquele que projeta, design é o projeto em si e o artefato, seu resultado. A estética é só uma das virtudes que compõe o bom design e o belo é o seu resultado.

    Um designer de uma área compreende o valor do design de outra, se um designer de moda não consegue ver a beleza em uma placa de circuito impressos e um web designer não consegue ver a beleza em uma caneta. Se um designer não consegue reconhecer a beleza do design de outra especialidade, então precisa rever os conceitos.